[{"data":1,"prerenderedAt":174270},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch11-chuan-tong-bu-ju-yu-ding-wei-ti-xi":3,"wiki-doc-nav":1572},{"id":4,"title":5,"body":6,"description":1564,"extension":1565,"meta":1566,"navigation":1567,"path":1568,"seo":1569,"stem":1570,"__hash__":1571},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":8,"toc":1556},"minimark",[9,13,18,23,36,40,57,127,169,173,190,193,196,240,244,249,252,255,259,262,275,346,391,394,410,464,472,475,486,540,567,570,583,637,669,723,746,800,805,808,815,869,890,944,947,950,1036,1044,1102,1126,1130,1133,1151,1155,1174,1228,1269,1273,1276,1279,1301,1305,1313,1316,1321,1332,1335,1339,1353,1397,1400,1404,1407,1412,1438,1443,1524,1527,1531,1534,1537,1540,1543,1546,1549,1552],[10,11,5],"h1",{"id":12},"_11-传统布局与定位体系",[14,15,17],"h2",{"id":16},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,20,22],"h3",{"id":21},"_1111-普通流标准流","11.1.1 普通流（标准流）",[24,25,26,30,33],"ul",{},[27,28,29],"li",{},"所谓的标准流: 就是标签按照规定好默认方式排列",[27,31,32],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[27,34,35],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,37,39],{"id":38},"_1112-浮动","11.1.2 浮动",[24,41,42,45,48,51,54],{},[27,43,44],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[27,46,47],{},"浮动可以改变元素标签默认的排列方式",[27,49,50],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[27,52,53],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[27,55,56],{},"在使用行内块转换时盒子之间是有空隙的",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-Css shiki shiki-themes github-light github-dark",".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n","Css","",[65,66,67,80,96,102,110,122],"code",{"__ignoreMap":63},[68,69,72,76],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sScJk",".left",[68,77,79],{"class":78},"sVt8B"," {\n",[68,81,83,87,90,93],{"class":70,"line":82},2,[68,84,86],{"class":85},"sj4cs","  float",[68,88,89],{"class":78},": ",[68,91,92],{"class":85},"left",[68,94,95],{"class":78},";\n",[68,97,99],{"class":70,"line":98},3,[68,100,101],{"class":78},"}\n",[68,103,105,108],{"class":70,"line":104},4,[68,106,107],{"class":74},".right",[68,109,79],{"class":78},[68,111,113,115,117,120],{"class":70,"line":112},5,[68,114,86],{"class":85},[68,116,89],{"class":78},[68,118,119],{"class":85},"right",[68,121,95],{"class":78},[68,123,125],{"class":70,"line":124},6,[68,126,101],{"class":78},[128,129,130,143],"table",{},[131,132,133],"thead",{},[134,135,136,140],"tr",{},[137,138,139],"th",{"align":92},"属性值",[137,141,142],{"align":92},"描述",[144,145,146,155,162],"tbody",{},[134,147,148,152],{},[149,150,151],"td",{"align":92},"none",[149,153,154],{"align":92},"元素不浮动（默认值）",[134,156,157,159],{},[149,158,92],{"align":92},[149,160,161],{"align":92},"元素向左浮动",[134,163,164,166],{},[149,165,119],{"align":92},[149,167,168],{"align":92},"元素向右浮动",[170,171,172],"p",{},"浮动重点：",[24,174,175,178,181,184,187],{},[27,176,177],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[27,179,180],{},"浮动的元素会一行内显示并且元素顶部对齐",[27,182,183],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[27,185,186],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[27,188,189],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[170,191,192],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[170,194,195],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[58,197,198],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,199,200,206,216,220,226,236],{"__ignoreMap":63},[68,201,202,204],{"class":70,"line":71},[68,203,75],{"class":74},[68,205,79],{"class":78},[68,207,208,210,212,214],{"class":70,"line":82},[68,209,86],{"class":85},[68,211,89],{"class":78},[68,213,92],{"class":85},[68,215,95],{"class":78},[68,217,218],{"class":70,"line":98},[68,219,101],{"class":78},[68,221,222,224],{"class":70,"line":104},[68,223,107],{"class":74},[68,225,79],{"class":78},[68,227,228,230,232,234],{"class":70,"line":112},[68,229,86],{"class":85},[68,231,89],{"class":78},[68,233,119],{"class":85},[68,235,95],{"class":78},[68,237,238],{"class":70,"line":124},[68,239,101],{"class":78},[19,241,243],{"id":242},"_1113-定位","11.1.3 定位",[245,246,248],"h4",{"id":247},"_11131-使用场景","11.1.3.1 使用场景",[170,250,251],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[170,253,254],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[245,256,258],{"id":257},"_11132-定位组成","11.1.3.2 定位组成",[170,260,261],{},"定位 = 定位模式 + 边偏移",[263,264,265],"ol",{},[27,266,267,271,272],{},[268,269,270],"strong",{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[268,273,274],{},"定位模式",[58,276,278],{"className":60,"code":277,"language":62,"meta":63,"style":63},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[65,279,280,287,304,324,342],{"__ignoreMap":63},[68,281,282,285],{"class":70,"line":71},[68,283,284],{"class":74},".box",[68,286,79],{"class":78},[68,288,289,292,294,297,300],{"class":70,"line":82},[68,290,291],{"class":85},"  position",[68,293,89],{"class":78},[68,295,296],{"class":85},"relative",[68,298,299],{"class":78},";  ",[68,301,303],{"class":302},"sJ8bj","\u002F* 定位模式 *\u002F\n",[68,305,306,309,311,314,318,321],{"class":70,"line":98},[68,307,308],{"class":85},"  top",[68,310,89],{"class":78},[68,312,313],{"class":85},"10",[68,315,317],{"class":316},"szBVR","px",[68,319,320],{"class":78},";           ",[68,322,323],{"class":302},"\u002F* 边偏移：上 *\u002F\n",[68,325,326,329,331,334,336,339],{"class":70,"line":104},[68,327,328],{"class":85},"  left",[68,330,89],{"class":78},[68,332,333],{"class":85},"20",[68,335,317],{"class":316},[68,337,338],{"class":78},";          ",[68,340,341],{"class":302},"\u002F* 边偏移：左 *\u002F\n",[68,343,344],{"class":70,"line":112},[68,345,101],{"class":78},[128,347,348,358],{},[131,349,350],{},[134,351,352,355],{},[137,353,354],{"align":92},"值",[137,356,357],{"align":92},"语义",[144,359,360,368,375,383],{},[134,361,362,365],{},[149,363,364],{"align":92},"static",[149,366,367],{"align":92},"静态定位",[134,369,370,372],{},[149,371,296],{"align":92},[149,373,374],{"align":92},"相对定位",[134,376,377,380],{},[149,378,379],{"align":92},"absolute",[149,381,382],{"align":92},"绝对定位",[134,384,385,388],{},[149,386,387],{"align":92},"fixed",[149,389,390],{"align":92},"固定定位",[170,392,393],{},"（1）静态定位：",[24,395,396,407],{},[27,397,398,399,402,403,406],{},"静态定位是元素的 ",[268,400,401],{},"默认定位方式"," ， ",[268,404,405],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[27,408,409],{},"语法：",[58,411,412],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,413,414,420,432,446,460],{"__ignoreMap":63},[68,415,416,418],{"class":70,"line":71},[68,417,284],{"class":74},[68,419,79],{"class":78},[68,421,422,424,426,428,430],{"class":70,"line":82},[68,423,291],{"class":85},[68,425,89],{"class":78},[68,427,296],{"class":85},[68,429,299],{"class":78},[68,431,303],{"class":302},[68,433,434,436,438,440,442,444],{"class":70,"line":98},[68,435,308],{"class":85},[68,437,89],{"class":78},[68,439,313],{"class":85},[68,441,317],{"class":316},[68,443,320],{"class":78},[68,445,323],{"class":302},[68,447,448,450,452,454,456,458],{"class":70,"line":104},[68,449,328],{"class":85},[68,451,89],{"class":78},[68,453,333],{"class":85},[68,455,317],{"class":316},[68,457,338],{"class":78},[68,459,341],{"class":302},[68,461,462],{"class":70,"line":112},[68,463,101],{"class":78},[24,465,466,469],{},[27,467,468],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[27,470,471],{},"静态定位在布局时我们几乎不用的",[170,473,474],{},"（2）相对定位",[24,476,477,484],{},[27,478,479,480,483],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[268,481,482],{},"原来的位置"," 来说的（自恋型）",[27,485,409],{},[58,487,488],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,489,490,496,508,522,536],{"__ignoreMap":63},[68,491,492,494],{"class":70,"line":71},[68,493,284],{"class":74},[68,495,79],{"class":78},[68,497,498,500,502,504,506],{"class":70,"line":82},[68,499,291],{"class":85},[68,501,89],{"class":78},[68,503,296],{"class":85},[68,505,299],{"class":78},[68,507,303],{"class":302},[68,509,510,512,514,516,518,520],{"class":70,"line":98},[68,511,308],{"class":85},[68,513,89],{"class":78},[68,515,313],{"class":85},[68,517,317],{"class":316},[68,519,320],{"class":78},[68,521,323],{"class":302},[68,523,524,526,528,530,532,534],{"class":70,"line":104},[68,525,328],{"class":85},[68,527,89],{"class":78},[68,529,333],{"class":85},[68,531,317],{"class":316},[68,533,338],{"class":78},[68,535,341],{"class":302},[68,537,538],{"class":70,"line":112},[68,539,101],{"class":78},[24,541,542],{},[27,543,544,545,548,549,551,552,555,556,559,560,562,563,566],{},"相对定位的特点：",[546,547],"br",{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[546,550],{},"  ② ",[268,553,554],{},"原来"," 在标准流的 ",[268,557,558],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[546,561],{},"  ③因此， ",[268,564,565],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[170,568,569],{},"（3）绝对定位",[24,571,572,581],{},[27,573,574,576,577,580],{},[268,575,382],{}," 是元素在移动位置的时候，是相对于它 ",[268,578,579],{},"祖先元素"," 来说的（拼爹型）",[27,582,409],{},[58,584,585],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,586,587,593,605,619,633],{"__ignoreMap":63},[68,588,589,591],{"class":70,"line":71},[68,590,284],{"class":74},[68,592,79],{"class":78},[68,594,595,597,599,601,603],{"class":70,"line":82},[68,596,291],{"class":85},[68,598,89],{"class":78},[68,600,296],{"class":85},[68,602,299],{"class":78},[68,604,303],{"class":302},[68,606,607,609,611,613,615,617],{"class":70,"line":98},[68,608,308],{"class":85},[68,610,89],{"class":78},[68,612,313],{"class":85},[68,614,317],{"class":316},[68,616,320],{"class":78},[68,618,323],{"class":302},[68,620,621,623,625,627,629,631],{"class":70,"line":104},[68,622,328],{"class":85},[68,624,89],{"class":78},[68,626,333],{"class":85},[68,628,317],{"class":316},[68,630,338],{"class":78},[68,632,341],{"class":302},[68,634,635],{"class":70,"line":112},[68,636,101],{"class":78},[24,638,639,654,663,666],{},[27,640,641,642,644,645,647,648,650,651,653],{},"绝对定位的特点：",[546,643],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[546,646],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[546,649],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[546,652],{},"  (4)固定定位",[27,655,656,658,659,662],{},[268,657,390],{}," 是元素 ",[268,660,661],{},"固定于浏览器可视区的位置"," 。（认死理型）",[27,664,665],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[27,667,668],{},"语法:",[58,670,671],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,672,673,679,691,705,719],{"__ignoreMap":63},[68,674,675,677],{"class":70,"line":71},[68,676,284],{"class":74},[68,678,79],{"class":78},[68,680,681,683,685,687,689],{"class":70,"line":82},[68,682,291],{"class":85},[68,684,89],{"class":78},[68,686,296],{"class":85},[68,688,299],{"class":78},[68,690,303],{"class":302},[68,692,693,695,697,699,701,703],{"class":70,"line":98},[68,694,308],{"class":85},[68,696,89],{"class":78},[68,698,313],{"class":85},[68,700,317],{"class":316},[68,702,320],{"class":78},[68,704,323],{"class":302},[68,706,707,709,711,713,715,717],{"class":70,"line":104},[68,708,328],{"class":85},[68,710,89],{"class":78},[68,712,333],{"class":85},[68,714,317],{"class":316},[68,716,338],{"class":78},[68,718,341],{"class":302},[68,720,721],{"class":70,"line":112},[68,722,101],{"class":78},[24,724,725,734],{},[27,726,727,728,730,731,733],{},"特点:",[546,729],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[546,732],{},"  ②固定定位不再占有原先的位置,完全脱标",[27,735,736,737,739,740,742,743,745],{},"固定在版心位置的方法:",[546,738],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[546,741],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[546,744],{},"  实例：",[58,747,748],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,749,750,756,768,782,796],{"__ignoreMap":63},[68,751,752,754],{"class":70,"line":71},[68,753,284],{"class":74},[68,755,79],{"class":78},[68,757,758,760,762,764,766],{"class":70,"line":82},[68,759,291],{"class":85},[68,761,89],{"class":78},[68,763,296],{"class":85},[68,765,299],{"class":78},[68,767,303],{"class":302},[68,769,770,772,774,776,778,780],{"class":70,"line":98},[68,771,308],{"class":85},[68,773,89],{"class":78},[68,775,313],{"class":85},[68,777,317],{"class":316},[68,779,320],{"class":78},[68,781,323],{"class":302},[68,783,784,786,788,790,792,794],{"class":70,"line":104},[68,785,328],{"class":85},[68,787,89],{"class":78},[68,789,333],{"class":85},[68,791,317],{"class":316},[68,793,338],{"class":78},[68,795,341],{"class":302},[68,797,798],{"class":70,"line":112},[68,799,101],{"class":78},[801,802],"img",{"style":803,"src":804},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[170,806,807],{},"(5)粘性定位",[24,809,810,813],{},[27,811,812],{},"粘性定位可以被认为是相对定位和固定定位的混合",[27,814,409],{},[58,816,817],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,818,819,825,837,851,865],{"__ignoreMap":63},[68,820,821,823],{"class":70,"line":71},[68,822,284],{"class":74},[68,824,79],{"class":78},[68,826,827,829,831,833,835],{"class":70,"line":82},[68,828,291],{"class":85},[68,830,89],{"class":78},[68,832,296],{"class":85},[68,834,299],{"class":78},[68,836,303],{"class":302},[68,838,839,841,843,845,847,849],{"class":70,"line":98},[68,840,308],{"class":85},[68,842,89],{"class":78},[68,844,313],{"class":85},[68,846,317],{"class":316},[68,848,320],{"class":78},[68,850,323],{"class":302},[68,852,853,855,857,859,861,863],{"class":70,"line":104},[68,854,328],{"class":85},[68,856,89],{"class":78},[68,858,333],{"class":85},[68,860,317],{"class":316},[68,862,338],{"class":78},[68,864,341],{"class":302},[68,866,867],{"class":70,"line":112},[68,868,101],{"class":78},[24,870,871],{},[27,872,873,874,876,877,879,880,882,883,886,887,889],{},"粘性定位的特点：",[546,875],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[546,878],{},"  ②粘性定位占有原先的位置（相对定位特点）",[546,881],{},"  ③必须添加 top 、left、right、bottom ",[268,884,885],{},"其中一个"," 才有效",[546,888],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[58,891,892],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,893,894,900,912,926,940],{"__ignoreMap":63},[68,895,896,898],{"class":70,"line":71},[68,897,284],{"class":74},[68,899,79],{"class":78},[68,901,902,904,906,908,910],{"class":70,"line":82},[68,903,291],{"class":85},[68,905,89],{"class":78},[68,907,296],{"class":85},[68,909,299],{"class":78},[68,911,303],{"class":302},[68,913,914,916,918,920,922,924],{"class":70,"line":98},[68,915,308],{"class":85},[68,917,89],{"class":78},[68,919,313],{"class":85},[68,921,317],{"class":316},[68,923,320],{"class":78},[68,925,323],{"class":302},[68,927,928,930,932,934,936,938],{"class":70,"line":104},[68,929,328],{"class":85},[68,931,89],{"class":78},[68,933,333],{"class":85},[68,935,317],{"class":316},[68,937,338],{"class":78},[68,939,341],{"class":302},[68,941,942],{"class":70,"line":112},[68,943,101],{"class":78},[801,945],{"style":803,"src":946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[170,948,949],{},"(6)总结",[128,951,952,967],{},[131,953,954],{},[134,955,956,958,961,964],{},[137,957,274],{"align":92},[137,959,960],{"align":92},"是否脱标",[137,962,963],{"align":92},"移动位置",[137,965,966],{"align":92},"是否常用",[144,968,969,983,997,1011,1024],{},[134,970,971,974,977,980],{},[149,972,973],{"align":92},"Static 静态定位",[149,975,976],{"align":92},"否",[149,978,979],{"align":92},"不能使用边偏移",[149,981,982],{"align":92},"很少",[134,984,985,988,991,994],{},[149,986,987],{"align":92},"Relative 相对定位",[149,989,990],{"align":92},"否(占有位置)",[149,992,993],{"align":92},"相对于自身位置移动",[149,995,996],{"align":92},"基本单独使用",[134,998,999,1002,1005,1008],{},[149,1000,1001],{"align":92},"Absolute 绝对定位",[149,1003,1004],{"align":92},"是(不占有位置)",[149,1006,1007],{"align":92},"带有定位的父级",[149,1009,1010],{"align":92},"要和定位父级元素搭配使用",[134,1012,1013,1016,1018,1021],{},[149,1014,1015],{"align":92},"Fixed 固定定位",[149,1017,1004],{"align":92},[149,1019,1020],{"align":92},"浏览器可视区",[149,1022,1023],{"align":92},"单独使用,不需要父级",[134,1025,1026,1029,1031,1033],{},[149,1027,1028],{"align":92},"Sticky 粘性定位",[149,1030,990],{"align":92},[149,1032,1020],{"align":92},[149,1034,1035],{"align":92},"当前阶段少",[263,1037,1038],{"start":82},[27,1039,1040,1043],{},[268,1041,1042],{},"边偏移"," 则决定了该元素的最终位置",[128,1045,1046,1058],{},[131,1047,1048],{},[134,1049,1050,1053,1056],{},[137,1051,1052],{"align":92},"边偏移属性",[137,1054,1055],{"align":92},"示例",[137,1057,142],{"align":92},[144,1059,1060,1071,1082,1092],{},[134,1061,1062,1065,1068],{},[149,1063,1064],{"align":92},"top",[149,1066,1067],{"align":92},"top: 80px;",[149,1069,1070],{"align":92},"顶端偏移量，定义元素相对于父元素上边线的距离",[134,1072,1073,1076,1079],{},[149,1074,1075],{"align":92},"bottom",[149,1077,1078],{"align":92},"bottom: 80px ;",[149,1080,1081],{"align":92},"底部偏移量，定义元素相对于其父元素下边线的距离",[134,1083,1084,1086,1089],{},[149,1085,92],{"align":92},[149,1087,1088],{"align":92},"left: 80px ;",[149,1090,1091],{"align":92},"左侧偏移量，定义元素相对于其父元素左边线的距离",[134,1093,1094,1096,1099],{},[149,1095,119],{"align":92},[149,1097,1098],{"align":92},"right: 80px ;",[149,1100,1101],{"align":92},"右侧偏移量，定义元素相对于其父元素右边线的距离",[24,1103,1104],{},[27,1105,1106,1107,1109,1110,1112,1113,1115,1116,1119,1120,1122,1123,1125],{},"注意：",[546,1108],{},"  ① ",[268,1111,1042],{}," 需要和 ",[268,1114,274],{}," 联合使用， ",[268,1117,1118],{},"单独使用无效"," ；",[546,1121],{},"  ②top和bottom不要同时使用",[546,1124],{},"  ③left和right不要同时使用",[245,1127,1129],{"id":1128},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[170,1131,1132],{},"子级是绝对定位的话，父级要用相对定位",[24,1134,1135,1138,1141,1144],{},[27,1136,1137],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[27,1139,1140],{},"父盒子需要加定位限制子盒子在父盒子内显示",[27,1142,1143],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[27,1145,1146,1147,1150],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[268,1148,1149],{},"子绝父绝"," 也会遇到",[245,1152,1154],{"id":1153},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[24,1156,1157,1172],{},[27,1158,1159,1160,1163,1164,1167,1168,1171],{},"在使用 ",[268,1161,1162],{},"定位"," 布局时，可能会 ",[268,1165,1166],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[268,1169,1170],{},"z-index"," 来控制盒子的前后次序 (z轴)",[27,1173,409],{},[58,1175,1176],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,1177,1178,1184,1196,1210,1224],{"__ignoreMap":63},[68,1179,1180,1182],{"class":70,"line":71},[68,1181,284],{"class":74},[68,1183,79],{"class":78},[68,1185,1186,1188,1190,1192,1194],{"class":70,"line":82},[68,1187,291],{"class":85},[68,1189,89],{"class":78},[68,1191,296],{"class":85},[68,1193,299],{"class":78},[68,1195,303],{"class":302},[68,1197,1198,1200,1202,1204,1206,1208],{"class":70,"line":98},[68,1199,308],{"class":85},[68,1201,89],{"class":78},[68,1203,313],{"class":85},[68,1205,317],{"class":316},[68,1207,320],{"class":78},[68,1209,323],{"class":302},[68,1211,1212,1214,1216,1218,1220,1222],{"class":70,"line":104},[68,1213,328],{"class":85},[68,1215,89],{"class":78},[68,1217,333],{"class":85},[68,1219,317],{"class":316},[68,1221,338],{"class":78},[68,1223,341],{"class":302},[68,1225,1226],{"class":70,"line":112},[68,1227,101],{"class":78},[24,1229,1230],{},[27,1231,1232,1233,1109,1235,1237,1238,1241,1242,1245,1246,1249,1250,1252,1253,1256,1257,1119,1260,1262,1263,1266,1268],{},"z-index的特性",[546,1234],{},[268,1236,139],{}," ： ",[268,1239,1240],{},"正整数"," 、 ",[268,1243,1244],{},"负整数"," 或 ",[268,1247,1248],{},"0"," ，默认值是 0，数值越大，盒子越靠上；",[546,1251],{},"  ②如果 ",[268,1254,1255],{},"属性值相同"," ，则按照书写顺序， ",[268,1258,1259],{},"后来居上",[546,1261],{},"  ③数字后面 ",[268,1264,1265],{},"不能加单位",[546,1267],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[245,1270,1272],{"id":1271},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[170,1274,1275],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[170,1277,1278],{},"方法:",[24,1280,1281,1291],{},[27,1282,1283,1284,1287,1288],{},"left: 50%; 让 ",[268,1285,1286],{},"盒子的左侧"," 移动到 ",[268,1289,1290],{},"父级元素的水平中心位置",[27,1292,1293,1294,1297,1298],{},"margin-left: -100px; 让盒子 ",[268,1295,1296],{},"向左"," 移动 ",[268,1299,1300],{},"自身宽度的一半",[245,1302,1304],{"id":1303},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[263,1306,1307,1310],{},[27,1308,1309],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[27,1311,1312],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[170,1314,1315],{},"也就是说绝对定位和固定定位和浮动类似",[263,1317,1318],{"start":98},[27,1319,1320],{},"display 是显示模式， 可以改变显示模式有以下方式:",[24,1322,1323,1326,1329],{},[27,1324,1325],{},"可以用inline-block 转换为行内块",[27,1327,1328],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[27,1330,1331],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[170,1333,1334],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[245,1336,1338],{"id":1337},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[263,1340,1341,1344,1347,1350],{},[27,1342,1343],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[27,1345,1346],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[27,1348,1349],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[27,1351,1352],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[58,1354,1355],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,1356,1357,1363,1373,1377,1383,1393],{"__ignoreMap":63},[68,1358,1359,1361],{"class":70,"line":71},[68,1360,75],{"class":74},[68,1362,79],{"class":78},[68,1364,1365,1367,1369,1371],{"class":70,"line":82},[68,1366,86],{"class":85},[68,1368,89],{"class":78},[68,1370,92],{"class":85},[68,1372,95],{"class":78},[68,1374,1375],{"class":70,"line":98},[68,1376,101],{"class":78},[68,1378,1379,1381],{"class":70,"line":104},[68,1380,107],{"class":74},[68,1382,79],{"class":78},[68,1384,1385,1387,1389,1391],{"class":70,"line":112},[68,1386,86],{"class":85},[68,1388,89],{"class":78},[68,1390,119],{"class":85},[68,1392,95],{"class":78},[68,1394,1395],{"class":70,"line":124},[68,1396,101],{"class":78},[801,1398],{"style":803,"src":1399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[245,1401,1403],{"id":1402},"_11138-轮播图","11.1.3.8 轮播图",[801,1405],{"style":803,"src":1406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[263,1408,1409],{},[27,1410,1411],{},"制作顺序:",[24,1413,1414,1417,1420,1429],{},[27,1415,1416],{},"大盒子我们类名为： tb-promo 淘宝广告",[27,1418,1419],{},"里面先放一张图片",[27,1421,1422,1423,1425,1426,1428],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[546,1424],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[546,1427],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[27,1430,1431,1432,1434,1435,1437],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[546,1433],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[546,1436],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[263,1439,1440],{"start":82},[27,1441,1442],{},"代码模块",[58,1444,1446],{"className":60,"code":1445,"language":62,"meta":63,"style":63},"\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",[65,1447,1448,1453,1460,1470,1480,1490,1494,1500,1508,1519],{"__ignoreMap":63},[68,1449,1450],{"class":70,"line":71},[68,1451,1452],{"class":302},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[68,1454,1455,1458],{"class":70,"line":82},[68,1456,1457],{"class":74},".son",[68,1459,79],{"class":78},[68,1461,1462,1464,1466,1468],{"class":70,"line":98},[68,1463,291],{"class":85},[68,1465,89],{"class":78},[68,1467,379],{"class":85},[68,1469,95],{"class":78},[68,1471,1472,1474,1476,1478],{"class":70,"line":104},[68,1473,308],{"class":85},[68,1475,89],{"class":78},[68,1477,1248],{"class":85},[68,1479,95],{"class":78},[68,1481,1482,1484,1486,1488],{"class":70,"line":112},[68,1483,328],{"class":85},[68,1485,89],{"class":78},[68,1487,1248],{"class":85},[68,1489,95],{"class":78},[68,1491,1492],{"class":70,"line":124},[68,1493,101],{"class":78},[68,1495,1497],{"class":70,"line":1496},7,[68,1498,1499],{"class":302},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[68,1501,1503,1506],{"class":70,"line":1502},8,[68,1504,1505],{"class":74},".father",[68,1507,79],{"class":78},[68,1509,1511,1513,1515,1517],{"class":70,"line":1510},9,[68,1512,291],{"class":85},[68,1514,89],{"class":78},[68,1516,296],{"class":85},[68,1518,95],{"class":78},[68,1520,1522],{"class":70,"line":1521},10,[68,1523,101],{"class":78},[170,1525,1526],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,1528,1530],{"id":1529},"_1114-定位数值的移动","11.1.4 定位数值的移动",[801,1532],{"style":803,"src":1533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[170,1535,1536],{},"✨ 黄金口诀：",[170,1538,1539],{},"\"TOP正下负上，LEFT正右负左\"",[170,1541,1542],{},"\"RIGHT正左负右，BOTTOM正上负下",[170,1544,1545],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[170,1547,1548],{},"✨ 简单记：",[170,1550,1551],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1553,1554,1555],"style",{},"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":63,"searchDepth":82,"depth":82,"links":1557},[1558],{"id":16,"depth":82,"text":17,"children":1559},[1560,1561,1562,1563],{"id":21,"depth":98,"text":22},{"id":38,"depth":98,"text":39},{"id":242,"depth":98,"text":243},{"id":1529,"depth":98,"text":1530},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":5,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",[1573,6652,7759,9179,12167,13518,15007,16096,24857,24869,25467,25493,25617,25858,25923,25941,25954,26001,26125,26294,26493,26673,26878,27014,27109,27146,27159,27469,28210,28918,28939,29957,31588,31739,31752,31764,32065,51877,51892,51909,51942,54812,78155,94298,94319,94432,94553,95323,95986,96347,96385,96491,96591,96634,96660,96721,98375,98476,98501,98992,99492,100572,100855,101597,102099,102111,104127,105791,107293,108991,110908,112827,114849,118319,118751,119214,119963,122907,123255,123277,123633,126940,126952,127355,127378,127525,127692,127896,128195,128751,129407,131338,132930,133578,134833,136264,137499,139193,140945,143355,143471,144406,144617,145502,146737,146965,146978,148133,150545,152913,156234,158711,160355,162132,164145,167197,169377,171904,174098],{"id":1574,"title":1575,"body":1576,"description":63,"extension":1565,"meta":6647,"navigation":1567,"path":6648,"seo":6649,"stem":6650,"__hash__":6651},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1577,"toc":6619},[1578,1581,1585,1588,1592,1603,1607,1611,1614,1617,1620,1623,1626,1654,1658,1661,1664,1667,1670,1721,1725,1744,1746,1760,1763,1771,1774,2626,2633,2649,2653,2739,2743,2749,2834,2838,2876,2880,2944,2948,2952,2958,2969,2973,2978,2982,2987,2991,2996,3000,3004,3009,3278,3283,3421,3426,3682,3685,3693,3697,3702,3805,3808,4114,4123,4224,4227,4230,4233,4236,4496,4501,4641,4644,4823,4826,4954,4957,5109,5113,5118,5121,5132,5140,5143,5250,5254,5258,5263,5313,5318,5323,5347,5352,5405,5408,5413,5590,5595,5880,5885,6282,6286,6291,6348,6353,6361,6364,6504,6507,6616],[10,1579,1575],{"id":1580},"_1基础入门",[14,1582,1584],{"id":1583},"_11注释","1.1注释",[170,1586,1587],{},"\u002F\u002F或者\u002F* *\u002F",[14,1589,1591],{"id":1590},"_12命名","1.2命名",[263,1593,1594,1597,1600],{},[27,1595,1596],{},"字母数字下划线",[27,1598,1599],{},"开头必须是字母或_",[27,1601,1602],{},"不能使用关键词",[14,1604,1606],{"id":1605},"_13数据类型","1.3数据类型",[19,1608,1610],{"id":1609},"_131整形","1.3.1整形",[170,1612,1613],{},"short 短整形 2",[170,1615,1616],{},"int 整形 4",[170,1618,1619],{},"long 长整形 win4 linux32位4 linux64位8",[170,1621,1622],{},"long long 长长整形 8",[170,1624,1625],{},"利用sizeof可以求数据类型占用的内存空间大小",[58,1627,1631],{"className":1628,"code":1629,"language":1630,"meta":63,"style":63},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[65,1632,1633,1647],{"__ignoreMap":63},[68,1634,1635,1638,1641,1644],{"class":70,"line":71},[68,1636,1637],{"class":316},"sizeof",[68,1639,1640],{"class":78},"(",[68,1642,1643],{"class":316},"int",[68,1645,1646],{"class":78},")\n",[68,1648,1649,1651],{"class":70,"line":82},[68,1650,1637],{"class":316},[68,1652,1653],{"class":78},"(num)\n",[19,1655,1657],{"id":1656},"_132浮点型","1.3.2浮点型",[170,1659,1660],{},"float 单精度 4节 7位有效数字",[170,1662,1663],{},"double 双精度 8节 15-16有效数字",[170,1665,1666],{},"默认情况下，输出一个小数，会显示6位有效数字",[170,1668,1669],{},"注意点：",[58,1671,1673],{"className":1628,"code":1672,"language":1630,"meta":63,"style":63},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[65,1674,1675,1698],{"__ignoreMap":63},[68,1676,1677,1680,1683,1686,1689,1692,1695],{"class":70,"line":71},[68,1678,1679],{"class":316},"float",[68,1681,1682],{"class":78}," f1",[68,1684,1685],{"class":316},"=",[68,1687,1688],{"class":85},"3.14",[68,1690,1691],{"class":316},"f",[68,1693,1694],{"class":78},";",[68,1696,1697],{"class":302}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[68,1699,1700,1702,1705,1707,1710,1713,1716,1718],{"class":70,"line":82},[68,1701,1679],{"class":316},[68,1703,1704],{"class":78}," f2",[68,1706,1685],{"class":316},[68,1708,1709],{"class":85},"3",[68,1711,1712],{"class":316},"e",[68,1714,1715],{"class":85},"2",[68,1717,1694],{"class":78},[68,1719,1720],{"class":302}," \u002F\u002F科学记数法\n",[19,1722,1724],{"id":1723},"_133字符型","1.3.3字符型",[58,1726,1728],{"className":1628,"code":1727,"language":1630,"meta":63,"style":63},"char ch='a'\n",[65,1729,1730],{"__ignoreMap":63},[68,1731,1732,1735,1738,1740],{"class":70,"line":71},[68,1733,1734],{"class":316},"char",[68,1736,1737],{"class":78}," ch",[68,1739,1685],{"class":316},[68,1741,1743],{"class":1742},"sZZnC","'a'\n",[170,1745,1669],{},[263,1747,1748,1751,1754,1757],{},[27,1749,1750],{},"在显示字符型变量时，只能单引号，双引号x",[27,1752,1753],{},"单引号内只能一个字符，不能字符串",[27,1755,1756],{},"c和c++字符型变量只占用一个字符",[27,1758,1759],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[170,1761,1762],{},"ASCII码大致由以下两部分组成：",[263,1764,1765,1768],{},[27,1766,1767],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[27,1769,1770],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[170,1772,1773],{},"ASCII码表格：",[128,1775,1776,1815],{},[131,1777,1778],{},[134,1779,1780,1785,1790,1794,1799,1803,1807,1811],{},[137,1781,1782,354],{},[268,1783,1784],{},"ASCII",[137,1786,1787],{},[268,1788,1789],{},"控制字符",[137,1791,1792,354],{},[268,1793,1784],{},[137,1795,1796],{},[268,1797,1798],{},"字符",[137,1800,1801,354],{},[268,1802,1784],{},[137,1804,1805],{},[268,1806,1798],{},[137,1808,1809,354],{},[268,1810,1784],{},[137,1812,1813],{},[268,1814,1798],{},[144,1816,1817,1842,1868,1893,1918,1944,1969,1994,2020,2045,2071,2096,2122,2147,2173,2199,2225,2249,2274,2299,2324,2348,2373,2398,2423,2448,2473,2499,2524,2549,2574,2600],{},[134,1818,1819,1821,1824,1827,1830,1833,1836,1839],{},[149,1820,1248],{},[149,1822,1823],{},"NUT",[149,1825,1826],{},"32",[149,1828,1829],{},"(space)",[149,1831,1832],{},"64",[149,1834,1835],{},"@",[149,1837,1838],{},"96",[149,1840,1841],{},"、",[134,1843,1844,1847,1850,1853,1856,1859,1862,1865],{},[149,1845,1846],{},"1",[149,1848,1849],{},"SOH",[149,1851,1852],{},"33",[149,1854,1855],{},"!",[149,1857,1858],{},"65",[149,1860,1861],{},"A",[149,1863,1864],{},"97",[149,1866,1867],{},"a",[134,1869,1870,1872,1875,1878,1881,1884,1887,1890],{},[149,1871,1715],{},[149,1873,1874],{},"STX",[149,1876,1877],{},"34",[149,1879,1880],{},"\"",[149,1882,1883],{},"66",[149,1885,1886],{},"B",[149,1888,1889],{},"98",[149,1891,1892],{},"b",[134,1894,1895,1897,1900,1903,1906,1909,1912,1915],{},[149,1896,1709],{},[149,1898,1899],{},"ETX",[149,1901,1902],{},"35",[149,1904,1905],{},"#",[149,1907,1908],{},"67",[149,1910,1911],{},"C",[149,1913,1914],{},"99",[149,1916,1917],{},"c",[134,1919,1920,1923,1926,1929,1932,1935,1938,1941],{},[149,1921,1922],{},"4",[149,1924,1925],{},"EOT",[149,1927,1928],{},"36",[149,1930,1931],{},"$",[149,1933,1934],{},"68",[149,1936,1937],{},"D",[149,1939,1940],{},"100",[149,1942,1943],{},"d",[134,1945,1946,1949,1952,1955,1958,1961,1964,1967],{},[149,1947,1948],{},"5",[149,1950,1951],{},"ENQ",[149,1953,1954],{},"37",[149,1956,1957],{},"%",[149,1959,1960],{},"69",[149,1962,1963],{},"E",[149,1965,1966],{},"101",[149,1968,1712],{},[134,1970,1971,1974,1977,1980,1983,1986,1989,1992],{},[149,1972,1973],{},"6",[149,1975,1976],{},"ACK",[149,1978,1979],{},"38",[149,1981,1982],{},"&",[149,1984,1985],{},"70",[149,1987,1988],{},"F",[149,1990,1991],{},"102",[149,1993,1691],{},[134,1995,1996,1999,2002,2005,2008,2011,2014,2017],{},[149,1997,1998],{},"7",[149,2000,2001],{},"BEL",[149,2003,2004],{},"39",[149,2006,2007],{},",",[149,2009,2010],{},"71",[149,2012,2013],{},"G",[149,2015,2016],{},"103",[149,2018,2019],{},"g",[134,2021,2022,2025,2028,2031,2033,2036,2039,2042],{},[149,2023,2024],{},"8",[149,2026,2027],{},"BS",[149,2029,2030],{},"40",[149,2032,1640],{},[149,2034,2035],{},"72",[149,2037,2038],{},"H",[149,2040,2041],{},"104",[149,2043,2044],{},"h",[134,2046,2047,2050,2053,2056,2059,2062,2065,2068],{},[149,2048,2049],{},"9",[149,2051,2052],{},"HT",[149,2054,2055],{},"41",[149,2057,2058],{},")",[149,2060,2061],{},"73",[149,2063,2064],{},"I",[149,2066,2067],{},"105",[149,2069,2070],{},"i",[134,2072,2073,2075,2078,2081,2084,2087,2090,2093],{},[149,2074,313],{},[149,2076,2077],{},"LF",[149,2079,2080],{},"42",[149,2082,2083],{},"*",[149,2085,2086],{},"74",[149,2088,2089],{},"J",[149,2091,2092],{},"106",[149,2094,2095],{},"j",[134,2097,2098,2101,2104,2107,2110,2113,2116,2119],{},[149,2099,2100],{},"11",[149,2102,2103],{},"VT",[149,2105,2106],{},"43",[149,2108,2109],{},"+",[149,2111,2112],{},"75",[149,2114,2115],{},"K",[149,2117,2118],{},"107",[149,2120,2121],{},"k",[134,2123,2124,2127,2130,2133,2135,2138,2141,2144],{},[149,2125,2126],{},"12",[149,2128,2129],{},"FF",[149,2131,2132],{},"44",[149,2134,2007],{},[149,2136,2137],{},"76",[149,2139,2140],{},"L",[149,2142,2143],{},"108",[149,2145,2146],{},"l",[134,2148,2149,2152,2155,2158,2161,2164,2167,2170],{},[149,2150,2151],{},"13",[149,2153,2154],{},"CR",[149,2156,2157],{},"45",[149,2159,2160],{},"-",[149,2162,2163],{},"77",[149,2165,2166],{},"M",[149,2168,2169],{},"109",[149,2171,2172],{},"m",[134,2174,2175,2178,2181,2184,2187,2190,2193,2196],{},[149,2176,2177],{},"14",[149,2179,2180],{},"SO",[149,2182,2183],{},"46",[149,2185,2186],{},".",[149,2188,2189],{},"78",[149,2191,2192],{},"N",[149,2194,2195],{},"110",[149,2197,2198],{},"n",[134,2200,2201,2204,2207,2210,2213,2216,2219,2222],{},[149,2202,2203],{},"15",[149,2205,2206],{},"SI",[149,2208,2209],{},"47",[149,2211,2212],{},"\u002F",[149,2214,2215],{},"79",[149,2217,2218],{},"O",[149,2220,2221],{},"111",[149,2223,2224],{},"o",[134,2226,2227,2230,2233,2236,2238,2241,2244,2247],{},[149,2228,2229],{},"16",[149,2231,2232],{},"DLE",[149,2234,2235],{},"48",[149,2237,1248],{},[149,2239,2240],{},"80",[149,2242,2243],{},"P",[149,2245,2246],{},"112",[149,2248,170],{},[134,2250,2251,2254,2257,2260,2262,2265,2268,2271],{},[149,2252,2253],{},"17",[149,2255,2256],{},"DCI",[149,2258,2259],{},"49",[149,2261,1846],{},[149,2263,2264],{},"81",[149,2266,2267],{},"Q",[149,2269,2270],{},"113",[149,2272,2273],{},"q",[134,2275,2276,2279,2282,2285,2287,2290,2293,2296],{},[149,2277,2278],{},"18",[149,2280,2281],{},"DC2",[149,2283,2284],{},"50",[149,2286,1715],{},[149,2288,2289],{},"82",[149,2291,2292],{},"R",[149,2294,2295],{},"114",[149,2297,2298],{},"r",[134,2300,2301,2304,2307,2310,2312,2315,2318,2321],{},[149,2302,2303],{},"19",[149,2305,2306],{},"DC3",[149,2308,2309],{},"51",[149,2311,1709],{},[149,2313,2314],{},"83",[149,2316,2317],{},"S",[149,2319,2320],{},"115",[149,2322,2323],{},"s",[134,2325,2326,2328,2331,2334,2336,2339,2342,2345],{},[149,2327,333],{},[149,2329,2330],{},"DC4",[149,2332,2333],{},"52",[149,2335,1922],{},[149,2337,2338],{},"84",[149,2340,2341],{},"T",[149,2343,2344],{},"116",[149,2346,2347],{},"t",[134,2349,2350,2353,2356,2359,2361,2364,2367,2370],{},[149,2351,2352],{},"21",[149,2354,2355],{},"NAK",[149,2357,2358],{},"53",[149,2360,1948],{},[149,2362,2363],{},"85",[149,2365,2366],{},"U",[149,2368,2369],{},"117",[149,2371,2372],{},"u",[134,2374,2375,2378,2381,2384,2386,2389,2392,2395],{},[149,2376,2377],{},"22",[149,2379,2380],{},"SYN",[149,2382,2383],{},"54",[149,2385,1973],{},[149,2387,2388],{},"86",[149,2390,2391],{},"V",[149,2393,2394],{},"118",[149,2396,2397],{},"v",[134,2399,2400,2403,2406,2409,2411,2414,2417,2420],{},[149,2401,2402],{},"23",[149,2404,2405],{},"TB",[149,2407,2408],{},"55",[149,2410,1998],{},[149,2412,2413],{},"87",[149,2415,2416],{},"W",[149,2418,2419],{},"119",[149,2421,2422],{},"w",[134,2424,2425,2428,2431,2434,2436,2439,2442,2445],{},[149,2426,2427],{},"24",[149,2429,2430],{},"CAN",[149,2432,2433],{},"56",[149,2435,2024],{},[149,2437,2438],{},"88",[149,2440,2441],{},"X",[149,2443,2444],{},"120",[149,2446,2447],{},"x",[134,2449,2450,2453,2456,2459,2461,2464,2467,2470],{},[149,2451,2452],{},"25",[149,2454,2455],{},"EM",[149,2457,2458],{},"57",[149,2460,2049],{},[149,2462,2463],{},"89",[149,2465,2466],{},"Y",[149,2468,2469],{},"121",[149,2471,2472],{},"y",[134,2474,2475,2478,2481,2484,2487,2490,2493,2496],{},[149,2476,2477],{},"26",[149,2479,2480],{},"SUB",[149,2482,2483],{},"58",[149,2485,2486],{},":",[149,2488,2489],{},"90",[149,2491,2492],{},"Z",[149,2494,2495],{},"122",[149,2497,2498],{},"z",[134,2500,2501,2504,2507,2510,2512,2515,2518,2521],{},[149,2502,2503],{},"27",[149,2505,2506],{},"ESC",[149,2508,2509],{},"59",[149,2511,1694],{},[149,2513,2514],{},"91",[149,2516,2517],{},"[",[149,2519,2520],{},"123",[149,2522,2523],{},"{",[134,2525,2526,2529,2532,2535,2538,2541,2543,2546],{},[149,2527,2528],{},"28",[149,2530,2531],{},"FS",[149,2533,2534],{},"60",[149,2536,2537],{},"\u003C",[149,2539,2540],{},"92",[149,2542,2212],{},[149,2544,2545],{},"124",[149,2547,2548],{},"|",[134,2550,2551,2554,2557,2560,2562,2565,2568,2571],{},[149,2552,2553],{},"29",[149,2555,2556],{},"GS",[149,2558,2559],{},"61",[149,2561,1685],{},[149,2563,2564],{},"93",[149,2566,2567],{},"]",[149,2569,2570],{},"125",[149,2572,2573],{},"}",[134,2575,2576,2579,2582,2585,2588,2591,2594,2597],{},[149,2577,2578],{},"30",[149,2580,2581],{},"RS",[149,2583,2584],{},"62",[149,2586,2587],{},">",[149,2589,2590],{},"94",[149,2592,2593],{},"^",[149,2595,2596],{},"126",[149,2598,2599],{},"`",[134,2601,2602,2605,2608,2611,2614,2617,2620,2623],{},[149,2603,2604],{},"31",[149,2606,2607],{},"US",[149,2609,2610],{},"63",[149,2612,2613],{},"?",[149,2615,2616],{},"95",[149,2618,2619],{},"_",[149,2621,2622],{},"127",[149,2624,2625],{},"DEL",[170,2627,2628,2629,2632],{},"ASCII 码大致由以下",[268,2630,2631],{},"两部分组","成：",[24,2634,2635,2642],{},[27,2636,2637,2638,2641],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[268,2639,2640],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[27,2643,2644,2645,2648],{},"ASCII 打印字符：数字 ",[268,2646,2647],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,2650,2652],{"id":2651},"_134转义字符","1.3.4转义字符",[58,2654,2656],{"className":1628,"code":2655,"language":1630,"meta":63,"style":63},"\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",[65,2657,2658,2663,2679,2693,2698,2711,2716],{"__ignoreMap":63},[68,2659,2660],{"class":70,"line":71},[68,2661,2662],{"class":302},"\u002F\u002F换行符\n",[68,2664,2665,2668,2671,2674,2676],{"class":70,"line":82},[68,2666,2667],{"class":78},"cout ",[68,2669,2670],{"class":316},"\u003C\u003C",[68,2672,2673],{"class":1742},"\"hello world\u002Fn\"",[68,2675,1694],{"class":78},[68,2677,2678],{"class":302}," \u002F\u002F就等同于如下：\n",[68,2680,2681,2683,2685,2688,2690],{"class":70,"line":98},[68,2682,2667],{"class":78},[68,2684,2670],{"class":316},[68,2686,2687],{"class":1742},"\"hello world\"",[68,2689,2670],{"class":316},[68,2691,2692],{"class":78},"endl;\n",[68,2694,2695],{"class":70,"line":104},[68,2696,2697],{"class":302},"\u002F\u002F反斜杠\n",[68,2699,2700,2702,2704,2707,2709],{"class":70,"line":112},[68,2701,2667],{"class":78},[68,2703,2670],{"class":316},[68,2705,2706],{"class":1742},"\"\u002F\u002F\"",[68,2708,2670],{"class":316},[68,2710,2692],{"class":78},[68,2712,2713],{"class":70,"line":124},[68,2714,2715],{"class":302},"\u002F\u002F水平制表符\n",[68,2717,2718,2720,2722,2725,2728,2731,2733,2736],{"class":70,"line":1496},[68,2719,2667],{"class":78},[68,2721,2670],{"class":316},[68,2723,2724],{"class":1742},"\"aaaa",[68,2726,2727],{"class":85},"\\t",[68,2729,2730],{"class":1742},"helloworld\"",[68,2732,2670],{"class":316},[68,2734,2735],{"class":78},"endl;",[68,2737,2738],{"class":302}," \u002F\u002F输出窗口时有对齐效果\n",[19,2740,2742],{"id":2741},"_135字符串型","1.3.5字符串型",[170,2744,2745,2746,2748],{},"char 变量名",[68,2747],{},"=\"字符串值\"",[58,2750,2752],{"className":1628,"code":2751,"language":1630,"meta":63,"style":63},"\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",[65,2753,2754,2759,2764,2769,2774,2787,2800,2805,2810,2821],{"__ignoreMap":63},[68,2755,2756],{"class":70,"line":71},[68,2757,2758],{"class":302},"\u002F\u002Fc风格字符串\n",[68,2760,2761],{"class":70,"line":82},[68,2762,2763],{"class":302},"\u002F\u002F注意事项：\n",[68,2765,2766],{"class":70,"line":98},[68,2767,2768],{"class":302},"\u002F\u002F1.char字符串名[]\n",[68,2770,2771],{"class":70,"line":104},[68,2772,2773],{"class":302},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[68,2775,2776,2778,2781,2783,2785],{"class":70,"line":112},[68,2777,1734],{"class":316},[68,2779,2780],{"class":78}," str[]",[68,2782,1685],{"class":316},[68,2784,2687],{"class":1742},[68,2786,95],{"class":78},[68,2788,2789,2791,2793,2796,2798],{"class":70,"line":124},[68,2790,2667],{"class":78},[68,2792,2670],{"class":316},[68,2794,2795],{"class":78},"str",[68,2797,2670],{"class":316},[68,2799,2692],{"class":78},[68,2801,2802],{"class":70,"line":1496},[68,2803,2804],{"class":302},"\u002F\u002Fc++风格字符串\n",[68,2806,2807],{"class":70,"line":1502},[68,2808,2809],{"class":302},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[68,2811,2812,2815,2817,2819],{"class":70,"line":1510},[68,2813,2814],{"class":78},"string str2",[68,2816,1685],{"class":316},[68,2818,2687],{"class":1742},[68,2820,95],{"class":78},[68,2822,2823,2825,2827,2830,2832],{"class":70,"line":1521},[68,2824,2667],{"class":78},[68,2826,2670],{"class":316},[68,2828,2829],{"class":78},"str2",[68,2831,2670],{"class":316},[68,2833,2692],{"class":78},[19,2835,2837],{"id":2836},"_136布尔类型bool","1.3.6布尔类型bool",[58,2839,2841],{"className":1628,"code":2840,"language":1630,"meta":63,"style":63},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[65,2842,2843,2858],{"__ignoreMap":63},[68,2844,2845,2848,2851,2853,2856],{"class":70,"line":71},[68,2846,2847],{"class":316},"bool",[68,2849,2850],{"class":78}," flag",[68,2852,1685],{"class":316},[68,2854,2855],{"class":85},"true",[68,2857,95],{"class":78},[68,2859,2860,2863,2866,2869,2871,2873],{"class":70,"line":82},[68,2861,2862],{"class":78},"cout",[68,2864,2865],{"class":316},"\u003C\u003Csizeof",[68,2867,2868],{"class":78},"(flag)",[68,2870,2670],{"class":316},[68,2872,2735],{"class":78},[68,2874,2875],{"class":302}," \u002F\u002F查看布尔占内存空间\n",[14,2877,2879],{"id":2878},"_14键盘输入cin","1.4键盘输入cin",[58,2881,2883],{"className":1628,"code":2882,"language":1630,"meta":63,"style":63},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[65,2884,2885,2898,2915,2926],{"__ignoreMap":63},[68,2886,2887,2889,2892,2894,2896],{"class":70,"line":71},[68,2888,1643],{"class":316},[68,2890,2891],{"class":78}," a",[68,2893,1685],{"class":316},[68,2895,1248],{"class":85},[68,2897,95],{"class":78},[68,2899,2900,2902,2904,2907,2909,2911,2913],{"class":70,"line":82},[68,2901,2862],{"class":78},[68,2903,2670],{"class":316},[68,2905,2906],{"class":1742},"\"请给整型变量a赋值\"",[68,2908,2670],{"class":316},[68,2910,1867],{"class":78},[68,2912,2670],{"class":316},[68,2914,2692],{"class":78},[68,2916,2917,2920,2923],{"class":70,"line":98},[68,2918,2919],{"class":78},"cin ",[68,2921,2922],{"class":316},">>",[68,2924,2925],{"class":78}," a;\n",[68,2927,2928,2930,2932,2935,2938,2940,2942],{"class":70,"line":104},[68,2929,2667],{"class":78},[68,2931,2670],{"class":316},[68,2933,2934],{"class":1742}," \"整型变量a=\"",[68,2936,2937],{"class":316}," \u003C\u003C",[68,2939,1867],{"class":78},[68,2941,2670],{"class":316},[68,2943,2692],{"class":78},[14,2945,2947],{"id":2946},"_15运算符","1.5运算符",[19,2949,2951],{"id":2950},"_151算术运算符","1.5.1算术运算符",[170,2953,2954,2957],{},[801,2955],{"alt":63,"src":2956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[263,2959,2960,2963,2966],{},[27,2961,2962],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[27,2964,2965],{},"两个小数不可以做取模运算",[27,2967,2968],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,2970,2972],{"id":2971},"_152赋值运算符","1.5.2赋值运算符",[170,2974,2975],{},[801,2976],{"alt":63,"src":2977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,2979,2981],{"id":2980},"_153比较运算符","1.5.3比较运算符",[170,2983,2984],{},[801,2985],{"alt":63,"src":2986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,2988,2990],{"id":2989},"_154逻辑运算符","1.5.4逻辑运算符",[170,2992,2993],{},[801,2994],{"alt":63,"src":2995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2997,2999],{"id":2998},"_16程序流程结构","1.6程序流程结构",[19,3001,3003],{"id":3002},"_161选择结构","1.6.1选择结构",[263,3005,3006],{},[27,3007,3008],{},"if语句\n单行、多行、多条件if语句",[58,3010,3012],{"className":1628,"code":3011,"language":1630,"meta":63,"style":63},"\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",[65,3013,3014,3019,3034,3039,3053,3057,3062,3071,3084,3088,3101,3106,3112,3117,3131,3136,3142,3163,3168,3182,3187,3216,3221,3238,3243,3248,3253,3267,3272],{"__ignoreMap":63},[68,3015,3016],{"class":70,"line":71},[68,3017,3018],{"class":302},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[68,3020,3021,3024,3027,3029,3032],{"class":70,"line":82},[68,3022,3023],{"class":316},"if",[68,3025,3026],{"class":78},"(score",[68,3028,2587],{"class":316},[68,3030,3031],{"class":85},"600",[68,3033,1646],{"class":78},[68,3035,3036],{"class":70,"line":98},[68,3037,3038],{"class":78},"{\n",[68,3040,3041,3044,3046,3049,3051],{"class":70,"line":104},[68,3042,3043],{"class":78},"    cout",[68,3045,2670],{"class":316},[68,3047,3048],{"class":1742},"'这是单行if语句'",[68,3050,2670],{"class":316},[68,3052,2692],{"class":78},[68,3054,3055],{"class":70,"line":112},[68,3056,101],{"class":78},[68,3058,3059],{"class":70,"line":124},[68,3060,3061],{"class":302},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[68,3063,3064,3066,3068],{"class":70,"line":1496},[68,3065,2919],{"class":78},[68,3067,2922],{"class":316},[68,3069,3070],{"class":78}," score\n",[68,3072,3073,3075,3077,3080,3082],{"class":70,"line":1502},[68,3074,3023],{"class":316},[68,3076,3026],{"class":78},[68,3078,3079],{"class":316},"\u003C=",[68,3081,3031],{"class":85},[68,3083,1646],{"class":78},[68,3085,3086],{"class":70,"line":1510},[68,3087,3038],{"class":78},[68,3089,3090,3092,3094,3097,3099],{"class":70,"line":1521},[68,3091,3043],{"class":78},[68,3093,2922],{"class":316},[68,3095,3096],{"class":1742},"\"小于等于600\"",[68,3098,2670],{"class":316},[68,3100,2692],{"class":78},[68,3102,3104],{"class":70,"line":3103},11,[68,3105,101],{"class":78},[68,3107,3109],{"class":70,"line":3108},12,[68,3110,3111],{"class":316},"else\n",[68,3113,3115],{"class":70,"line":3114},13,[68,3116,3038],{"class":78},[68,3118,3120,3122,3124,3127,3129],{"class":70,"line":3119},14,[68,3121,3043],{"class":78},[68,3123,2922],{"class":316},[68,3125,3126],{"class":1742},"\"大于600\"",[68,3128,2922],{"class":316},[68,3130,2692],{"class":78},[68,3132,3134],{"class":70,"line":3133},15,[68,3135,101],{"class":78},[68,3137,3139],{"class":70,"line":3138},16,[68,3140,3141],{"class":302},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[68,3143,3145,3147,3150,3152,3154,3157,3159,3161],{"class":70,"line":3144},17,[68,3146,3023],{"class":316},[68,3148,3149],{"class":78}," (",[68,3151,1248],{"class":85},[68,3153,2537],{"class":316},[68,3155,3156],{"class":78},"num",[68,3158,2537],{"class":316},[68,3160,1940],{"class":85},[68,3162,1646],{"class":78},[68,3164,3166],{"class":70,"line":3165},18,[68,3167,3038],{"class":78},[68,3169,3171,3173,3175,3178,3180],{"class":70,"line":3170},19,[68,3172,3043],{"class":78},[68,3174,2670],{"class":316},[68,3176,3177],{"class":1742},"\"小于100\"",[68,3179,2670],{"class":316},[68,3181,2692],{"class":78},[68,3183,3185],{"class":70,"line":3184},20,[68,3186,101],{"class":78},[68,3188,3190,3193,3196,3199,3202,3204,3207,3209,3211,3214],{"class":70,"line":3189},21,[68,3191,3192],{"class":316},"else",[68,3194,3195],{"class":316}," if",[68,3197,3198],{"class":78}," (nmu",[68,3200,3201],{"class":316},">=",[68,3203,1940],{"class":85},[68,3205,3206],{"class":316},"&&",[68,3208,3156],{"class":78},[68,3210,2537],{"class":316},[68,3212,3213],{"class":85},"200",[68,3215,1646],{"class":78},[68,3217,3219],{"class":70,"line":3218},22,[68,3220,3038],{"class":78},[68,3222,3224,3226,3228,3231,3233,3235],{"class":70,"line":3223},23,[68,3225,3043],{"class":78},[68,3227,2670],{"class":316},[68,3229,3230],{"class":1742},"\"不小于100且小于200\"",[68,3232,2670],{"class":316},[68,3234,2735],{"class":78},[68,3236,3237],{"class":302}," \u002F\u002F可以无限else if,python中是elif：\n",[68,3239,3241],{"class":70,"line":3240},24,[68,3242,101],{"class":78},[68,3244,3246],{"class":70,"line":3245},25,[68,3247,3111],{"class":316},[68,3249,3251],{"class":70,"line":3250},26,[68,3252,3038],{"class":78},[68,3254,3256,3258,3260,3263,3265],{"class":70,"line":3255},27,[68,3257,3043],{"class":78},[68,3259,2670],{"class":316},[68,3261,3262],{"class":1742},"\"不小于200\"",[68,3264,2670],{"class":316},[68,3266,2692],{"class":78},[68,3268,3270],{"class":70,"line":3269},28,[68,3271,101],{"class":78},[68,3273,3275],{"class":70,"line":3274},29,[68,3276,3277],{"class":302},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[263,3279,3280],{"start":82},[27,3281,3282],{},"三目运算符",[58,3284,3286],{"className":1628,"code":3285,"language":1630,"meta":63,"style":63},"\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",[65,3287,3288,3293,3298,3324,3346,3363,3368,3391,3406],{"__ignoreMap":63},[68,3289,3290],{"class":70,"line":71},[68,3291,3292],{"class":302},"\u002F\u002F创建三个变量a,b,c\n",[68,3294,3295],{"class":70,"line":82},[68,3296,3297],{"class":302},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[68,3299,3300,3302,3304,3306,3308,3311,3313,3315,3318,3320,3322],{"class":70,"line":98},[68,3301,1643],{"class":316},[68,3303,2891],{"class":78},[68,3305,1685],{"class":316},[68,3307,333],{"class":85},[68,3309,3310],{"class":78},",b",[68,3312,1685],{"class":316},[68,3314,313],{"class":85},[68,3316,3317],{"class":78},",c",[68,3319,1685],{"class":316},[68,3321,1248],{"class":85},[68,3323,95],{"class":78},[68,3325,3326,3328,3330,3333,3335,3337,3339,3341,3343],{"class":70,"line":104},[68,3327,1917],{"class":78},[68,3329,1685],{"class":316},[68,3331,3332],{"class":78},"(a",[68,3334,2587],{"class":316},[68,3336,1892],{"class":78},[68,3338,2613],{"class":316},[68,3340,1867],{"class":78},[68,3342,2486],{"class":316},[68,3344,3345],{"class":78},"b)\n",[68,3347,3348,3350,3352,3355,3357,3359,3361],{"class":70,"line":112},[68,3349,2862],{"class":78},[68,3351,2670],{"class":316},[68,3353,3354],{"class":1742},"\"c=\"",[68,3356,2670],{"class":316},[68,3358,1917],{"class":78},[68,3360,2670],{"class":316},[68,3362,2692],{"class":78},[68,3364,3365],{"class":70,"line":124},[68,3366,3367],{"class":302},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[68,3369,3370,3372,3374,3376,3378,3380,3382,3385,3387,3389],{"class":70,"line":1496},[68,3371,3332],{"class":78},[68,3373,2587],{"class":316},[68,3375,1892],{"class":78},[68,3377,2613],{"class":316},[68,3379,1867],{"class":78},[68,3381,2486],{"class":316},[68,3383,3384],{"class":78},"b)",[68,3386,1685],{"class":316},[68,3388,1940],{"class":85},[68,3390,95],{"class":78},[68,3392,3393,3395,3397,3399,3401,3403],{"class":70,"line":1502},[68,3394,2862],{"class":78},[68,3396,2670],{"class":316},[68,3398,1867],{"class":78},[68,3400,2670],{"class":316},[68,3402,2735],{"class":78},[68,3404,3405],{"class":302}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[68,3407,3408,3410,3412,3414,3416,3418],{"class":70,"line":1510},[68,3409,2862],{"class":78},[68,3411,2670],{"class":316},[68,3413,1892],{"class":78},[68,3415,2670],{"class":316},[68,3417,2735],{"class":78},[68,3419,3420],{"class":302}," \u002F\u002F10   a>b,b还是原值\n",[263,3422,3423],{"start":98},[27,3424,3425],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[58,3427,3429],{"className":1628,"code":3428,"language":1630,"meta":63,"style":63},"\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",[65,3430,3431,3436,3444,3457,3467,3471,3485,3498,3508,3516,3521,3546,3567,3589,3610,3632,3653,3673,3678],{"__ignoreMap":63},[68,3432,3433],{"class":70,"line":71},[68,3434,3435],{"class":302},"\u002F\u002F案例-电影打分\n",[68,3437,3438,3441],{"class":70,"line":82},[68,3439,3440],{"class":316},"#include",[68,3442,3443],{"class":1742},"\u003Ciostream>\n",[68,3445,3446,3449,3452,3455],{"class":70,"line":98},[68,3447,3448],{"class":316},"using",[68,3450,3451],{"class":316}," namespace",[68,3453,3454],{"class":74}," std",[68,3456,95],{"class":78},[68,3458,3459,3461,3464],{"class":70,"line":104},[68,3460,1643],{"class":316},[68,3462,3463],{"class":74}," main",[68,3465,3466],{"class":78},"()\n",[68,3468,3469],{"class":70,"line":112},[68,3470,3038],{"class":78},[68,3472,3473,3476,3479,3481,3483],{"class":70,"line":124},[68,3474,3475],{"class":316},"    int",[68,3477,3478],{"class":78}," score",[68,3480,1685],{"class":316},[68,3482,1248],{"class":85},[68,3484,95],{"class":78},[68,3486,3487,3489,3491,3494,3496],{"class":70,"line":1496},[68,3488,3043],{"class":78},[68,3490,2670],{"class":316},[68,3492,3493],{"class":1742},"\"电影打分：\"",[68,3495,2670],{"class":316},[68,3497,2692],{"class":78},[68,3499,3500,3503,3505],{"class":70,"line":1502},[68,3501,3502],{"class":78},"    cin",[68,3504,2922],{"class":316},[68,3506,3507],{"class":78},"score;\n",[68,3509,3510,3513],{"class":70,"line":1510},[68,3511,3512],{"class":316},"    switch",[68,3514,3515],{"class":78},"(score)\n",[68,3517,3518],{"class":70,"line":1521},[68,3519,3520],{"class":78},"    {\n",[68,3522,3523,3526,3529,3532,3534,3537,3539,3541,3544],{"class":70,"line":3103},[68,3524,3525],{"class":316},"        case",[68,3527,3528],{"class":85}," 10",[68,3530,3531],{"class":78},":cout",[68,3533,2670],{"class":316},[68,3535,3536],{"class":1742},"\"经典\"",[68,3538,2670],{"class":316},[68,3540,2735],{"class":78},[68,3542,3543],{"class":316},"break",[68,3545,95],{"class":78},[68,3547,3548,3550,3553,3555,3557,3559,3561,3563,3565],{"class":70,"line":3108},[68,3549,3525],{"class":316},[68,3551,3552],{"class":85}," 9",[68,3554,3531],{"class":78},[68,3556,2670],{"class":316},[68,3558,3536],{"class":1742},[68,3560,2670],{"class":316},[68,3562,2735],{"class":78},[68,3564,3543],{"class":316},[68,3566,95],{"class":78},[68,3568,3569,3571,3574,3576,3578,3581,3583,3585,3587],{"class":70,"line":3114},[68,3570,3525],{"class":316},[68,3572,3573],{"class":85}," 8",[68,3575,3531],{"class":78},[68,3577,2670],{"class":316},[68,3579,3580],{"class":1742},"\"非常好\"",[68,3582,2670],{"class":316},[68,3584,2735],{"class":78},[68,3586,3543],{"class":316},[68,3588,95],{"class":78},[68,3590,3591,3593,3596,3598,3600,3602,3604,3606,3608],{"class":70,"line":3119},[68,3592,3525],{"class":316},[68,3594,3595],{"class":85}," 7",[68,3597,3531],{"class":78},[68,3599,2670],{"class":316},[68,3601,3580],{"class":1742},[68,3603,2670],{"class":316},[68,3605,2735],{"class":78},[68,3607,3543],{"class":316},[68,3609,95],{"class":78},[68,3611,3612,3614,3617,3619,3621,3624,3626,3628,3630],{"class":70,"line":3133},[68,3613,3525],{"class":316},[68,3615,3616],{"class":85}," 6",[68,3618,3531],{"class":78},[68,3620,2670],{"class":316},[68,3622,3623],{"class":1742},"\"一般\"",[68,3625,2670],{"class":316},[68,3627,2735],{"class":78},[68,3629,3543],{"class":316},[68,3631,95],{"class":78},[68,3633,3634,3636,3639,3641,3643,3645,3647,3649,3651],{"class":70,"line":3138},[68,3635,3525],{"class":316},[68,3637,3638],{"class":85}," 5",[68,3640,3531],{"class":78},[68,3642,2670],{"class":316},[68,3644,3623],{"class":1742},[68,3646,2670],{"class":316},[68,3648,2735],{"class":78},[68,3650,3543],{"class":316},[68,3652,95],{"class":78},[68,3654,3655,3658,3660,3662,3665,3667,3669,3671],{"class":70,"line":3144},[68,3656,3657],{"class":316},"        default",[68,3659,3531],{"class":78},[68,3661,2670],{"class":316},[68,3663,3664],{"class":1742},"\"烂片\"",[68,3666,2670],{"class":316},[68,3668,2735],{"class":78},[68,3670,3543],{"class":316},[68,3672,95],{"class":78},[68,3674,3675],{"class":70,"line":3165},[68,3676,3677],{"class":78},"    }\n",[68,3679,3680],{"class":70,"line":3170},[68,3681,101],{"class":78},[170,3683,3684],{},"if和switch区别：",[24,3686,3687,3690],{},[27,3688,3689],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[27,3691,3692],{},"switch优点：结构清晰，执行效率高",[19,3694,3696],{"id":3695},"_162循环结构","1.6.2循环结构",[263,3698,3699],{},[27,3700,3701],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[58,3703,3705],{"className":1628,"code":3704,"language":1630,"meta":63,"style":63},"\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",[65,3706,3707,3712,3720,3724,3737,3751,3755,3775,3785,3789,3801],{"__ignoreMap":63},[68,3708,3709],{"class":70,"line":71},[68,3710,3711],{"class":302},"\u002F\u002F打印0-9数字\n",[68,3713,3714,3716,3718],{"class":70,"line":82},[68,3715,1643],{"class":316},[68,3717,3463],{"class":74},[68,3719,3466],{"class":78},[68,3721,3722],{"class":70,"line":98},[68,3723,3038],{"class":78},[68,3725,3726,3728,3731,3733,3735],{"class":70,"line":104},[68,3727,3475],{"class":316},[68,3729,3730],{"class":78}," num",[68,3732,1685],{"class":316},[68,3734,1248],{"class":85},[68,3736,95],{"class":78},[68,3738,3739,3742,3745,3747,3749],{"class":70,"line":112},[68,3740,3741],{"class":316},"    while",[68,3743,3744],{"class":78},"(num",[68,3746,2537],{"class":316},[68,3748,313],{"class":85},[68,3750,1646],{"class":78},[68,3752,3753],{"class":70,"line":124},[68,3754,3520],{"class":78},[68,3756,3757,3760,3763,3765,3767,3769,3772],{"class":70,"line":1496},[68,3758,3759],{"class":74},"       std",[68,3761,3762],{"class":78},"::cout",[68,3764,2670],{"class":316},[68,3766,3156],{"class":78},[68,3768,2670],{"class":316},[68,3770,3771],{"class":74},"std",[68,3773,3774],{"class":78},"::endl;\n",[68,3776,3777,3780,3783],{"class":70,"line":1502},[68,3778,3779],{"class":78},"        num",[68,3781,3782],{"class":316},"++",[68,3784,95],{"class":78},[68,3786,3787],{"class":70,"line":1510},[68,3788,3677],{"class":78},[68,3790,3791,3794,3796,3799],{"class":70,"line":1521},[68,3792,3793],{"class":74},"    system",[68,3795,1640],{"class":78},[68,3797,3798],{"class":1742},"\"pause\"",[68,3800,1646],{"class":78},[68,3802,3803],{"class":70,"line":3103},[68,3804,101],{"class":78},[170,3806,3807],{},"注意：写好循环条件，避免死循环情况",[58,3809,3811],{"className":1628,"code":3810,"language":1630,"meta":63,"style":63},"\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",[65,3812,3813,3818,3825,3832,3842,3850,3854,3859,3886,3891,3896,3904,3931,3936,3941,3954,3964,3968,3978,3983,3996,4001,4015,4020,4035,4039,4052,4056,4061,4065,4079,4087,4092,4098,4104,4109],{"__ignoreMap":63},[68,3814,3815],{"class":70,"line":71},[68,3816,3817],{"class":302},"\u002F\u002F循环结构-猜数字\n",[68,3819,3820,3822],{"class":70,"line":82},[68,3821,3440],{"class":316},[68,3823,3824],{"class":1742}," \u003Ciostream>\n",[68,3826,3827,3829],{"class":70,"line":98},[68,3828,3440],{"class":316},[68,3830,3831],{"class":1742}," \u003Cctime>\n",[68,3833,3834,3836,3838,3840],{"class":70,"line":104},[68,3835,3448],{"class":316},[68,3837,3451],{"class":316},[68,3839,3454],{"class":74},[68,3841,95],{"class":78},[68,3843,3844,3846,3848],{"class":70,"line":112},[68,3845,1643],{"class":316},[68,3847,3463],{"class":74},[68,3849,3466],{"class":78},[68,3851,3852],{"class":70,"line":124},[68,3853,3038],{"class":78},[68,3855,3856],{"class":70,"line":1496},[68,3857,3858],{"class":302},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[68,3860,3861,3864,3867,3870,3873,3875,3878,3880,3883],{"class":70,"line":1502},[68,3862,3863],{"class":74},"    srand",[68,3865,3866],{"class":78},"((",[68,3868,3869],{"class":316},"unsigned",[68,3871,3872],{"class":316}," int",[68,3874,2058],{"class":78},[68,3876,3877],{"class":74},"time",[68,3879,1640],{"class":78},[68,3881,3882],{"class":85},"NULL",[68,3884,3885],{"class":78},"));\n",[68,3887,3888],{"class":70,"line":1510},[68,3889,3890],{"emptyLinePlaceholder":1567},"\n",[68,3892,3893],{"class":70,"line":1521},[68,3894,3895],{"class":302},"    \u002F\u002F1.系统生成随机数\n",[68,3897,3898,3901],{"class":70,"line":3103},[68,3899,3900],{"class":302},"    \u002F\u002Frand()%100",[68,3902,3903],{"class":302}," \u002F\u002F生成0-99的随机数\n",[68,3905,3906,3908,3910,3912,3915,3918,3920,3922,3924,3926,3928],{"class":70,"line":3108},[68,3907,3475],{"class":316},[68,3909,3730],{"class":78},[68,3911,1685],{"class":316},[68,3913,3914],{"class":74},"rand",[68,3916,3917],{"class":78},"()",[68,3919,1957],{"class":316},[68,3921,1940],{"class":85},[68,3923,2109],{"class":316},[68,3925,1846],{"class":85},[68,3927,1694],{"class":78},[68,3929,3930],{"class":302}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[68,3932,3933],{"class":70,"line":3114},[68,3934,3935],{"class":302},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[68,3937,3938],{"class":70,"line":3119},[68,3939,3940],{"class":302},"    \u002F\u002F2.玩家猜测\n",[68,3942,3943,3945,3948,3950,3952],{"class":70,"line":3133},[68,3944,3475],{"class":316},[68,3946,3947],{"class":78}," val",[68,3949,1685],{"class":316},[68,3951,1248],{"class":85},[68,3953,95],{"class":78},[68,3955,3956,3958,3960,3962],{"class":70,"line":3138},[68,3957,3741],{"class":316},[68,3959,3149],{"class":78},[68,3961,1846],{"class":85},[68,3963,1646],{"class":78},[68,3965,3966],{"class":70,"line":3144},[68,3967,3520],{"class":78},[68,3969,3970,3973,3975],{"class":70,"line":3165},[68,3971,3972],{"class":78},"        cin",[68,3974,2922],{"class":316},[68,3976,3977],{"class":78},"val;\n",[68,3979,3980],{"class":70,"line":3170},[68,3981,3982],{"class":302},"        \u002F\u002F3.判断玩家猜测\n",[68,3984,3985,3988,3991,3993],{"class":70,"line":3184},[68,3986,3987],{"class":316},"        if",[68,3989,3990],{"class":78},"(val",[68,3992,2537],{"class":316},[68,3994,3995],{"class":78},"num) \n",[68,3997,3998],{"class":70,"line":3189},[68,3999,4000],{"class":78},"        {\n",[68,4002,4003,4006,4008,4011,4013],{"class":70,"line":3218},[68,4004,4005],{"class":78},"            cout",[68,4007,2670],{"class":316},[68,4009,4010],{"class":1742},"\"猜小了！\"",[68,4012,2670],{"class":316},[68,4014,2692],{"class":78},[68,4016,4017],{"class":70,"line":3223},[68,4018,4019],{"class":78},"        }\n",[68,4021,4022,4025,4027,4030,4032],{"class":70,"line":3240},[68,4023,4024],{"class":316},"        else",[68,4026,3195],{"class":316},[68,4028,4029],{"class":78}," (val",[68,4031,2587],{"class":316},[68,4033,4034],{"class":78},"num)\n",[68,4036,4037],{"class":70,"line":3245},[68,4038,4000],{"class":78},[68,4040,4041,4043,4045,4048,4050],{"class":70,"line":3250},[68,4042,4005],{"class":78},[68,4044,2670],{"class":316},[68,4046,4047],{"class":1742},"\"猜大了！\"",[68,4049,2670],{"class":316},[68,4051,2692],{"class":78},[68,4053,4054],{"class":70,"line":3255},[68,4055,4019],{"class":78},[68,4057,4058],{"class":70,"line":3269},[68,4059,4060],{"class":316},"        else\n",[68,4062,4063],{"class":70,"line":3274},[68,4064,4000],{"class":78},[68,4066,4068,4070,4072,4075,4077],{"class":70,"line":4067},30,[68,4069,4005],{"class":78},[68,4071,2670],{"class":316},[68,4073,4074],{"class":1742},"\"猜对了！\"",[68,4076,2670],{"class":316},[68,4078,2692],{"class":78},[68,4080,4082,4085],{"class":70,"line":4081},31,[68,4083,4084],{"class":316},"            break",[68,4086,95],{"class":78},[68,4088,4090],{"class":70,"line":4089},32,[68,4091,4019],{"class":78},[68,4093,4095],{"class":70,"line":4094},33,[68,4096,4097],{"class":302},"        \u002F\u002F猜对 退出游戏\n",[68,4099,4101],{"class":70,"line":4100},34,[68,4102,4103],{"class":302},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[68,4105,4107],{"class":70,"line":4106},35,[68,4108,3677],{"class":78},[68,4110,4112],{"class":70,"line":4111},36,[68,4113,101],{"class":78},[263,4115,4116],{"start":82},[27,4117,4118,4119,4122],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[268,4120,4121],{},"do...while会先执行一次循环语句","，在判断循环语句",[58,4124,4126],{"className":1628,"code":4125,"language":1630,"meta":63,"style":63},"\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",[65,4127,4128,4133,4141,4145,4157,4165,4169,4186,4193,4197,4210,4220],{"__ignoreMap":63},[68,4129,4130],{"class":70,"line":71},[68,4131,4132],{"class":302},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[68,4134,4135,4137,4139],{"class":70,"line":82},[68,4136,1643],{"class":316},[68,4138,3463],{"class":74},[68,4140,3466],{"class":78},[68,4142,4143],{"class":70,"line":98},[68,4144,3038],{"class":78},[68,4146,4147,4149,4151,4153,4155],{"class":70,"line":104},[68,4148,3475],{"class":316},[68,4150,3730],{"class":78},[68,4152,1685],{"class":316},[68,4154,1248],{"class":85},[68,4156,95],{"class":78},[68,4158,4159,4162],{"class":70,"line":112},[68,4160,4161],{"class":316},"    do",[68,4163,4164],{"class":78}," \n",[68,4166,4167],{"class":70,"line":124},[68,4168,3520],{"class":78},[68,4170,4171,4174,4176,4178,4180,4182,4184],{"class":70,"line":1496},[68,4172,4173],{"class":74},"        std",[68,4175,3762],{"class":78},[68,4177,2670],{"class":316},[68,4179,3156],{"class":78},[68,4181,2670],{"class":316},[68,4183,3771],{"class":74},[68,4185,3774],{"class":78},[68,4187,4188,4190],{"class":70,"line":1502},[68,4189,3779],{"class":78},[68,4191,4192],{"class":316},"++\n",[68,4194,4195],{"class":70,"line":1510},[68,4196,3677],{"class":78},[68,4198,4199,4201,4203,4205,4207],{"class":70,"line":1521},[68,4200,3741],{"class":316},[68,4202,3744],{"class":78},[68,4204,2537],{"class":316},[68,4206,313],{"class":85},[68,4208,4209],{"class":78},");\n",[68,4211,4212,4214,4216,4218],{"class":70,"line":3103},[68,4213,3793],{"class":74},[68,4215,1640],{"class":78},[68,4217,3798],{"class":1742},[68,4219,4209],{"class":78},[68,4221,4222],{"class":70,"line":3108},[68,4223,101],{"class":78},[170,4225,4226],{},"案例-水仙花数",[170,4228,4229],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[170,4231,4232],{},"例如：1^3+5^3+3^3=153",[170,4234,4235],{},"请用do...while语句，求出所有3位数的水仙花数",[58,4237,4239],{"className":1628,"code":4238,"language":1630,"meta":63,"style":63},"#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",[65,4240,4241,4247,4257,4265,4269,4274,4286,4292,4296,4301,4317,4333,4349,4364,4383,4398,4446,4450,4462,4466,4474,4478,4492],{"__ignoreMap":63},[68,4242,4243,4245],{"class":70,"line":71},[68,4244,3440],{"class":316},[68,4246,3824],{"class":1742},[68,4248,4249,4251,4253,4255],{"class":70,"line":82},[68,4250,3448],{"class":316},[68,4252,3451],{"class":316},[68,4254,3454],{"class":74},[68,4256,95],{"class":78},[68,4258,4259,4261,4263],{"class":70,"line":98},[68,4260,1643],{"class":316},[68,4262,3463],{"class":74},[68,4264,3466],{"class":78},[68,4266,4267],{"class":70,"line":104},[68,4268,3038],{"class":78},[68,4270,4271],{"class":70,"line":112},[68,4272,4273],{"class":302},"    \u002F\u002F1.先打印所有三位数字\n",[68,4275,4276,4278,4280,4282,4284],{"class":70,"line":124},[68,4277,3475],{"class":316},[68,4279,3730],{"class":78},[68,4281,1685],{"class":316},[68,4283,1940],{"class":85},[68,4285,95],{"class":78},[68,4287,4288,4290],{"class":70,"line":1496},[68,4289,4161],{"class":316},[68,4291,4164],{"class":78},[68,4293,4294],{"class":70,"line":1502},[68,4295,3520],{"class":78},[68,4297,4298],{"class":70,"line":1510},[68,4299,4300],{"class":302},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[68,4302,4303,4306,4308,4310,4312,4314],{"class":70,"line":1521},[68,4304,4305],{"class":316},"        int",[68,4307,2891],{"class":78},[68,4309,1685],{"class":316},[68,4311,1248],{"class":85},[68,4313,1694],{"class":78},[68,4315,4316],{"class":302}," \u002F\u002F个位\n",[68,4318,4319,4321,4324,4326,4328,4330],{"class":70,"line":3103},[68,4320,4305],{"class":316},[68,4322,4323],{"class":78}," b",[68,4325,1685],{"class":316},[68,4327,1248],{"class":85},[68,4329,1694],{"class":78},[68,4331,4332],{"class":302}," \u002F\u002F十位\n",[68,4334,4335,4337,4340,4342,4344,4346],{"class":70,"line":3108},[68,4336,4305],{"class":316},[68,4338,4339],{"class":78}," c",[68,4341,1685],{"class":316},[68,4343,1248],{"class":85},[68,4345,1694],{"class":78},[68,4347,4348],{"class":302}," \u002F\u002F百位\n",[68,4350,4351,4354,4356,4358,4360,4362],{"class":70,"line":3114},[68,4352,4353],{"class":78},"        a",[68,4355,1685],{"class":316},[68,4357,3156],{"class":78},[68,4359,1957],{"class":316},[68,4361,313],{"class":85},[68,4363,95],{"class":78},[68,4365,4366,4369,4371,4373,4375,4377,4379,4381],{"class":70,"line":3119},[68,4367,4368],{"class":78},"        b",[68,4370,1685],{"class":316},[68,4372,3156],{"class":78},[68,4374,2212],{"class":316},[68,4376,313],{"class":85},[68,4378,1957],{"class":316},[68,4380,313],{"class":85},[68,4382,95],{"class":78},[68,4384,4385,4388,4390,4392,4394,4396],{"class":70,"line":3133},[68,4386,4387],{"class":78},"        c",[68,4389,1685],{"class":316},[68,4391,3156],{"class":78},[68,4393,2212],{"class":316},[68,4395,1940],{"class":85},[68,4397,95],{"class":78},[68,4399,4400,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4437,4440,4443],{"class":70,"line":3138},[68,4401,3987],{"class":316},[68,4403,3332],{"class":78},[68,4405,2083],{"class":316},[68,4407,1867],{"class":78},[68,4409,2083],{"class":316},[68,4411,1867],{"class":78},[68,4413,2109],{"class":316},[68,4415,1892],{"class":78},[68,4417,2083],{"class":316},[68,4419,1892],{"class":78},[68,4421,2083],{"class":316},[68,4423,1892],{"class":78},[68,4425,2109],{"class":316},[68,4427,1917],{"class":78},[68,4429,2083],{"class":316},[68,4431,1917],{"class":78},[68,4433,2083],{"class":316},[68,4435,4436],{"class":78},"c ",[68,4438,4439],{"class":316},"==",[68,4441,4442],{"class":78}," num)",[68,4444,4445],{"class":302}," \u002F\u002F如果是水仙花数，才打印\n",[68,4447,4448],{"class":70,"line":3144},[68,4449,4000],{"class":78},[68,4451,4452,4454,4456,4458,4460],{"class":70,"line":3165},[68,4453,4005],{"class":78},[68,4455,2670],{"class":316},[68,4457,3156],{"class":78},[68,4459,2670],{"class":316},[68,4461,2692],{"class":78},[68,4463,4464],{"class":70,"line":3170},[68,4465,4019],{"class":78},[68,4467,4468,4470,4472],{"class":70,"line":3184},[68,4469,3779],{"class":78},[68,4471,3782],{"class":316},[68,4473,95],{"class":78},[68,4475,4476],{"class":70,"line":3189},[68,4477,3677],{"class":78},[68,4479,4480,4482,4485,4487,4490],{"class":70,"line":3218},[68,4481,3741],{"class":316},[68,4483,4484],{"class":78}," (num ",[68,4486,2537],{"class":316},[68,4488,4489],{"class":85}," 1000",[68,4491,4209],{"class":78},[68,4493,4494],{"class":70,"line":3223},[68,4495,101],{"class":78},[263,4497,4498],{"start":98},[27,4499,4500],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[58,4502,4504],{"className":1628,"code":4503,"language":1630,"meta":63,"style":63},"\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",[65,4505,4506,4511,4540,4544,4556,4560,4565,4576,4583,4587,4601,4605,4612,4616,4628,4637],{"__ignoreMap":63},[68,4507,4508],{"class":70,"line":71},[68,4509,4510],{"class":302},"\u002F\u002F从数字0-9打印\n",[68,4512,4513,4516,4518,4520,4523,4525,4527,4530,4532,4534,4536,4538],{"class":70,"line":82},[68,4514,4515],{"class":316},"for",[68,4517,1640],{"class":78},[68,4519,1643],{"class":316},[68,4521,4522],{"class":78}," i",[68,4524,1685],{"class":316},[68,4526,1248],{"class":85},[68,4528,4529],{"class":78},";i",[68,4531,2537],{"class":316},[68,4533,313],{"class":85},[68,4535,4529],{"class":78},[68,4537,3782],{"class":316},[68,4539,1646],{"class":78},[68,4541,4542],{"class":70,"line":98},[68,4543,3038],{"class":78},[68,4545,4546,4548,4550,4552,4554],{"class":70,"line":104},[68,4547,3043],{"class":78},[68,4549,2670],{"class":316},[68,4551,2070],{"class":78},[68,4553,2670],{"class":316},[68,4555,2692],{"class":78},[68,4557,4558],{"class":70,"line":112},[68,4559,101],{"class":78},[68,4561,4562],{"class":70,"line":124},[68,4563,4564],{"class":302},"\u002F\u002F上式可以进行拆分\n",[68,4566,4567,4569,4571,4573],{"class":70,"line":1496},[68,4568,1643],{"class":316},[68,4570,4522],{"class":78},[68,4572,1685],{"class":316},[68,4574,4575],{"class":85},"0\n",[68,4577,4578,4580],{"class":70,"line":1502},[68,4579,4515],{"class":316},[68,4581,4582],{"class":78},"(;;;)\n",[68,4584,4585],{"class":70,"line":1510},[68,4586,3038],{"class":78},[68,4588,4589,4592,4595,4597,4599],{"class":70,"line":1521},[68,4590,4591],{"class":316},"    if",[68,4593,4594],{"class":78},"(i",[68,4596,3201],{"class":316},[68,4598,313],{"class":85},[68,4600,1646],{"class":78},[68,4602,4603],{"class":70,"line":3103},[68,4604,3520],{"class":78},[68,4606,4607,4610],{"class":70,"line":3108},[68,4608,4609],{"class":316},"        break",[68,4611,95],{"class":78},[68,4613,4614],{"class":70,"line":3114},[68,4615,3677],{"class":78},[68,4617,4618,4620,4622,4624,4626],{"class":70,"line":3119},[68,4619,3043],{"class":78},[68,4621,2670],{"class":316},[68,4623,2070],{"class":78},[68,4625,2670],{"class":316},[68,4627,2692],{"class":78},[68,4629,4630,4633,4635],{"class":70,"line":3133},[68,4631,4632],{"class":78},"    i",[68,4634,3782],{"class":316},[68,4636,95],{"class":78},[68,4638,4639],{"class":70,"line":3138},[68,4640,101],{"class":78},[170,4642,4643],{},"小练习",[58,4645,4647],{"className":1628,"code":4646,"language":1630,"meta":63,"style":63},"#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",[65,4648,4649,4655,4665,4673,4677,4682,4687,4715,4719,4724,4729,4770,4774,4787,4791,4795,4799,4811,4815,4819],{"__ignoreMap":63},[68,4650,4651,4653],{"class":70,"line":71},[68,4652,3440],{"class":316},[68,4654,3443],{"class":1742},[68,4656,4657,4659,4661,4663],{"class":70,"line":82},[68,4658,3448],{"class":316},[68,4660,3451],{"class":316},[68,4662,3454],{"class":74},[68,4664,95],{"class":78},[68,4666,4667,4669,4671],{"class":70,"line":98},[68,4668,1643],{"class":316},[68,4670,3463],{"class":74},[68,4672,3466],{"class":78},[68,4674,4675],{"class":70,"line":104},[68,4676,3038],{"class":78},[68,4678,4679],{"class":70,"line":112},[68,4680,4681],{"class":302},"    \u002F\u002F敲桌子案例\n",[68,4683,4684],{"class":70,"line":124},[68,4685,4686],{"class":302},"    \u002F\u002F1.先输出1-100的数字\n",[68,4688,4689,4692,4694,4696,4698,4700,4702,4705,4707,4709,4711,4713],{"class":70,"line":1496},[68,4690,4691],{"class":316},"    for",[68,4693,1640],{"class":78},[68,4695,1643],{"class":316},[68,4697,4522],{"class":78},[68,4699,1685],{"class":316},[68,4701,1846],{"class":85},[68,4703,4704],{"class":78},"; i",[68,4706,3079],{"class":316},[68,4708,1940],{"class":85},[68,4710,4704],{"class":78},[68,4712,3782],{"class":316},[68,4714,1646],{"class":78},[68,4716,4717],{"class":70,"line":1502},[68,4718,3520],{"class":78},[68,4720,4721],{"class":70,"line":1510},[68,4722,4723],{"class":302},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[68,4725,4726],{"class":70,"line":1521},[68,4727,4728],{"class":302},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[68,4730,4731,4733,4735,4737,4739,4741,4743,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768],{"class":70,"line":3103},[68,4732,3987],{"class":316},[68,4734,4594],{"class":78},[68,4736,1957],{"class":316},[68,4738,1998],{"class":85},[68,4740,4439],{"class":316},[68,4742,1248],{"class":85},[68,4744,4745],{"class":316}," ||",[68,4747,4522],{"class":78},[68,4749,1957],{"class":316},[68,4751,313],{"class":85},[68,4753,4439],{"class":316},[68,4755,1998],{"class":85},[68,4757,4745],{"class":316},[68,4759,4522],{"class":78},[68,4761,2212],{"class":316},[68,4763,313],{"class":85},[68,4765,4439],{"class":316},[68,4767,1998],{"class":85},[68,4769,1646],{"class":78},[68,4771,4772],{"class":70,"line":3108},[68,4773,4000],{"class":78},[68,4775,4776,4778,4780,4783,4785],{"class":70,"line":3114},[68,4777,4005],{"class":78},[68,4779,2670],{"class":316},[68,4781,4782],{"class":1742},"\"敲桌子\"",[68,4784,2670],{"class":316},[68,4786,2692],{"class":78},[68,4788,4789],{"class":70,"line":3119},[68,4790,4019],{"class":78},[68,4792,4793],{"class":70,"line":3133},[68,4794,4060],{"class":316},[68,4796,4797],{"class":70,"line":3138},[68,4798,4000],{"class":78},[68,4800,4801,4803,4805,4807,4809],{"class":70,"line":3144},[68,4802,4005],{"class":78},[68,4804,2670],{"class":316},[68,4806,2070],{"class":78},[68,4808,2670],{"class":316},[68,4810,2692],{"class":78},[68,4812,4813],{"class":70,"line":3165},[68,4814,4019],{"class":78},[68,4816,4817],{"class":70,"line":3170},[68,4818,3677],{"class":78},[68,4820,4821],{"class":70,"line":3184},[68,4822,101],{"class":78},[170,4824,4825],{},"嵌套实现星图",[58,4827,4829],{"className":1628,"code":4828,"language":1630,"meta":63,"style":63},"#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",[65,4830,4831,4837,4847,4855,4859,4885,4889,4918,4922,4933,4937,4946,4950],{"__ignoreMap":63},[68,4832,4833,4835],{"class":70,"line":71},[68,4834,3440],{"class":316},[68,4836,3443],{"class":1742},[68,4838,4839,4841,4843,4845],{"class":70,"line":82},[68,4840,3448],{"class":316},[68,4842,3451],{"class":316},[68,4844,3454],{"class":74},[68,4846,95],{"class":78},[68,4848,4849,4851,4853],{"class":70,"line":98},[68,4850,1643],{"class":316},[68,4852,3463],{"class":74},[68,4854,3466],{"class":78},[68,4856,4857],{"class":70,"line":104},[68,4858,3038],{"class":78},[68,4860,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879,4881,4883],{"class":70,"line":112},[68,4862,4691],{"class":316},[68,4864,3149],{"class":78},[68,4866,1643],{"class":316},[68,4868,4522],{"class":78},[68,4870,1685],{"class":316},[68,4872,1248],{"class":85},[68,4874,4529],{"class":78},[68,4876,2537],{"class":316},[68,4878,313],{"class":85},[68,4880,4529],{"class":78},[68,4882,3782],{"class":316},[68,4884,1646],{"class":78},[68,4886,4887],{"class":70,"line":124},[68,4888,3520],{"class":78},[68,4890,4891,4894,4896,4898,4901,4903,4905,4908,4910,4912,4914,4916],{"class":70,"line":1496},[68,4892,4893],{"class":316},"        for",[68,4895,3149],{"class":78},[68,4897,1643],{"class":316},[68,4899,4900],{"class":78}," j",[68,4902,1685],{"class":316},[68,4904,1248],{"class":85},[68,4906,4907],{"class":78},";j",[68,4909,2537],{"class":316},[68,4911,313],{"class":85},[68,4913,4907],{"class":78},[68,4915,3782],{"class":316},[68,4917,1646],{"class":78},[68,4919,4920],{"class":70,"line":1502},[68,4921,4000],{"class":78},[68,4923,4924,4926,4928,4931],{"class":70,"line":1510},[68,4925,4005],{"class":78},[68,4927,2670],{"class":316},[68,4929,4930],{"class":1742},"\"*\"",[68,4932,95],{"class":78},[68,4934,4935],{"class":70,"line":1521},[68,4936,4019],{"class":78},[68,4938,4939,4942,4944],{"class":70,"line":3103},[68,4940,4941],{"class":78},"        cout",[68,4943,2670],{"class":316},[68,4945,2692],{"class":78},[68,4947,4948],{"class":70,"line":3108},[68,4949,3677],{"class":78},[68,4951,4952],{"class":70,"line":3114},[68,4953,101],{"class":78},[170,4955,4956],{},"乘法口诀表",[58,4958,4960],{"className":1628,"code":4959,"language":1630,"meta":63,"style":63},"#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",[65,4961,4962,4968,4978,4986,4990,5016,5020,5045,5049,5089,5093,5101,5105],{"__ignoreMap":63},[68,4963,4964,4966],{"class":70,"line":71},[68,4965,3440],{"class":316},[68,4967,3824],{"class":1742},[68,4969,4970,4972,4974,4976],{"class":70,"line":82},[68,4971,3448],{"class":316},[68,4973,3451],{"class":316},[68,4975,3454],{"class":74},[68,4977,95],{"class":78},[68,4979,4980,4982,4984],{"class":70,"line":98},[68,4981,1643],{"class":316},[68,4983,3463],{"class":74},[68,4985,3466],{"class":78},[68,4987,4988],{"class":70,"line":104},[68,4989,3038],{"class":78},[68,4991,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014],{"class":70,"line":112},[68,4993,4691],{"class":316},[68,4995,1640],{"class":78},[68,4997,1643],{"class":316},[68,4999,4522],{"class":78},[68,5001,1685],{"class":316},[68,5003,1846],{"class":85},[68,5005,4529],{"class":78},[68,5007,2537],{"class":316},[68,5009,313],{"class":85},[68,5011,4529],{"class":78},[68,5013,3782],{"class":316},[68,5015,1646],{"class":78},[68,5017,5018],{"class":70,"line":124},[68,5019,3520],{"class":78},[68,5021,5022,5024,5026,5028,5030,5032,5034,5036,5038,5041,5043],{"class":70,"line":1496},[68,5023,4893],{"class":316},[68,5025,1640],{"class":78},[68,5027,1643],{"class":316},[68,5029,4900],{"class":78},[68,5031,1685],{"class":316},[68,5033,1846],{"class":85},[68,5035,4907],{"class":78},[68,5037,3079],{"class":316},[68,5039,5040],{"class":78},"i;j",[68,5042,3782],{"class":316},[68,5044,1646],{"class":78},[68,5046,5047],{"class":70,"line":1502},[68,5048,4000],{"class":78},[68,5050,5051,5053,5055,5057,5059,5061,5063,5065,5067,5070,5072,5074,5076,5078,5080,5083,5085,5087],{"class":70,"line":1510},[68,5052,4005],{"class":78},[68,5054,2670],{"class":316},[68,5056,2095],{"class":78},[68,5058,2670],{"class":316},[68,5060,4930],{"class":1742},[68,5062,2670],{"class":316},[68,5064,2070],{"class":78},[68,5066,2670],{"class":316},[68,5068,5069],{"class":1742},"\"=\"",[68,5071,2670],{"class":316},[68,5073,2070],{"class":78},[68,5075,2083],{"class":316},[68,5077,2095],{"class":78},[68,5079,2670],{"class":316},[68,5081,5082],{"class":1742},"'",[68,5084,2727],{"class":85},[68,5086,5082],{"class":1742},[68,5088,95],{"class":78},[68,5090,5091],{"class":70,"line":1521},[68,5092,4019],{"class":78},[68,5094,5095,5097,5099],{"class":70,"line":3103},[68,5096,4941],{"class":78},[68,5098,2670],{"class":316},[68,5100,2692],{"class":78},[68,5102,5103],{"class":70,"line":3108},[68,5104,3677],{"class":78},[68,5106,5107],{"class":70,"line":3114},[68,5108,101],{"class":78},[19,5110,5112],{"id":5111},"_163跳出语句","1.6.3跳出语句",[263,5114,5115],{},[27,5116,5117],{},"break语句\n作用：用于跳出选择结构或者循环结构",[170,5119,5120],{},"break使用时机：",[24,5122,5123,5126,5129],{},[27,5124,5125],{},"出现在switch条件语句中，作用是终止case并跳出switch",[27,5127,5128],{},"出现在循环结构中，作用是跳出当前的循环结构",[27,5130,5131],{},"出现在嵌套循环中，跳出最近的内层循环语句",[263,5133,5134,5137],{"start":82},[27,5135,5136],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[27,5138,5139],{},"goto语句\n语法：goto 标记;",[170,5141,5142],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[58,5144,5146],{"className":1628,"code":5145,"language":1630,"meta":63,"style":63},"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",[65,5147,5148,5156,5160,5173,5183,5196,5209,5222,5230,5246],{"__ignoreMap":63},[68,5149,5150,5152,5154],{"class":70,"line":71},[68,5151,1643],{"class":316},[68,5153,3463],{"class":74},[68,5155,3466],{"class":78},[68,5157,5158],{"class":70,"line":82},[68,5159,3038],{"class":78},[68,5161,5162,5164,5166,5169,5171],{"class":70,"line":98},[68,5163,3043],{"class":78},[68,5165,2670],{"class":316},[68,5167,5168],{"class":1742},"\"1\"",[68,5170,2670],{"class":316},[68,5172,2692],{"class":78},[68,5174,5175,5178,5181],{"class":70,"line":104},[68,5176,5177],{"class":316},"    goto",[68,5179,5180],{"class":74}," FLAG",[68,5182,95],{"class":78},[68,5184,5185,5187,5189,5192,5194],{"class":70,"line":112},[68,5186,3043],{"class":78},[68,5188,2670],{"class":316},[68,5190,5191],{"class":1742},"\"2\"",[68,5193,2670],{"class":316},[68,5195,2692],{"class":78},[68,5197,5198,5200,5202,5205,5207],{"class":70,"line":124},[68,5199,3043],{"class":78},[68,5201,2670],{"class":316},[68,5203,5204],{"class":1742},"\"3\"",[68,5206,2670],{"class":316},[68,5208,2692],{"class":78},[68,5210,5211,5213,5215,5218,5220],{"class":70,"line":1496},[68,5212,3043],{"class":78},[68,5214,2670],{"class":316},[68,5216,5217],{"class":1742},"\"4\"",[68,5219,2670],{"class":316},[68,5221,2692],{"class":78},[68,5223,5224,5227],{"class":70,"line":1502},[68,5225,5226],{"class":74},"    FLAG",[68,5228,5229],{"class":78},":\n",[68,5231,5232,5234,5236,5239,5241,5243],{"class":70,"line":1510},[68,5233,3043],{"class":78},[68,5235,2670],{"class":316},[68,5237,5238],{"class":1742},"\"5\"",[68,5240,2670],{"class":316},[68,5242,2735],{"class":78},[68,5244,5245],{"class":302},"\u002F\u002F跳过了2,3,4,直接到5\n",[68,5247,5248],{"class":70,"line":1521},[68,5249,101],{"class":78},[14,5251,5253],{"id":5252},"_17数组","1.7数组",[19,5255,5257],{"id":5256},"_171一维数组","1.7.1一维数组",[263,5259,5260],{},[27,5261,5262],{},"一维数组定义方式",[128,5264,5265,5275],{},[131,5266,5267],{},[134,5268,5269,5272],{},[137,5270,5271],{},"方式",[137,5273,5274],{},"注意事项",[144,5276,5277,5291,5301],{},[134,5278,5279,5285],{},[149,5280,5281,5282,1694],{},"数据类型 数组名",[68,5283,5284],{},"数组长度",[149,5286,5287,5288,5290],{},"这种方式是先定义再arr",[68,5289,2070],{},"赋值",[134,5292,5293,5298],{},[149,5294,5281,5295,5297],{},[68,5296,5284],{},"={值1,值2....};",[149,5299,5300],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[134,5302,5303,5307],{},[149,5304,5281,5305,5297],{},[68,5306],{},[149,5308,5309,5310,5312],{},"int arr",[68,5311],{},";这是不正确的，按照这样的方式定义必须有初始长度",[263,5314,5315],{"start":82},[27,5316,5317],{},"一维数组数组名\n用途：",[24,5319,5320],{},[27,5321,5322],{},"1.可以统计整个数组在内存中的长度：",[58,5324,5326],{"className":1628,"code":5325,"language":1630,"meta":63,"style":63},"sizeof(arr);\nsizeof(arr[0]);\n",[65,5327,5328,5335],{"__ignoreMap":63},[68,5329,5330,5332],{"class":70,"line":71},[68,5331,1637],{"class":316},[68,5333,5334],{"class":78},"(arr);\n",[68,5336,5337,5339,5342,5344],{"class":70,"line":82},[68,5338,1637],{"class":316},[68,5340,5341],{"class":78},"(arr[",[68,5343,1248],{"class":85},[68,5345,5346],{"class":78},"]);\n",[24,5348,5349],{},[27,5350,5351],{},"2.可以获取数组在内存中的首地址:",[58,5353,5355],{"className":1628,"code":5354,"language":1630,"meta":63,"style":63},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[65,5356,5357,5362,5375,5380],{"__ignoreMap":63},[68,5358,5359],{"class":70,"line":71},[68,5360,5361],{"class":302},"\u002F\u002F查看16进制的首地址\n",[68,5363,5364,5366,5368,5371,5373],{"class":70,"line":82},[68,5365,2862],{"class":78},[68,5367,2670],{"class":316},[68,5369,5370],{"class":78},"arr",[68,5372,2670],{"class":316},[68,5374,2692],{"class":78},[68,5376,5377],{"class":70,"line":98},[68,5378,5379],{"class":302},"\u002F\u002F看10进制数\n",[68,5381,5382,5384,5386,5388,5390,5392,5394,5397,5399,5401,5403],{"class":70,"line":104},[68,5383,2862],{"class":78},[68,5385,2670],{"class":316},[68,5387,1640],{"class":78},[68,5389,1643],{"class":316},[68,5391,2058],{"class":78},[68,5393,1982],{"class":316},[68,5395,5396],{"class":78},"arr[",[68,5398,1248],{"class":85},[68,5400,2567],{"class":78},[68,5402,2670],{"class":316},[68,5404,2692],{"class":78},[170,5406,5407],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[24,5409,5410],{},[27,5411,5412],{},"1️⃣五只小猪称体重",[58,5414,5416],{"className":1628,"code":5415,"language":1630,"meta":63,"style":63},"#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",[65,5417,5418,5424,5434,5442,5446,5486,5499,5525,5529,5541,5545,5555,5559,5563,5576,5586],{"__ignoreMap":63},[68,5419,5420,5422],{"class":70,"line":71},[68,5421,3440],{"class":316},[68,5423,3443],{"class":1742},[68,5425,5426,5428,5430,5432],{"class":70,"line":82},[68,5427,3448],{"class":316},[68,5429,3451],{"class":316},[68,5431,3454],{"class":74},[68,5433,95],{"class":78},[68,5435,5436,5438,5440],{"class":70,"line":98},[68,5437,1643],{"class":316},[68,5439,3463],{"class":74},[68,5441,3466],{"class":78},[68,5443,5444],{"class":70,"line":104},[68,5445,3038],{"class":78},[68,5447,5448,5450,5453,5455,5457,5459,5461,5464,5466,5469,5471,5473,5475,5478,5480,5483],{"class":70,"line":112},[68,5449,3475],{"class":316},[68,5451,5452],{"class":78}," arr[",[68,5454,1948],{"class":85},[68,5456,2567],{"class":78},[68,5458,1685],{"class":316},[68,5460,2523],{"class":78},[68,5462,5463],{"class":85},"300",[68,5465,2007],{"class":78},[68,5467,5468],{"class":85},"350",[68,5470,2007],{"class":78},[68,5472,3213],{"class":85},[68,5474,2007],{"class":78},[68,5476,5477],{"class":85},"400",[68,5479,2007],{"class":78},[68,5481,5482],{"class":85},"250",[68,5484,5485],{"class":78},"};\n",[68,5487,5488,5490,5493,5495,5497],{"class":70,"line":124},[68,5489,3475],{"class":316},[68,5491,5492],{"class":78}," tmp",[68,5494,1685],{"class":316},[68,5496,1248],{"class":85},[68,5498,95],{"class":78},[68,5500,5501,5503,5505,5507,5509,5511,5513,5515,5517,5519,5521,5523],{"class":70,"line":1496},[68,5502,4691],{"class":316},[68,5504,3149],{"class":78},[68,5506,1643],{"class":316},[68,5508,4522],{"class":78},[68,5510,1685],{"class":316},[68,5512,1248],{"class":85},[68,5514,4529],{"class":78},[68,5516,2537],{"class":316},[68,5518,1948],{"class":85},[68,5520,4529],{"class":78},[68,5522,3782],{"class":316},[68,5524,1646],{"class":78},[68,5526,5527],{"class":70,"line":1502},[68,5528,3520],{"class":78},[68,5530,5531,5533,5536,5538],{"class":70,"line":1510},[68,5532,3987],{"class":316},[68,5534,5535],{"class":78},"(tmp",[68,5537,2537],{"class":316},[68,5539,5540],{"class":78},"arr[i])\n",[68,5542,5543],{"class":70,"line":1521},[68,5544,4000],{"class":78},[68,5546,5547,5550,5552],{"class":70,"line":3103},[68,5548,5549],{"class":78},"            tmp",[68,5551,1685],{"class":316},[68,5553,5554],{"class":78},"arr[i];\n",[68,5556,5557],{"class":70,"line":3108},[68,5558,4019],{"class":78},[68,5560,5561],{"class":70,"line":3114},[68,5562,3677],{"class":78},[68,5564,5565,5567,5569,5572,5574],{"class":70,"line":3119},[68,5566,3043],{"class":78},[68,5568,2670],{"class":316},[68,5570,5571],{"class":78},"tmp",[68,5573,2670],{"class":316},[68,5575,2692],{"class":78},[68,5577,5578,5581,5584],{"class":70,"line":3133},[68,5579,5580],{"class":316},"    return",[68,5582,5583],{"class":85}," 0",[68,5585,95],{"class":78},[68,5587,5588],{"class":70,"line":3138},[68,5589,101],{"class":78},[24,5591,5592],{},[27,5593,5594],{},"2️⃣数组元素逆置",[58,5596,5598],{"className":1628,"code":5597,"language":1630,"meta":63,"style":63},"\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",[65,5599,5600,5605,5611,5621,5629,5633,5668,5684,5716,5729,5734,5739,5751,5761,5771,5776,5785,5795,5800,5805,5832,5836,5852,5856,5867,5876],{"__ignoreMap":63},[68,5601,5602],{"class":70,"line":71},[68,5603,5604],{"class":302},"\u002F\u002F元素逆置\n",[68,5606,5607,5609],{"class":70,"line":82},[68,5608,3440],{"class":316},[68,5610,3443],{"class":1742},[68,5612,5613,5615,5617,5619],{"class":70,"line":98},[68,5614,3448],{"class":316},[68,5616,3451],{"class":316},[68,5618,3454],{"class":74},[68,5620,95],{"class":78},[68,5622,5623,5625,5627],{"class":70,"line":104},[68,5624,1643],{"class":316},[68,5626,3463],{"class":74},[68,5628,3466],{"class":78},[68,5630,5631],{"class":70,"line":112},[68,5632,3038],{"class":78},[68,5634,5635,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660,5662,5664,5666],{"class":70,"line":124},[68,5636,5637],{"class":316},"   int",[68,5639,5452],{"class":78},[68,5641,1948],{"class":85},[68,5643,2567],{"class":78},[68,5645,1685],{"class":316},[68,5647,2523],{"class":78},[68,5649,1846],{"class":85},[68,5651,2007],{"class":78},[68,5653,1715],{"class":85},[68,5655,2007],{"class":78},[68,5657,1709],{"class":85},[68,5659,2007],{"class":78},[68,5661,1922],{"class":85},[68,5663,2007],{"class":78},[68,5665,1948],{"class":85},[68,5667,5485],{"class":78},[68,5669,5670,5672,5675,5677,5679,5681],{"class":70,"line":1496},[68,5671,5637],{"class":316},[68,5673,5674],{"class":78}," start",[68,5676,1685],{"class":316},[68,5678,1248],{"class":85},[68,5680,1694],{"class":78},[68,5682,5683],{"class":302},"\u002F\u002F起始下标\n",[68,5685,5686,5688,5691,5694,5697,5700,5702,5704,5707,5709,5711,5713],{"class":70,"line":1502},[68,5687,5637],{"class":316},[68,5689,5690],{"class":78}," end",[68,5692,5693],{"class":316},"=sizeof",[68,5695,5696],{"class":78},"(arr)",[68,5698,5699],{"class":316},"\u002Fsizeof",[68,5701,5341],{"class":78},[68,5703,1248],{"class":85},[68,5705,5706],{"class":78},"])",[68,5708,2160],{"class":316},[68,5710,1846],{"class":85},[68,5712,1694],{"class":78},[68,5714,5715],{"class":302},"\u002F\u002F结束下标\n",[68,5717,5718,5721,5724,5726],{"class":70,"line":1510},[68,5719,5720],{"class":316},"   while",[68,5722,5723],{"class":78}," (start",[68,5725,2537],{"class":316},[68,5727,5728],{"class":78},"end)\n",[68,5730,5731],{"class":70,"line":1521},[68,5732,5733],{"class":78},"   {\n",[68,5735,5736],{"class":70,"line":3103},[68,5737,5738],{"class":302},"    \u002F\u002F实现元素互换代码\n",[68,5740,5741,5743,5746,5748],{"class":70,"line":3108},[68,5742,3475],{"class":316},[68,5744,5745],{"class":78}," temp",[68,5747,1685],{"class":316},[68,5749,5750],{"class":78},"arr[start];\n",[68,5752,5753,5756,5758],{"class":70,"line":3114},[68,5754,5755],{"class":78},"    arr[start]",[68,5757,1685],{"class":316},[68,5759,5760],{"class":78},"arr[end];\n",[68,5762,5763,5766,5768],{"class":70,"line":3119},[68,5764,5765],{"class":78},"    arr[end]",[68,5767,1685],{"class":316},[68,5769,5770],{"class":78},"temp;\n",[68,5772,5773],{"class":70,"line":3133},[68,5774,5775],{"class":302},"    \u002F\u002F下标更新\n",[68,5777,5778,5781,5783],{"class":70,"line":3138},[68,5779,5780],{"class":78},"    start",[68,5782,3782],{"class":316},[68,5784,95],{"class":78},[68,5786,5787,5790,5793],{"class":70,"line":3144},[68,5788,5789],{"class":78},"    end",[68,5791,5792],{"class":316},"--",[68,5794,95],{"class":78},[68,5796,5797],{"class":70,"line":3165},[68,5798,5799],{"class":78},"   }\n",[68,5801,5802],{"class":70,"line":3170},[68,5803,5804],{"class":302},"   \u002F\u002F输出逆置后的数组\n",[68,5806,5807,5810,5812,5814,5816,5818,5820,5822,5824,5826,5828,5830],{"class":70,"line":3184},[68,5808,5809],{"class":316},"   for",[68,5811,3149],{"class":78},[68,5813,1643],{"class":316},[68,5815,4522],{"class":78},[68,5817,1685],{"class":316},[68,5819,1248],{"class":85},[68,5821,4529],{"class":78},[68,5823,2537],{"class":316},[68,5825,1948],{"class":85},[68,5827,4529],{"class":78},[68,5829,3782],{"class":316},[68,5831,1646],{"class":78},[68,5833,5834],{"class":70,"line":3189},[68,5835,5733],{"class":78},[68,5837,5838,5840,5842,5845,5847,5850],{"class":70,"line":3218},[68,5839,3043],{"class":78},[68,5841,2670],{"class":316},[68,5843,5844],{"class":78},"arr[i]",[68,5846,2670],{"class":316},[68,5848,5849],{"class":1742},"\" \"",[68,5851,95],{"class":78},[68,5853,5854],{"class":70,"line":3223},[68,5855,5799],{"class":78},[68,5857,5858,5861,5863,5865],{"class":70,"line":3240},[68,5859,5860],{"class":74},"   system",[68,5862,1640],{"class":78},[68,5864,3798],{"class":1742},[68,5866,4209],{"class":78},[68,5868,5869,5872,5874],{"class":70,"line":3245},[68,5870,5871],{"class":316},"   return",[68,5873,5583],{"class":85},[68,5875,95],{"class":78},[68,5877,5878],{"class":70,"line":3250},[68,5879,101],{"class":78},[24,5881,5882],{},[27,5883,5884],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[58,5886,5888],{"className":1628,"code":5887,"language":1630,"meta":63,"style":63},"\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",[65,5889,5890,5895,5901,5911,5919,5923,5975,5988,6014,6018,6032,6036,6041,6046,6076,6080,6085,6119,6123,6128,6148,6153,6165,6181,6196,6201,6205,6209,6222,6248,6252,6266,6270,6278],{"__ignoreMap":63},[68,5891,5892],{"class":70,"line":71},[68,5893,5894],{"class":302},"\u002F\u002F冒泡排序,升序\n",[68,5896,5897,5899],{"class":70,"line":82},[68,5898,3440],{"class":316},[68,5900,3443],{"class":1742},[68,5902,5903,5905,5907,5909],{"class":70,"line":98},[68,5904,3448],{"class":316},[68,5906,3451],{"class":316},[68,5908,3454],{"class":74},[68,5910,95],{"class":78},[68,5912,5913,5915,5917],{"class":70,"line":104},[68,5914,1643],{"class":316},[68,5916,3463],{"class":74},[68,5918,3466],{"class":78},[68,5920,5921],{"class":70,"line":112},[68,5922,3038],{"class":78},[68,5924,5925,5927,5929,5931,5934,5936,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969,5971,5973],{"class":70,"line":124},[68,5926,3475],{"class":316},[68,5928,5452],{"class":78},[68,5930,2049],{"class":85},[68,5932,5933],{"class":78},"] ",[68,5935,1685],{"class":316},[68,5937,5938],{"class":78}," {",[68,5940,1922],{"class":85},[68,5942,2007],{"class":78},[68,5944,1715],{"class":85},[68,5946,2007],{"class":78},[68,5948,2024],{"class":85},[68,5950,2007],{"class":78},[68,5952,1248],{"class":85},[68,5954,2007],{"class":78},[68,5956,1948],{"class":85},[68,5958,2007],{"class":78},[68,5960,1998],{"class":85},[68,5962,2007],{"class":78},[68,5964,1846],{"class":85},[68,5966,2007],{"class":78},[68,5968,1709],{"class":85},[68,5970,2007],{"class":78},[68,5972,2049],{"class":85},[68,5974,5485],{"class":78},[68,5976,5977,5979,5981,5984,5986],{"class":70,"line":1496},[68,5978,3043],{"class":78},[68,5980,2670],{"class":316},[68,5982,5983],{"class":1742},"\"排序前：\"",[68,5985,2670],{"class":316},[68,5987,2692],{"class":78},[68,5989,5990,5992,5994,5996,5998,6000,6002,6004,6006,6008,6010,6012],{"class":70,"line":1502},[68,5991,4691],{"class":316},[68,5993,3149],{"class":78},[68,5995,1643],{"class":316},[68,5997,4522],{"class":78},[68,5999,1685],{"class":316},[68,6001,1248],{"class":85},[68,6003,4529],{"class":78},[68,6005,2537],{"class":316},[68,6007,2049],{"class":85},[68,6009,4529],{"class":78},[68,6011,3782],{"class":316},[68,6013,1646],{"class":78},[68,6015,6016],{"class":70,"line":1510},[68,6017,3520],{"class":78},[68,6019,6020,6022,6024,6026,6028,6030],{"class":70,"line":1521},[68,6021,4941],{"class":78},[68,6023,2670],{"class":316},[68,6025,5844],{"class":78},[68,6027,2670],{"class":316},[68,6029,5849],{"class":1742},[68,6031,95],{"class":78},[68,6033,6034],{"class":70,"line":3103},[68,6035,3677],{"class":78},[68,6037,6038],{"class":70,"line":3108},[68,6039,6040],{"class":302},"    \u002F\u002F开始冒泡排序\n",[68,6042,6043],{"class":70,"line":3114},[68,6044,6045],{"class":302},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[68,6047,6048,6050,6052,6054,6056,6058,6060,6062,6064,6066,6068,6070,6072,6074],{"class":70,"line":3119},[68,6049,4691],{"class":316},[68,6051,3149],{"class":78},[68,6053,1643],{"class":316},[68,6055,4522],{"class":78},[68,6057,1685],{"class":316},[68,6059,1248],{"class":85},[68,6061,4529],{"class":78},[68,6063,2537],{"class":316},[68,6065,2049],{"class":85},[68,6067,2160],{"class":316},[68,6069,1846],{"class":85},[68,6071,4529],{"class":78},[68,6073,3782],{"class":316},[68,6075,1646],{"class":78},[68,6077,6078],{"class":70,"line":3133},[68,6079,3520],{"class":78},[68,6081,6082],{"class":70,"line":3138},[68,6083,6084],{"class":302},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[68,6086,6087,6089,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117],{"class":70,"line":3144},[68,6088,4893],{"class":316},[68,6090,3149],{"class":78},[68,6092,1643],{"class":316},[68,6094,4900],{"class":78},[68,6096,1685],{"class":316},[68,6098,1248],{"class":85},[68,6100,4907],{"class":78},[68,6102,2537],{"class":316},[68,6104,2049],{"class":85},[68,6106,2160],{"class":316},[68,6108,2070],{"class":78},[68,6110,2160],{"class":316},[68,6112,1846],{"class":85},[68,6114,4907],{"class":78},[68,6116,3782],{"class":316},[68,6118,1646],{"class":78},[68,6120,6121],{"class":70,"line":3165},[68,6122,4000],{"class":78},[68,6124,6125],{"class":70,"line":3170},[68,6126,6127],{"class":302},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[68,6129,6130,6133,6136,6138,6141,6143,6145],{"class":70,"line":3184},[68,6131,6132],{"class":316},"            if",[68,6134,6135],{"class":78},"(arr[j]",[68,6137,2587],{"class":316},[68,6139,6140],{"class":78},"arr[j",[68,6142,2109],{"class":316},[68,6144,1846],{"class":85},[68,6146,6147],{"class":78},"])\n",[68,6149,6150],{"class":70,"line":3189},[68,6151,6152],{"class":78},"            {\n",[68,6154,6155,6158,6160,6162],{"class":70,"line":3218},[68,6156,6157],{"class":316},"                int",[68,6159,5745],{"class":78},[68,6161,1685],{"class":316},[68,6163,6164],{"class":78},"arr[j];\n",[68,6166,6167,6170,6172,6174,6176,6178],{"class":70,"line":3223},[68,6168,6169],{"class":78},"                arr[j]",[68,6171,1685],{"class":316},[68,6173,6140],{"class":78},[68,6175,2109],{"class":316},[68,6177,1846],{"class":85},[68,6179,6180],{"class":78},"];\n",[68,6182,6183,6186,6188,6190,6192,6194],{"class":70,"line":3240},[68,6184,6185],{"class":78},"                arr[j",[68,6187,2109],{"class":316},[68,6189,1846],{"class":85},[68,6191,2567],{"class":78},[68,6193,1685],{"class":316},[68,6195,5770],{"class":78},[68,6197,6198],{"class":70,"line":3245},[68,6199,6200],{"class":78},"            }\n",[68,6202,6203],{"class":70,"line":3250},[68,6204,4019],{"class":78},[68,6206,6207],{"class":70,"line":3255},[68,6208,3677],{"class":78},[68,6210,6211,6213,6215,6218,6220],{"class":70,"line":3269},[68,6212,3043],{"class":78},[68,6214,2670],{"class":316},[68,6216,6217],{"class":1742},"\"排序后：\"",[68,6219,2670],{"class":316},[68,6221,2692],{"class":78},[68,6223,6224,6226,6228,6230,6232,6234,6236,6238,6240,6242,6244,6246],{"class":70,"line":3274},[68,6225,4691],{"class":316},[68,6227,3149],{"class":78},[68,6229,1643],{"class":316},[68,6231,4522],{"class":78},[68,6233,1685],{"class":316},[68,6235,1248],{"class":85},[68,6237,4529],{"class":78},[68,6239,2537],{"class":316},[68,6241,2049],{"class":85},[68,6243,4529],{"class":78},[68,6245,3782],{"class":316},[68,6247,1646],{"class":78},[68,6249,6250],{"class":70,"line":4067},[68,6251,3520],{"class":78},[68,6253,6254,6256,6258,6260,6262,6264],{"class":70,"line":4081},[68,6255,4941],{"class":78},[68,6257,2670],{"class":316},[68,6259,5844],{"class":78},[68,6261,2670],{"class":316},[68,6263,5849],{"class":1742},[68,6265,95],{"class":78},[68,6267,6268],{"class":70,"line":4089},[68,6269,3677],{"class":78},[68,6271,6272,6274,6276],{"class":70,"line":4094},[68,6273,5580],{"class":316},[68,6275,5583],{"class":85},[68,6277,95],{"class":78},[68,6279,6280],{"class":70,"line":4100},[68,6281,101],{"class":78},[19,6283,6285],{"id":6284},"_172二维数组","1.7.2二维数组",[263,6287,6288],{},[27,6289,6290],{},"二维数组的四种定义方式",[128,6292,6293,6302],{},[131,6294,6295],{},[134,6296,6297,6300],{},[137,6298,6299],{},"序号",[137,6301,5271],{},[144,6303,6304,6314,6323,6332,6341],{},[134,6305,6306,6308],{},[149,6307,1846],{},[149,6309,6310,6311,1694],{},"数据类型 数组名[行数]",[68,6312,6313],{},"列数",[134,6315,6316,6318],{},[149,6317,1715],{},[149,6319,6310,6320,6322],{},[68,6321,6313],{},"={ {数据1,数据2}，{数据3，数据4}... }",[134,6324,6325,6327],{},[149,6326,1709],{},[149,6328,6310,6329,6331],{},[68,6330,6313],{},"={数据1,数据2,数据3...}",[134,6333,6334,6336],{},[149,6335,1922],{},[149,6337,6338,6339,6331],{},"数据类型 数组名[]",[68,6340,6313],{},[134,6342,6343,6346],{},[149,6344,6345],{},"注意：不能只省略列数",[149,6347],{},[263,6349,6350],{"start":82},[27,6351,6352],{},"二维数组数组名",[24,6354,6355,6358],{},[27,6356,6357],{},"1.查看二维数组所占内存空间",[27,6359,6360],{},"2.获取二维数组首地址",[170,6362,6363],{},"已知二维数组，求二维数组的行数与列数",[58,6365,6367],{"className":1628,"code":6366,"language":1630,"meta":63,"style":63},"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",[65,6368,6369,6377,6381,6399,6403,6421,6437,6442,6467,6500],{"__ignoreMap":63},[68,6370,6371,6373,6375],{"class":70,"line":71},[68,6372,1643],{"class":316},[68,6374,3463],{"class":74},[68,6376,3466],{"class":78},[68,6378,6379],{"class":70,"line":82},[68,6380,3038],{"class":78},[68,6382,6383,6385,6387,6389,6392,6394,6396],{"class":70,"line":98},[68,6384,3475],{"class":316},[68,6386,5452],{"class":78},[68,6388,1715],{"class":85},[68,6390,6391],{"class":78},"][",[68,6393,1709],{"class":85},[68,6395,2567],{"class":78},[68,6397,6398],{"class":316},"=\n",[68,6400,6401],{"class":70,"line":104},[68,6402,3520],{"class":78},[68,6404,6405,6408,6410,6412,6414,6416,6418],{"class":70,"line":112},[68,6406,6407],{"class":78},"        {",[68,6409,1846],{"class":85},[68,6411,2007],{"class":78},[68,6413,1715],{"class":85},[68,6415,2007],{"class":78},[68,6417,1709],{"class":85},[68,6419,6420],{"class":78},"},\n",[68,6422,6423,6425,6427,6429,6431,6433,6435],{"class":70,"line":124},[68,6424,6407],{"class":78},[68,6426,1922],{"class":85},[68,6428,2007],{"class":78},[68,6430,1948],{"class":85},[68,6432,2007],{"class":78},[68,6434,1973],{"class":85},[68,6436,101],{"class":78},[68,6438,6439],{"class":70,"line":1496},[68,6440,6441],{"class":78},"    };\n",[68,6443,6444,6446,6448,6451,6453,6455,6457,6459,6461,6463,6465],{"class":70,"line":1502},[68,6445,3043],{"class":78},[68,6447,2670],{"class":316},[68,6449,6450],{"class":1742},"\"二维数组的行数\"",[68,6452,2865],{"class":316},[68,6454,5696],{"class":78},[68,6456,5699],{"class":316},[68,6458,5341],{"class":78},[68,6460,1248],{"class":85},[68,6462,5706],{"class":78},[68,6464,2670],{"class":316},[68,6466,2692],{"class":78},[68,6468,6469,6471,6473,6476,6478,6480,6482,6484,6486,6488,6490,6492,6494,6496,6498],{"class":70,"line":1510},[68,6470,3043],{"class":78},[68,6472,2670],{"class":316},[68,6474,6475],{"class":1742},"\"二维数组的列数\"",[68,6477,2865],{"class":316},[68,6479,5341],{"class":78},[68,6481,1248],{"class":85},[68,6483,5706],{"class":78},[68,6485,5699],{"class":316},[68,6487,5341],{"class":78},[68,6489,1248],{"class":85},[68,6491,6391],{"class":78},[68,6493,1248],{"class":85},[68,6495,5706],{"class":78},[68,6497,2670],{"class":316},[68,6499,2692],{"class":78},[68,6501,6502],{"class":70,"line":1521},[68,6503,101],{"class":78},[170,6505,6506],{},"查看二维数组首地址",[58,6508,6510],{"className":1628,"code":6509,"language":1630,"meta":63,"style":63},"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",[65,6511,6512,6529,6555,6580],{"__ignoreMap":63},[68,6513,6514,6516,6518,6521,6523,6525,6527],{"class":70,"line":71},[68,6515,2862],{"class":78},[68,6517,2670],{"class":316},[68,6519,6520],{"class":1742},"\"二维数组首地址：\"",[68,6522,2670],{"class":316},[68,6524,5370],{"class":78},[68,6526,2670],{"class":316},[68,6528,2692],{"class":78},[68,6530,6531,6533,6535,6538,6540,6542,6544,6547,6549,6551,6553],{"class":70,"line":82},[68,6532,2862],{"class":78},[68,6534,2670],{"class":316},[68,6536,6537],{"class":1742},"\"二维数组第一行的首地址：\"",[68,6539,2670],{"class":316},[68,6541,1640],{"class":78},[68,6543,1643],{"class":316},[68,6545,6546],{"class":78},")arr[",[68,6548,1248],{"class":85},[68,6550,2567],{"class":78},[68,6552,2670],{"class":316},[68,6554,2692],{"class":78},[68,6556,6557,6559,6561,6564,6566,6568,6570,6572,6574,6576,6578],{"class":70,"line":98},[68,6558,2862],{"class":78},[68,6560,2670],{"class":316},[68,6562,6563],{"class":1742},"\"二维数组第二行的首地址：\"",[68,6565,2670],{"class":316},[68,6567,1640],{"class":78},[68,6569,1643],{"class":316},[68,6571,6546],{"class":78},[68,6573,1846],{"class":85},[68,6575,2567],{"class":78},[68,6577,2670],{"class":316},[68,6579,2692],{"class":78},[68,6581,6582,6584,6586,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,6613],{"class":70,"line":104},[68,6583,2862],{"class":78},[68,6585,2670],{"class":316},[68,6587,6588],{"class":1742},"\"二维数组第一个元素的首地址:\"",[68,6590,2670],{"class":316},[68,6592,1640],{"class":78},[68,6594,1643],{"class":316},[68,6596,2058],{"class":78},[68,6598,1982],{"class":316},[68,6600,5396],{"class":78},[68,6602,1248],{"class":85},[68,6604,6391],{"class":78},[68,6606,1248],{"class":85},[68,6608,2567],{"class":78},[68,6610,2670],{"class":316},[68,6612,2735],{"class":78},[68,6614,6615],{"class":302},"\u002F\u002F对于数，要加取址符\n",[1553,6617,6618],{},"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":63,"searchDepth":82,"depth":82,"links":6620},[6621,6622,6623,6631,6632,6638,6643],{"id":1583,"depth":82,"text":1584},{"id":1590,"depth":82,"text":1591},{"id":1605,"depth":82,"text":1606,"children":6624},[6625,6626,6627,6628,6629,6630],{"id":1609,"depth":98,"text":1610},{"id":1656,"depth":98,"text":1657},{"id":1723,"depth":98,"text":1724},{"id":2651,"depth":98,"text":2652},{"id":2741,"depth":98,"text":2742},{"id":2836,"depth":98,"text":2837},{"id":2878,"depth":82,"text":2879},{"id":2946,"depth":82,"text":2947,"children":6633},[6634,6635,6636,6637],{"id":2950,"depth":98,"text":2951},{"id":2971,"depth":98,"text":2972},{"id":2980,"depth":98,"text":2981},{"id":2989,"depth":98,"text":2990},{"id":2998,"depth":82,"text":2999,"children":6639},[6640,6641,6642],{"id":3002,"depth":98,"text":3003},{"id":3695,"depth":98,"text":3696},{"id":5111,"depth":98,"text":5112},{"id":5252,"depth":82,"text":5253,"children":6644},[6645,6646],{"id":5256,"depth":98,"text":5257},{"id":6284,"depth":98,"text":6285},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1575,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6653,"title":6654,"body":6655,"description":63,"extension":1565,"meta":7754,"navigation":1567,"path":7755,"seo":7756,"stem":7757,"__hash__":7758},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6656,"toc":7746},[6657,6660,6664,6671,6679,6682,6748,6752,6755,6831,6835,6838,6841,6844,7057,7061,7066,7130,7135,7202,7207,7298,7301,7406,7410,7413,7419,7563,7567,7570,7584,7587,7632,7635,7743],[10,6658,6654],{"id":6659},"_2函数",[14,6661,6663],{"id":6662},"_21函数概述","2.1函数概述",[263,6665,6666,6669],{},[27,6667,6668],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[27,6670,409],{},[58,6672,6677],{"className":6673,"code":6675,"language":6676,"meta":63},[6674],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[65,6678,6675],{"__ignoreMap":63},[170,6680,6681],{},"小案例",[58,6683,6685],{"className":1628,"code":6684,"language":1630,"meta":63,"style":63},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[65,6686,6687,6692,6716,6720,6737,6744],{"__ignoreMap":63},[68,6688,6689],{"class":70,"line":71},[68,6690,6691],{"class":302},"\u002F\u002Fnum1,num2形参\n",[68,6693,6694,6696,6699,6701,6703,6707,6709,6711,6714],{"class":70,"line":82},[68,6695,1643],{"class":316},[68,6697,6698],{"class":74}," add",[68,6700,1640],{"class":78},[68,6702,1643],{"class":316},[68,6704,6706],{"class":6705},"s4XuR"," num1",[68,6708,2007],{"class":78},[68,6710,1643],{"class":316},[68,6712,6713],{"class":6705}," num2",[68,6715,1646],{"class":78},[68,6717,6718],{"class":70,"line":98},[68,6719,3038],{"class":78},[68,6721,6722,6724,6727,6729,6732,6734],{"class":70,"line":104},[68,6723,3475],{"class":316},[68,6725,6726],{"class":78}," sum",[68,6728,1685],{"class":316},[68,6730,6731],{"class":78},"num1",[68,6733,2109],{"class":316},[68,6735,6736],{"class":78},"num2;\n",[68,6738,6739,6741],{"class":70,"line":112},[68,6740,5580],{"class":316},[68,6742,6743],{"class":78}," sum;\n",[68,6745,6746],{"class":70,"line":124},[68,6747,101],{"class":78},[14,6749,6751],{"id":6750},"_22函数调用","2.2函数调用",[170,6753,6754],{},"调用刚刚写的求和函数",[58,6756,6758],{"className":1628,"code":6757,"language":1630,"meta":63,"style":63},"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",[65,6759,6760,6768,6772,6777,6789,6801,6810,6815,6827],{"__ignoreMap":63},[68,6761,6762,6764,6766],{"class":70,"line":71},[68,6763,1643],{"class":316},[68,6765,3463],{"class":74},[68,6767,3466],{"class":78},[68,6769,6770],{"class":70,"line":82},[68,6771,3038],{"class":78},[68,6773,6774],{"class":70,"line":98},[68,6775,6776],{"class":302},"    \u002F\u002Fa,b实参\n",[68,6778,6779,6781,6783,6785,6787],{"class":70,"line":104},[68,6780,3475],{"class":316},[68,6782,2891],{"class":78},[68,6784,1685],{"class":316},[68,6786,1248],{"class":85},[68,6788,95],{"class":78},[68,6790,6791,6793,6795,6797,6799],{"class":70,"line":112},[68,6792,3475],{"class":316},[68,6794,4323],{"class":78},[68,6796,1685],{"class":316},[68,6798,1248],{"class":85},[68,6800,95],{"class":78},[68,6802,6803,6805,6807],{"class":70,"line":124},[68,6804,3502],{"class":78},[68,6806,2922],{"class":316},[68,6808,6809],{"class":78},"a,b;\n",[68,6811,6812],{"class":70,"line":1496},[68,6813,6814],{"class":302},"    \u002F\u002F调用函数时，实参值传给了形参\n",[68,6816,6817,6819,6821,6824],{"class":70,"line":1502},[68,6818,3043],{"class":78},[68,6820,2670],{"class":316},[68,6822,6823],{"class":74},"add",[68,6825,6826],{"class":78},"(a,b);\n",[68,6828,6829],{"class":70,"line":1510},[68,6830,101],{"class":78},[14,6832,6834],{"id":6833},"_23值传递","2.3值传递",[170,6836,6837],{},"值传递就是函数调用时实参将数值传给形参",[170,6839,6840],{},"值传递时，如果形参发生任何改变，不会影响实参",[170,6842,6843],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[58,6845,6847],{"className":1628,"code":6846,"language":1630,"meta":63,"style":63},"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",[65,6848,6849,6871,6875,6888,6905,6923,6934,6943,6952,6965,6981,6997,7006,7010,7018,7022,7034,7046,7053],{"__ignoreMap":63},[68,6850,6851,6854,6857,6859,6861,6863,6865,6867,6869],{"class":70,"line":71},[68,6852,6853],{"class":316},"void",[68,6855,6856],{"class":74}," swap",[68,6858,1640],{"class":78},[68,6860,1643],{"class":316},[68,6862,6706],{"class":6705},[68,6864,2007],{"class":78},[68,6866,1643],{"class":316},[68,6868,6713],{"class":6705},[68,6870,1646],{"class":78},[68,6872,6873],{"class":70,"line":82},[68,6874,3038],{"class":78},[68,6876,6877,6879,6881,6884,6886],{"class":70,"line":98},[68,6878,3043],{"class":78},[68,6880,2670],{"class":316},[68,6882,6883],{"class":1742},"\"交换前：\"",[68,6885,2670],{"class":316},[68,6887,2692],{"class":78},[68,6889,6890,6892,6894,6897,6899,6901,6903],{"class":70,"line":104},[68,6891,3043],{"class":78},[68,6893,2670],{"class":316},[68,6895,6896],{"class":1742},"\"num1=\"",[68,6898,2670],{"class":316},[68,6900,6731],{"class":78},[68,6902,2670],{"class":316},[68,6904,2692],{"class":78},[68,6906,6907,6909,6911,6914,6916,6919,6921],{"class":70,"line":112},[68,6908,3043],{"class":78},[68,6910,2670],{"class":316},[68,6912,6913],{"class":1742},"\"num2=\"",[68,6915,2670],{"class":316},[68,6917,6918],{"class":78},"num2",[68,6920,2670],{"class":316},[68,6922,2692],{"class":78},[68,6924,6925,6927,6929,6931],{"class":70,"line":124},[68,6926,3475],{"class":316},[68,6928,5745],{"class":78},[68,6930,1685],{"class":316},[68,6932,6933],{"class":78},"num1;\n",[68,6935,6936,6939,6941],{"class":70,"line":1496},[68,6937,6938],{"class":78},"    num1",[68,6940,1685],{"class":316},[68,6942,6736],{"class":78},[68,6944,6945,6948,6950],{"class":70,"line":1502},[68,6946,6947],{"class":78},"    num2",[68,6949,1685],{"class":316},[68,6951,5770],{"class":78},[68,6953,6954,6956,6958,6961,6963],{"class":70,"line":1510},[68,6955,3043],{"class":78},[68,6957,2670],{"class":316},[68,6959,6960],{"class":1742},"\"交换后：\"",[68,6962,2670],{"class":316},[68,6964,2692],{"class":78},[68,6966,6967,6969,6971,6973,6975,6977,6979],{"class":70,"line":1521},[68,6968,3043],{"class":78},[68,6970,2670],{"class":316},[68,6972,6896],{"class":1742},[68,6974,2670],{"class":316},[68,6976,6731],{"class":78},[68,6978,2670],{"class":316},[68,6980,2692],{"class":78},[68,6982,6983,6985,6987,6989,6991,6993,6995],{"class":70,"line":3103},[68,6984,3043],{"class":78},[68,6986,2670],{"class":316},[68,6988,6913],{"class":1742},[68,6990,2670],{"class":316},[68,6992,6918],{"class":78},[68,6994,2670],{"class":316},[68,6996,2692],{"class":78},[68,6998,6999,7001,7003],{"class":70,"line":3108},[68,7000,5580],{"class":316},[68,7002,1694],{"class":78},[68,7004,7005],{"class":302},"\u002F\u002F或者不写\n",[68,7007,7008],{"class":70,"line":3114},[68,7009,101],{"class":78},[68,7011,7012,7014,7016],{"class":70,"line":3119},[68,7013,1643],{"class":316},[68,7015,3463],{"class":74},[68,7017,3466],{"class":78},[68,7019,7020],{"class":70,"line":3133},[68,7021,3038],{"class":78},[68,7023,7024,7026,7028,7030,7032],{"class":70,"line":3138},[68,7025,3475],{"class":316},[68,7027,2891],{"class":78},[68,7029,1685],{"class":316},[68,7031,313],{"class":85},[68,7033,95],{"class":78},[68,7035,7036,7038,7040,7042,7044],{"class":70,"line":3144},[68,7037,3475],{"class":316},[68,7039,4323],{"class":78},[68,7041,1685],{"class":316},[68,7043,333],{"class":85},[68,7045,95],{"class":78},[68,7047,7048,7051],{"class":70,"line":3165},[68,7049,7050],{"class":74},"    swap",[68,7052,6826],{"class":78},[68,7054,7055],{"class":70,"line":3170},[68,7056,101],{"class":78},[14,7058,7060],{"id":7059},"_24函数的常见形式","2.4函数的常见形式",[263,7062,7063],{},[27,7064,7065],{},"无参无返",[58,7067,7069],{"className":1628,"code":7068,"language":1630,"meta":63,"style":63},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[65,7070,7071,7080,7084,7097,7101,7109,7113,7118,7126],{"__ignoreMap":63},[68,7072,7073,7075,7078],{"class":70,"line":71},[68,7074,6853],{"class":316},[68,7076,7077],{"class":74}," test01",[68,7079,3466],{"class":78},[68,7081,7082],{"class":70,"line":82},[68,7083,3038],{"class":78},[68,7085,7086,7088,7090,7093,7095],{"class":70,"line":98},[68,7087,3043],{"class":78},[68,7089,2670],{"class":316},[68,7091,7092],{"class":1742},"\"你好\"",[68,7094,2670],{"class":316},[68,7096,2692],{"class":78},[68,7098,7099],{"class":70,"line":104},[68,7100,101],{"class":78},[68,7102,7103,7105,7107],{"class":70,"line":112},[68,7104,1643],{"class":316},[68,7106,3463],{"class":74},[68,7108,3466],{"class":78},[68,7110,7111],{"class":70,"line":124},[68,7112,3038],{"class":78},[68,7114,7115],{"class":70,"line":1496},[68,7116,7117],{"class":302},"    \u002F\u002F函数调用\n",[68,7119,7120,7123],{"class":70,"line":1502},[68,7121,7122],{"class":74},"    test01",[68,7124,7125],{"class":78},"();\n",[68,7127,7128],{"class":70,"line":1510},[68,7129,101],{"class":78},[263,7131,7132],{"start":82},[27,7133,7134],{},"有参无返",[58,7136,7138],{"className":1628,"code":7137,"language":1630,"meta":63,"style":63},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[65,7139,7140,7155,7159,7171,7175,7183,7187,7198],{"__ignoreMap":63},[68,7141,7142,7144,7147,7149,7151,7153],{"class":70,"line":71},[68,7143,6853],{"class":316},[68,7145,7146],{"class":74}," test02",[68,7148,1640],{"class":78},[68,7150,1643],{"class":316},[68,7152,2891],{"class":6705},[68,7154,1646],{"class":78},[68,7156,7157],{"class":70,"line":82},[68,7158,3038],{"class":78},[68,7160,7161,7163,7165,7167,7169],{"class":70,"line":98},[68,7162,3043],{"class":78},[68,7164,2670],{"class":316},[68,7166,7092],{"class":1742},[68,7168,2670],{"class":316},[68,7170,2692],{"class":78},[68,7172,7173],{"class":70,"line":104},[68,7174,101],{"class":78},[68,7176,7177,7179,7181],{"class":70,"line":112},[68,7178,1643],{"class":316},[68,7180,3463],{"class":74},[68,7182,3466],{"class":78},[68,7184,7185],{"class":70,"line":124},[68,7186,3038],{"class":78},[68,7188,7189,7192,7194,7196],{"class":70,"line":1496},[68,7190,7191],{"class":74},"    test02",[68,7193,1640],{"class":78},[68,7195,1940],{"class":85},[68,7197,4209],{"class":78},[68,7199,7200],{"class":70,"line":1502},[68,7201,101],{"class":78},[263,7203,7204],{"start":98},[27,7205,7206],{},"无参有返",[58,7208,7210],{"className":1628,"code":7209,"language":1630,"meta":63,"style":63},"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",[65,7211,7212,7221,7225,7237,7246,7250,7258,7262,7275,7294],{"__ignoreMap":63},[68,7213,7214,7216,7219],{"class":70,"line":71},[68,7215,1643],{"class":316},[68,7217,7218],{"class":74}," test03",[68,7220,3466],{"class":78},[68,7222,7223],{"class":70,"line":82},[68,7224,3038],{"class":78},[68,7226,7227,7229,7231,7233,7235],{"class":70,"line":98},[68,7228,3043],{"class":78},[68,7230,2670],{"class":316},[68,7232,7092],{"class":1742},[68,7234,2670],{"class":316},[68,7236,2692],{"class":78},[68,7238,7239,7241,7244],{"class":70,"line":104},[68,7240,5580],{"class":316},[68,7242,7243],{"class":85}," 100",[68,7245,95],{"class":78},[68,7247,7248],{"class":70,"line":112},[68,7249,101],{"class":78},[68,7251,7252,7254,7256],{"class":70,"line":124},[68,7253,1643],{"class":316},[68,7255,3463],{"class":74},[68,7257,3466],{"class":78},[68,7259,7260],{"class":70,"line":1496},[68,7261,3038],{"class":78},[68,7263,7264,7266,7268,7270,7273],{"class":70,"line":1502},[68,7265,3475],{"class":316},[68,7267,6706],{"class":78},[68,7269,1685],{"class":316},[68,7271,7272],{"class":74},"test03",[68,7274,7125],{"class":78},[68,7276,7277,7279,7281,7283,7285,7287,7289,7291],{"class":70,"line":1510},[68,7278,3043],{"class":78},[68,7280,2670],{"class":316},[68,7282,6896],{"class":1742},[68,7284,2670],{"class":316},[68,7286,6731],{"class":78},[68,7288,2670],{"class":316},[68,7290,2735],{"class":78},[68,7292,7293],{"class":302}," \u002F\u002F100\n",[68,7295,7296],{"class":70,"line":1521},[68,7297,101],{"class":78},[170,7299,7300],{},"4.有参有返",[58,7302,7304],{"className":1628,"code":7303,"language":1630,"meta":63,"style":63},"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",[65,7305,7306,7321,7325,7338,7344,7348,7357,7361,7373,7387,7402],{"__ignoreMap":63},[68,7307,7308,7310,7313,7315,7317,7319],{"class":70,"line":71},[68,7309,1643],{"class":316},[68,7311,7312],{"class":74}," test04",[68,7314,1640],{"class":78},[68,7316,1643],{"class":316},[68,7318,2891],{"class":6705},[68,7320,1646],{"class":78},[68,7322,7323],{"class":70,"line":82},[68,7324,3038],{"class":78},[68,7326,7327,7329,7331,7334,7336],{"class":70,"line":98},[68,7328,3043],{"class":78},[68,7330,2670],{"class":316},[68,7332,7333],{"class":1742},"\"hello\"",[68,7335,2670],{"class":316},[68,7337,2692],{"class":78},[68,7339,7340,7342],{"class":70,"line":104},[68,7341,5580],{"class":316},[68,7343,2925],{"class":78},[68,7345,7346],{"class":70,"line":112},[68,7347,101],{"class":78},[68,7349,7350,7352,7355],{"class":70,"line":124},[68,7351,1643],{"class":316},[68,7353,7354],{"class":74}," mian",[68,7356,3466],{"class":78},[68,7358,7359],{"class":70,"line":1496},[68,7360,3038],{"class":78},[68,7362,7363,7365,7367,7369,7371],{"class":70,"line":1502},[68,7364,3475],{"class":316},[68,7366,4323],{"class":78},[68,7368,1685],{"class":316},[68,7370,1846],{"class":85},[68,7372,95],{"class":78},[68,7374,7375,7377,7379,7381,7384],{"class":70,"line":1510},[68,7376,3475],{"class":316},[68,7378,4339],{"class":78},[68,7380,1685],{"class":316},[68,7382,7383],{"class":74},"test04",[68,7385,7386],{"class":78},"(b);\n",[68,7388,7389,7391,7393,7395,7397,7399],{"class":70,"line":1521},[68,7390,3043],{"class":78},[68,7392,2670],{"class":316},[68,7394,1917],{"class":78},[68,7396,2670],{"class":316},[68,7398,2735],{"class":78},[68,7400,7401],{"class":302}," \u002F\u002F1\n",[68,7403,7404],{"class":70,"line":3103},[68,7405,101],{"class":78},[14,7407,7409],{"id":7408},"_25函数的声明","2.5函数的声明",[170,7411,7412],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[170,7414,7415,7416],{},"函数的",[268,7417,7418],{},"声明可以多次，但是函数的定义只能有一次",[58,7420,7422],{"className":1628,"code":7421,"language":1630,"meta":63,"style":63},"\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",[65,7423,7424,7429,7434,7459,7468,7472,7484,7496,7512,7516,7536,7540,7559],{"__ignoreMap":63},[68,7425,7426],{"class":70,"line":71},[68,7427,7428],{"class":302},"\u002F\u002F函数声明\n",[68,7430,7431],{"class":70,"line":82},[68,7432,7433],{"class":302},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[68,7435,7436,7438,7441,7443,7445,7447,7449,7451,7453,7456],{"class":70,"line":98},[68,7437,1643],{"class":316},[68,7439,7440],{"class":74}," max",[68,7442,1640],{"class":78},[68,7444,1643],{"class":316},[68,7446,2891],{"class":6705},[68,7448,2007],{"class":78},[68,7450,1643],{"class":316},[68,7452,4323],{"class":6705},[68,7454,7455],{"class":78},");",[68,7457,7458],{"class":302},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[68,7460,7461,7463,7465],{"class":70,"line":104},[68,7462,1643],{"class":316},[68,7464,3463],{"class":74},[68,7466,7467],{"class":78},"() \n",[68,7469,7470],{"class":70,"line":112},[68,7471,3038],{"class":78},[68,7473,7474,7476,7478,7480,7482],{"class":70,"line":124},[68,7475,3475],{"class":316},[68,7477,2891],{"class":78},[68,7479,1685],{"class":316},[68,7481,313],{"class":85},[68,7483,95],{"class":78},[68,7485,7486,7488,7490,7492,7494],{"class":70,"line":1496},[68,7487,3475],{"class":316},[68,7489,4323],{"class":78},[68,7491,1685],{"class":316},[68,7493,333],{"class":85},[68,7495,95],{"class":78},[68,7497,7498,7500,7502,7505,7508,7510],{"class":70,"line":1502},[68,7499,3043],{"class":78},[68,7501,2670],{"class":316},[68,7503,7504],{"class":74},"max",[68,7506,7507],{"class":78},"(a,b)",[68,7509,2670],{"class":316},[68,7511,2692],{"class":78},[68,7513,7514],{"class":70,"line":1510},[68,7515,101],{"class":78},[68,7517,7518,7520,7522,7524,7526,7528,7530,7532,7534],{"class":70,"line":1521},[68,7519,1643],{"class":316},[68,7521,7440],{"class":74},[68,7523,1640],{"class":78},[68,7525,1643],{"class":316},[68,7527,2891],{"class":6705},[68,7529,2007],{"class":78},[68,7531,1643],{"class":316},[68,7533,4323],{"class":6705},[68,7535,1646],{"class":78},[68,7537,7538],{"class":70,"line":3103},[68,7539,3038],{"class":78},[68,7541,7542,7544,7546,7548,7550,7552,7554,7556],{"class":70,"line":3108},[68,7543,5580],{"class":316},[68,7545,2891],{"class":78},[68,7547,2587],{"class":316},[68,7549,1892],{"class":78},[68,7551,2613],{"class":316},[68,7553,1867],{"class":78},[68,7555,2486],{"class":316},[68,7557,7558],{"class":78},"b;\n",[68,7560,7561],{"class":70,"line":3114},[68,7562,101],{"class":78},[14,7564,7566],{"id":7565},"_26函数的分文件编写","2.6函数的分文件编写",[170,7568,7569],{},"4个步骤：",[24,7571,7572,7575,7578,7581],{},[27,7573,7574],{},"1.创建后缀名为.h的头文件",[27,7576,7577],{},"2.创建后缀名为.cpp的源文件",[27,7579,7580],{},"3.在头文件中写函数的定义",[27,7582,7583],{},"4.在源文件中写函数的定义\n示例：",[170,7585,7586],{},"头文件：swap.h",[58,7588,7590],{"className":1628,"code":7589,"language":1630,"meta":63,"style":63},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[65,7591,7592,7598,7608,7612],{"__ignoreMap":63},[68,7593,7594,7596],{"class":70,"line":71},[68,7595,3440],{"class":316},[68,7597,3443],{"class":1742},[68,7599,7600,7602,7604,7606],{"class":70,"line":82},[68,7601,3448],{"class":316},[68,7603,3451],{"class":316},[68,7605,3454],{"class":74},[68,7607,95],{"class":78},[68,7609,7610],{"class":70,"line":98},[68,7611,7428],{"class":302},[68,7613,7614,7616,7618,7620,7622,7624,7626,7628,7630],{"class":70,"line":104},[68,7615,6853],{"class":316},[68,7617,6856],{"class":74},[68,7619,1640],{"class":78},[68,7621,1643],{"class":316},[68,7623,2891],{"class":6705},[68,7625,2007],{"class":78},[68,7627,1643],{"class":316},[68,7629,4323],{"class":6705},[68,7631,4209],{"class":78},[170,7633,7634],{},"源文件：swap.cpp",[58,7636,7638],{"className":1628,"code":7637,"language":1630,"meta":63,"style":63},"#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",[65,7639,7640,7647,7652,7672,7676,7687,7696,7705,7722,7739],{"__ignoreMap":63},[68,7641,7642,7644],{"class":70,"line":71},[68,7643,3440],{"class":316},[68,7645,7646],{"class":1742}," \"swap.h\"\n",[68,7648,7649],{"class":70,"line":82},[68,7650,7651],{"class":302},"\u002F\u002F函数的定义\n",[68,7653,7654,7656,7658,7660,7662,7664,7666,7668,7670],{"class":70,"line":98},[68,7655,6853],{"class":316},[68,7657,6856],{"class":74},[68,7659,1640],{"class":78},[68,7661,1643],{"class":316},[68,7663,2891],{"class":6705},[68,7665,2007],{"class":78},[68,7667,1643],{"class":316},[68,7669,4323],{"class":6705},[68,7671,1646],{"class":78},[68,7673,7674],{"class":70,"line":104},[68,7675,3038],{"class":78},[68,7677,7678,7680,7682,7684],{"class":70,"line":112},[68,7679,3475],{"class":316},[68,7681,5745],{"class":78},[68,7683,1685],{"class":316},[68,7685,7686],{"class":78},"a;\n",[68,7688,7689,7692,7694],{"class":70,"line":124},[68,7690,7691],{"class":78},"    a",[68,7693,1685],{"class":316},[68,7695,7558],{"class":78},[68,7697,7698,7701,7703],{"class":70,"line":1496},[68,7699,7700],{"class":78},"    b",[68,7702,1685],{"class":316},[68,7704,5770],{"class":78},[68,7706,7707,7709,7711,7714,7716,7718,7720],{"class":70,"line":1502},[68,7708,3043],{"class":78},[68,7710,2670],{"class":316},[68,7712,7713],{"class":1742},"\"a=\"",[68,7715,2670],{"class":316},[68,7717,1867],{"class":78},[68,7719,2670],{"class":316},[68,7721,2692],{"class":78},[68,7723,7724,7726,7728,7731,7733,7735,7737],{"class":70,"line":1510},[68,7725,3043],{"class":78},[68,7727,2670],{"class":316},[68,7729,7730],{"class":1742},"\"b=\"",[68,7732,2670],{"class":316},[68,7734,1892],{"class":78},[68,7736,2670],{"class":316},[68,7738,2692],{"class":78},[68,7740,7741],{"class":70,"line":1521},[68,7742,101],{"class":78},[1553,7744,7745],{},"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":63,"searchDepth":82,"depth":82,"links":7747},[7748,7749,7750,7751,7752,7753],{"id":6662,"depth":82,"text":6663},{"id":6750,"depth":82,"text":6751},{"id":6833,"depth":82,"text":6834},{"id":7059,"depth":82,"text":7060},{"id":7408,"depth":82,"text":7409},{"id":7565,"depth":82,"text":7566},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6654,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7760,"title":7761,"body":7762,"description":7769,"extension":1565,"meta":9174,"navigation":1567,"path":9175,"seo":9176,"stem":9177,"__hash__":9178},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7763,"toc":9164},[7764,7767,7770,7774,7936,7940,7943,7946,7949,7952,8092,8096,8099,8102,8105,8170,8174,8179,8246,8249,8253,8256,8267,8272,8292,8295,8300,8319,8322,8326,8345,8348,8352,8587,8591,8594,8597,8600,8762,8765,8769,8772,8778,9161],[10,7765,7761],{"id":7766},"_3指针",[170,7768,7769],{},"通过指针保存一个地址，指针就是个地址",[14,7771,7773],{"id":7772},"_31定义指针","3.1定义指针",[58,7775,7777],{"className":1628,"code":7776,"language":1630,"meta":63,"style":63},"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",[65,7778,7779,7787,7791,7796,7808,7813,7821,7831,7849,7869,7873,7878,7883,7888,7902,7918,7932],{"__ignoreMap":63},[68,7780,7781,7783,7785],{"class":70,"line":71},[68,7782,1643],{"class":316},[68,7784,3463],{"class":74},[68,7786,3466],{"class":78},[68,7788,7789],{"class":70,"line":82},[68,7790,3038],{"class":78},[68,7792,7793],{"class":70,"line":98},[68,7794,7795],{"class":302},"    \u002F\u002F1.定义指针\n",[68,7797,7798,7800,7802,7804,7806],{"class":70,"line":104},[68,7799,3475],{"class":316},[68,7801,2891],{"class":78},[68,7803,1685],{"class":316},[68,7805,313],{"class":85},[68,7807,95],{"class":78},[68,7809,7810],{"class":70,"line":112},[68,7811,7812],{"class":302},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[68,7814,7815,7818],{"class":70,"line":124},[68,7816,7817],{"class":316},"    int*",[68,7819,7820],{"class":78},"p;\n",[68,7822,7823,7826,7829],{"class":70,"line":1496},[68,7824,7825],{"class":78},"    p",[68,7827,7828],{"class":316},"=&",[68,7830,7686],{"class":78},[68,7832,7833,7835,7837,7840,7843,7845,7847],{"class":70,"line":1502},[68,7834,3043],{"class":78},[68,7836,2670],{"class":316},[68,7838,7839],{"class":1742},"\"a的地址为：\"",[68,7841,7842],{"class":316},"\u003C\u003C&",[68,7844,1867],{"class":78},[68,7846,2670],{"class":316},[68,7848,2692],{"class":78},[68,7850,7851,7853,7855,7858,7860,7862,7864,7866],{"class":70,"line":1510},[68,7852,3043],{"class":78},[68,7854,2670],{"class":316},[68,7856,7857],{"class":1742},"\"指针p为：\"",[68,7859,2670],{"class":316},[68,7861,170],{"class":78},[68,7863,2670],{"class":316},[68,7865,2735],{"class":78},[68,7867,7868],{"class":302},"\u002F\u002F指针p表示的就是a的地址\n",[68,7870,7871],{"class":70,"line":1521},[68,7872,3890],{"emptyLinePlaceholder":1567},[68,7874,7875],{"class":70,"line":3103},[68,7876,7877],{"class":302},"    \u002F\u002F2.使用指针\n",[68,7879,7880],{"class":70,"line":3108},[68,7881,7882],{"class":302},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[68,7884,7885],{"class":70,"line":3114},[68,7886,7887],{"class":302},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[68,7889,7890,7893,7895,7897,7900],{"class":70,"line":3119},[68,7891,7892],{"class":316},"    *",[68,7894,170],{"class":78},[68,7896,1685],{"class":316},[68,7898,7899],{"class":85},"1000",[68,7901,95],{"class":78},[68,7903,7904,7906,7909,7911,7913,7915],{"class":70,"line":3133},[68,7905,3043],{"class":78},[68,7907,7908],{"class":316},"\u003C\u003C*",[68,7910,170],{"class":78},[68,7912,2670],{"class":316},[68,7914,2735],{"class":78},[68,7916,7917],{"class":302},"\u002F\u002F1000\n",[68,7919,7920,7922,7924,7926,7928,7930],{"class":70,"line":3138},[68,7921,3043],{"class":78},[68,7923,2670],{"class":316},[68,7925,1867],{"class":78},[68,7927,2670],{"class":316},[68,7929,2735],{"class":78},[68,7931,7917],{"class":302},[68,7933,7934],{"class":70,"line":3144},[68,7935,101],{"class":78},[14,7937,7939],{"id":7938},"_32指针所占的内存空间","3.2指针所占的内存空间",[170,7941,7942],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[170,7944,7945],{},"在32位操作系统下：占用4个字节空间",[170,7947,7948],{},"在64位操作系统下：占用8个字节空间",[170,7950,7951],{},"上方是不管啥数据类型的",[58,7953,7955],{"className":1628,"code":7954,"language":1630,"meta":63,"style":63},"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",[65,7956,7957,7965,7969,7974,7986,7991,7996,8001,8014,8036,8062,8088],{"__ignoreMap":63},[68,7958,7959,7961,7963],{"class":70,"line":71},[68,7960,1643],{"class":316},[68,7962,3463],{"class":74},[68,7964,3466],{"class":78},[68,7966,7967],{"class":70,"line":82},[68,7968,3038],{"class":78},[68,7970,7971],{"class":70,"line":98},[68,7972,7973],{"class":302},"    \u002F\u002F指针所占内存空间\n",[68,7975,7976,7978,7980,7982,7984],{"class":70,"line":104},[68,7977,3475],{"class":316},[68,7979,2891],{"class":78},[68,7981,1685],{"class":316},[68,7983,313],{"class":85},[68,7985,95],{"class":78},[68,7987,7988],{"class":70,"line":112},[68,7989,7990],{"class":302},"    \u002F\u002Fint *p;\n",[68,7992,7993],{"class":70,"line":124},[68,7994,7995],{"class":302},"    \u002F\u002Fp=&a;\n",[68,7997,7998],{"class":70,"line":1496},[68,7999,8000],{"class":302},"    \u002F\u002F上述可以写为以下：\n",[68,8002,8003,8005,8008,8010,8012],{"class":70,"line":1502},[68,8004,3475],{"class":316},[68,8006,8007],{"class":316}," *",[68,8009,170],{"class":78},[68,8011,7828],{"class":316},[68,8013,7686],{"class":78},[68,8015,8016,8019,8021,8024,8026,8029,8031,8033],{"class":70,"line":1510},[68,8017,8018],{"class":78},"    cout ",[68,8020,2670],{"class":316},[68,8022,8023],{"class":1742},"\"sizeof(int *)\"",[68,8025,2865],{"class":316},[68,8027,8028],{"class":78},"(p)",[68,8030,2670],{"class":316},[68,8032,2735],{"class":78},[68,8034,8035],{"class":302},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[68,8037,8038,8040,8042,8044,8046,8048,8050,8052,8054,8056,8059],{"class":70,"line":1521},[68,8039,8018],{"class":78},[68,8041,2670],{"class":316},[68,8043,8023],{"class":1742},[68,8045,2865],{"class":316},[68,8047,1640],{"class":78},[68,8049,1643],{"class":316},[68,8051,8007],{"class":316},[68,8053,2058],{"class":78},[68,8055,2670],{"class":316},[68,8057,8058],{"class":78},"endl",[68,8060,8061],{"class":302},"  \u002F\u002F4字节(32位的话)\n",[68,8063,8064,8066,8068,8071,8073,8075,8077,8079,8081,8083,8085],{"class":70,"line":3103},[68,8065,8018],{"class":78},[68,8067,2670],{"class":316},[68,8069,8070],{"class":1742},"\"sizeof(char *)\"",[68,8072,2865],{"class":316},[68,8074,1640],{"class":78},[68,8076,1734],{"class":316},[68,8078,8007],{"class":316},[68,8080,2058],{"class":78},[68,8082,2670],{"class":316},[68,8084,2735],{"class":78},[68,8086,8087],{"class":302}," \u002F\u002F4字节(32位的话)\n",[68,8089,8090],{"class":70,"line":3108},[68,8091,101],{"class":78},[14,8093,8095],{"id":8094},"_33空指针","3.3空指针",[170,8097,8098],{},"空指针：指针变量指向内存中编号为0的空间",[170,8100,8101],{},"用途：初始化指针变量",[170,8103,8104],{},"注意：空指针指向的内存是不可以访问的",[58,8106,8108],{"className":1628,"code":8107,"language":1630,"meta":63,"style":63},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[65,8109,8110,8118,8122,8127,8141,8146,8161,8166],{"__ignoreMap":63},[68,8111,8112,8114,8116],{"class":70,"line":71},[68,8113,1643],{"class":316},[68,8115,3463],{"class":74},[68,8117,3466],{"class":78},[68,8119,8120],{"class":70,"line":82},[68,8121,3038],{"class":78},[68,8123,8124],{"class":70,"line":98},[68,8125,8126],{"class":302},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[68,8128,8129,8131,8133,8135,8137,8139],{"class":70,"line":104},[68,8130,3475],{"class":316},[68,8132,8007],{"class":316},[68,8134,170],{"class":78},[68,8136,1685],{"class":316},[68,8138,3882],{"class":85},[68,8140,95],{"class":78},[68,8142,8143],{"class":70,"line":112},[68,8144,8145],{"class":302},"    \u002F\u002F2.空指针不能进行访问\n",[68,8147,8148,8150,8152,8154,8156,8158],{"class":70,"line":124},[68,8149,7892],{"class":316},[68,8151,170],{"class":78},[68,8153,1685],{"class":316},[68,8155,1940],{"class":85},[68,8157,1694],{"class":78},[68,8159,8160],{"class":302},"\u002F\u002F直接报错，压根不能访问\n",[68,8162,8163],{"class":70,"line":1496},[68,8164,8165],{"class":302},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[68,8167,8168],{"class":70,"line":1502},[68,8169,101],{"class":78},[14,8171,8173],{"id":8172},"_34野指针","3.4野指针",[170,8175,8176],{},[268,8177,8178],{},"指针变量指向非法的内存空间",[58,8180,8182],{"className":1628,"code":8181,"language":1630,"meta":63,"style":63},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[65,8183,8184,8192,8196,8225,8230,8242],{"__ignoreMap":63},[68,8185,8186,8188,8190],{"class":70,"line":71},[68,8187,1643],{"class":316},[68,8189,3463],{"class":74},[68,8191,3466],{"class":78},[68,8193,8194],{"class":70,"line":82},[68,8195,3038],{"class":78},[68,8197,8198,8200,8202,8204,8206,8208,8210,8212,8214,8217,8220,8222],{"class":70,"line":98},[68,8199,3475],{"class":316},[68,8201,8007],{"class":316},[68,8203,170],{"class":78},[68,8205,1685],{"class":316},[68,8207,1640],{"class":78},[68,8209,1643],{"class":316},[68,8211,8007],{"class":316},[68,8213,2058],{"class":78},[68,8215,8216],{"class":316},"0x",[68,8218,8219],{"class":85},"1100",[68,8221,1694],{"class":78},[68,8223,8224],{"class":302}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[68,8226,8227],{"class":70,"line":104},[68,8228,8229],{"class":302},"    \u002F\u002F访问野指针报错\n",[68,8231,8232,8234,8236,8238,8240],{"class":70,"line":112},[68,8233,3043],{"class":78},[68,8235,7908],{"class":316},[68,8237,170],{"class":78},[68,8239,2670],{"class":316},[68,8241,2692],{"class":78},[68,8243,8244],{"class":70,"line":124},[68,8245,101],{"class":78},[170,8247,8248],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8250,8252],{"id":8251},"_35const修饰指针","3.5const修饰指针",[170,8254,8255],{},"三种情况：",[24,8257,8258,8261,8264],{},[27,8259,8260],{},"const修饰指针 常量指针",[27,8262,8263],{},"const修饰常量 指针常量",[27,8265,8266],{},"const即修饰指针，又修饰常量",[263,8268,8269],{},[27,8270,8271],{},"常量指针",[58,8273,8275],{"className":1628,"code":8274,"language":1630,"meta":63,"style":63},"const int *p=&a;\n",[65,8276,8277],{"__ignoreMap":63},[68,8278,8279,8282,8284,8286,8288,8290],{"class":70,"line":71},[68,8280,8281],{"class":316},"const",[68,8283,3872],{"class":316},[68,8285,8007],{"class":316},[68,8287,170],{"class":78},[68,8289,7828],{"class":316},[68,8291,7686],{"class":78},[170,8293,8294],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[263,8296,8297],{"start":82},[27,8298,8299],{},"指针常量",[58,8301,8303],{"className":1628,"code":8302,"language":1630,"meta":63,"style":63},"int *const p=&a;\n",[65,8304,8305],{"__ignoreMap":63},[68,8306,8307,8309,8312,8315,8317],{"class":70,"line":71},[68,8308,1643],{"class":316},[68,8310,8311],{"class":316}," *const",[68,8313,8314],{"class":78}," p",[68,8316,7828],{"class":316},[68,8318,7686],{"class":78},[170,8320,8321],{},"指针的指向不可以改，指针指向的值可以改",[263,8323,8324],{"start":98},[27,8325,8266],{},[58,8327,8329],{"className":1628,"code":8328,"language":1630,"meta":63,"style":63},"const int *const p=&a;\n",[65,8330,8331],{"__ignoreMap":63},[68,8332,8333,8335,8337,8339,8341,8343],{"class":70,"line":71},[68,8334,8281],{"class":316},[68,8336,3872],{"class":316},[68,8338,8311],{"class":316},[68,8340,8314],{"class":78},[68,8342,7828],{"class":316},[68,8344,7686],{"class":78},[170,8346,8347],{},"指针的指向和指针指向的值都不可以改变",[14,8349,8351],{"id":8350},"_36指针和数组","3.6指针和数组",[58,8353,8355],{"className":1628,"code":8354,"language":1630,"meta":63,"style":63},"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",[65,8356,8357,8365,8369,8374,8428,8449,8465,8481,8492,8509,8514,8528,8554,8558,8570,8579,8583],{"__ignoreMap":63},[68,8358,8359,8361,8363],{"class":70,"line":71},[68,8360,1643],{"class":316},[68,8362,3463],{"class":74},[68,8364,3466],{"class":78},[68,8366,8367],{"class":70,"line":82},[68,8368,3038],{"class":78},[68,8370,8371],{"class":70,"line":98},[68,8372,8373],{"class":302},"    \u002F\u002F利用指针访问数组中的元素\n",[68,8375,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406,8408,8410,8412,8414,8416,8418,8420,8422,8424,8426],{"class":70,"line":104},[68,8377,3475],{"class":316},[68,8379,5452],{"class":78},[68,8381,313],{"class":85},[68,8383,2567],{"class":78},[68,8385,1685],{"class":316},[68,8387,2523],{"class":78},[68,8389,1846],{"class":85},[68,8391,2007],{"class":78},[68,8393,1715],{"class":85},[68,8395,2007],{"class":78},[68,8397,1709],{"class":85},[68,8399,2007],{"class":78},[68,8401,1922],{"class":85},[68,8403,2007],{"class":78},[68,8405,1948],{"class":85},[68,8407,2007],{"class":78},[68,8409,1973],{"class":85},[68,8411,2007],{"class":78},[68,8413,1998],{"class":85},[68,8415,2007],{"class":78},[68,8417,2024],{"class":85},[68,8419,2007],{"class":78},[68,8421,2049],{"class":85},[68,8423,2007],{"class":78},[68,8425,313],{"class":85},[68,8427,5485],{"class":78},[68,8429,8430,8432,8434,8437,8439,8441,8443,8445,8447],{"class":70,"line":112},[68,8431,3043],{"class":78},[68,8433,2670],{"class":316},[68,8435,8436],{"class":1742},"\"数组的第一个元素为：\"",[68,8438,2670],{"class":316},[68,8440,5396],{"class":78},[68,8442,1248],{"class":85},[68,8444,2567],{"class":78},[68,8446,2670],{"class":316},[68,8448,2692],{"class":78},[68,8450,8451,8453,8455,8457,8459,8462],{"class":70,"line":124},[68,8452,3475],{"class":316},[68,8454,8007],{"class":316},[68,8456,170],{"class":78},[68,8458,1685],{"class":316},[68,8460,8461],{"class":78},"arr;",[68,8463,8464],{"class":302},"\u002F\u002F注意数才要加取地址符号&\n",[68,8466,8467,8469,8471,8473,8475,8477,8479],{"class":70,"line":1496},[68,8468,3043],{"class":78},[68,8470,2670],{"class":316},[68,8472,8436],{"class":1742},[68,8474,7908],{"class":316},[68,8476,170],{"class":78},[68,8478,2670],{"class":316},[68,8480,2692],{"class":78},[68,8482,8483,8485,8487,8489],{"class":70,"line":1502},[68,8484,7825],{"class":78},[68,8486,3782],{"class":316},[68,8488,1694],{"class":78},[68,8490,8491],{"class":302}," \u002F\u002F让指针向后偏移4个字节\n",[68,8493,8494,8496,8498,8501,8503,8505,8507],{"class":70,"line":1510},[68,8495,3043],{"class":78},[68,8497,2670],{"class":316},[68,8499,8500],{"class":1742},"\"数组的第二个元素为：\"",[68,8502,7908],{"class":316},[68,8504,170],{"class":78},[68,8506,2670],{"class":316},[68,8508,2692],{"class":78},[68,8510,8511],{"class":70,"line":1521},[68,8512,8513],{"class":302},"    \u002F\u002F利用指针遍历数组\n",[68,8515,8516,8518,8520,8523,8525],{"class":70,"line":3103},[68,8517,3475],{"class":316},[68,8519,8007],{"class":316},[68,8521,8522],{"class":78},"p2",[68,8524,1685],{"class":316},[68,8526,8527],{"class":78},"arr;\n",[68,8529,8530,8532,8534,8536,8538,8540,8542,8544,8546,8548,8550,8552],{"class":70,"line":3108},[68,8531,4691],{"class":316},[68,8533,3149],{"class":78},[68,8535,1643],{"class":316},[68,8537,4522],{"class":78},[68,8539,1685],{"class":316},[68,8541,1248],{"class":85},[68,8543,4529],{"class":78},[68,8545,2537],{"class":316},[68,8547,313],{"class":85},[68,8549,4529],{"class":78},[68,8551,3782],{"class":316},[68,8553,1646],{"class":78},[68,8555,8556],{"class":70,"line":3114},[68,8557,3520],{"class":78},[68,8559,8560,8562,8564,8566,8568],{"class":70,"line":3119},[68,8561,4941],{"class":78},[68,8563,7908],{"class":316},[68,8565,8522],{"class":78},[68,8567,2670],{"class":316},[68,8569,2692],{"class":78},[68,8571,8572,8575,8577],{"class":70,"line":3133},[68,8573,8574],{"class":78},"        p2",[68,8576,3782],{"class":316},[68,8578,95],{"class":78},[68,8580,8581],{"class":70,"line":3138},[68,8582,3677],{"class":78},[68,8584,8585],{"class":70,"line":3144},[68,8586,101],{"class":78},[14,8588,8590],{"id":8589},"_37指针和函数","3.7指针和函数",[170,8592,8593],{},"利用指针做函数参数，可以修改实参的值",[170,8595,8596],{},"值传递：只改变形参，不改变实参",[170,8598,8599],{},"地址传递：",[58,8601,8603],{"className":1628,"code":8602,"language":1630,"meta":63,"style":63},"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",[65,8604,8605,8630,8634,8646,8657,8667,8671,8679,8683,8695,8707,8712,8728,8743,8758],{"__ignoreMap":63},[68,8606,8607,8609,8611,8613,8615,8617,8620,8622,8624,8626,8628],{"class":70,"line":71},[68,8608,6853],{"class":316},[68,8610,6856],{"class":74},[68,8612,1640],{"class":78},[68,8614,1643],{"class":316},[68,8616,8007],{"class":316},[68,8618,8619],{"class":6705},"p1",[68,8621,2007],{"class":78},[68,8623,1643],{"class":316},[68,8625,8007],{"class":316},[68,8627,8522],{"class":6705},[68,8629,1646],{"class":78},[68,8631,8632],{"class":70,"line":82},[68,8633,3038],{"class":78},[68,8635,8636,8638,8640,8643],{"class":70,"line":98},[68,8637,3475],{"class":316},[68,8639,5745],{"class":78},[68,8641,8642],{"class":316},"=*",[68,8644,8645],{"class":78},"p1;\n",[68,8647,8648,8650,8652,8654],{"class":70,"line":104},[68,8649,7892],{"class":316},[68,8651,8619],{"class":78},[68,8653,8642],{"class":316},[68,8655,8656],{"class":78},"p2;\n",[68,8658,8659,8661,8663,8665],{"class":70,"line":112},[68,8660,7892],{"class":316},[68,8662,8522],{"class":78},[68,8664,1685],{"class":316},[68,8666,5770],{"class":78},[68,8668,8669],{"class":70,"line":124},[68,8670,101],{"class":78},[68,8672,8673,8675,8677],{"class":70,"line":1496},[68,8674,1643],{"class":316},[68,8676,3463],{"class":74},[68,8678,3466],{"class":78},[68,8680,8681],{"class":70,"line":1502},[68,8682,3038],{"class":78},[68,8684,8685,8687,8689,8691,8693],{"class":70,"line":1510},[68,8686,3475],{"class":316},[68,8688,2891],{"class":78},[68,8690,1685],{"class":316},[68,8692,313],{"class":85},[68,8694,95],{"class":78},[68,8696,8697,8699,8701,8703,8705],{"class":70,"line":1521},[68,8698,3475],{"class":316},[68,8700,4323],{"class":78},[68,8702,1685],{"class":316},[68,8704,333],{"class":85},[68,8706,95],{"class":78},[68,8708,8709],{"class":70,"line":3103},[68,8710,8711],{"class":302},"    \u002F\u002F地址传递\n",[68,8713,8714,8716,8718,8720,8723,8725],{"class":70,"line":3108},[68,8715,7050],{"class":74},[68,8717,1640],{"class":78},[68,8719,1982],{"class":316},[68,8721,8722],{"class":78},"a,",[68,8724,1982],{"class":316},[68,8726,8727],{"class":78},"b);\n",[68,8729,8730,8732,8734,8736,8738,8740],{"class":70,"line":3114},[68,8731,3043],{"class":78},[68,8733,2670],{"class":316},[68,8735,1867],{"class":78},[68,8737,2670],{"class":316},[68,8739,2735],{"class":78},[68,8741,8742],{"class":302},"\u002F\u002F20\n",[68,8744,8745,8747,8749,8751,8753,8755],{"class":70,"line":3119},[68,8746,3043],{"class":78},[68,8748,2670],{"class":316},[68,8750,1892],{"class":78},[68,8752,2670],{"class":316},[68,8754,2735],{"class":78},[68,8756,8757],{"class":302},"\u002F\u002F10\n",[68,8759,8760],{"class":70,"line":3133},[68,8761,101],{"class":78},[170,8763,8764],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8766,8768],{"id":8767},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[170,8770,8771],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[170,8773,8774,8775,8777],{},"例如数组：int arr",[68,8776,313],{},"={4,3,6,9,1,2,10,8,7,5}",[58,8779,8781],{"className":1628,"code":8780,"language":1630,"meta":63,"style":63},"#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",[65,8782,8783,8789,8799,8823,8827,8858,8862,8896,8900,8918,8922,8933,8948,8963,8967,8971,8975,8979,8983,8991,8995,9000,9054,9066,9078,9083,9091,9095,9100,9125,9129,9144,9153,9157],{"__ignoreMap":63},[68,8784,8785,8787],{"class":70,"line":71},[68,8786,3440],{"class":316},[68,8788,3443],{"class":1742},[68,8790,8791,8793,8795,8797],{"class":70,"line":82},[68,8792,3448],{"class":316},[68,8794,3451],{"class":316},[68,8796,3454],{"class":74},[68,8798,95],{"class":78},[68,8800,8801,8803,8806,8808,8810,8812,8814,8816,8818,8821],{"class":70,"line":98},[68,8802,6853],{"class":316},[68,8804,8805],{"class":74}," bubbleSort",[68,8807,1640],{"class":78},[68,8809,1643],{"class":316},[68,8811,8007],{"class":316},[68,8813,170],{"class":6705},[68,8815,2007],{"class":78},[68,8817,1643],{"class":316},[68,8819,8820],{"class":6705}," len",[68,8822,1646],{"class":78},[68,8824,8825],{"class":70,"line":104},[68,8826,3038],{"class":78},[68,8828,8829,8831,8833,8835,8837,8839,8841,8843,8845,8848,8850,8852,8854,8856],{"class":70,"line":112},[68,8830,4691],{"class":316},[68,8832,1640],{"class":78},[68,8834,1643],{"class":316},[68,8836,4522],{"class":78},[68,8838,1685],{"class":316},[68,8840,1248],{"class":85},[68,8842,4529],{"class":78},[68,8844,2537],{"class":316},[68,8846,8847],{"class":78},"len",[68,8849,2160],{"class":316},[68,8851,1846],{"class":85},[68,8853,4529],{"class":78},[68,8855,3782],{"class":316},[68,8857,1646],{"class":78},[68,8859,8860],{"class":70,"line":124},[68,8861,3520],{"class":78},[68,8863,8864,8866,8868,8870,8872,8874,8876,8878,8880,8882,8884,8886,8888,8890,8892,8894],{"class":70,"line":1496},[68,8865,4893],{"class":316},[68,8867,1640],{"class":78},[68,8869,1643],{"class":316},[68,8871,4900],{"class":78},[68,8873,1685],{"class":316},[68,8875,1248],{"class":85},[68,8877,4907],{"class":78},[68,8879,2537],{"class":316},[68,8881,8847],{"class":78},[68,8883,2160],{"class":316},[68,8885,2070],{"class":78},[68,8887,2160],{"class":316},[68,8889,1846],{"class":85},[68,8891,4907],{"class":78},[68,8893,3782],{"class":316},[68,8895,1646],{"class":78},[68,8897,8898],{"class":70,"line":1502},[68,8899,4000],{"class":78},[68,8901,8902,8904,8907,8909,8912,8914,8916],{"class":70,"line":1510},[68,8903,6132],{"class":316},[68,8905,8906],{"class":78},"(p[j]",[68,8908,2587],{"class":316},[68,8910,8911],{"class":78},"p[j",[68,8913,2109],{"class":316},[68,8915,1846],{"class":85},[68,8917,6147],{"class":78},[68,8919,8920],{"class":70,"line":1521},[68,8921,6152],{"class":78},[68,8923,8924,8926,8928,8930],{"class":70,"line":3103},[68,8925,6157],{"class":316},[68,8927,5745],{"class":78},[68,8929,1685],{"class":316},[68,8931,8932],{"class":78},"p[j];\n",[68,8934,8935,8938,8940,8942,8944,8946],{"class":70,"line":3108},[68,8936,8937],{"class":78},"                p[j]",[68,8939,1685],{"class":316},[68,8941,8911],{"class":78},[68,8943,2109],{"class":316},[68,8945,1846],{"class":85},[68,8947,6180],{"class":78},[68,8949,8950,8953,8955,8957,8959,8961],{"class":70,"line":3114},[68,8951,8952],{"class":78},"                p[j",[68,8954,2109],{"class":316},[68,8956,1846],{"class":85},[68,8958,2567],{"class":78},[68,8960,1685],{"class":316},[68,8962,5770],{"class":78},[68,8964,8965],{"class":70,"line":3119},[68,8966,6200],{"class":78},[68,8968,8969],{"class":70,"line":3133},[68,8970,4019],{"class":78},[68,8972,8973],{"class":70,"line":3138},[68,8974,3677],{"class":78},[68,8976,8977],{"class":70,"line":3144},[68,8978,101],{"class":78},[68,8980,8981],{"class":70,"line":3165},[68,8982,3890],{"emptyLinePlaceholder":1567},[68,8984,8985,8987,8989],{"class":70,"line":3170},[68,8986,1643],{"class":316},[68,8988,3463],{"class":74},[68,8990,3466],{"class":78},[68,8992,8993],{"class":70,"line":3184},[68,8994,3038],{"class":78},[68,8996,8997],{"class":70,"line":3189},[68,8998,8999],{"class":302},"    \u002F\u002F 1.创建数组\n",[68,9001,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042,9044,9046,9048,9050,9052],{"class":70,"line":3218},[68,9003,3475],{"class":316},[68,9005,5452],{"class":78},[68,9007,313],{"class":85},[68,9009,2567],{"class":78},[68,9011,1685],{"class":316},[68,9013,2523],{"class":78},[68,9015,1922],{"class":85},[68,9017,2007],{"class":78},[68,9019,1709],{"class":85},[68,9021,2007],{"class":78},[68,9023,1973],{"class":85},[68,9025,2007],{"class":78},[68,9027,2049],{"class":85},[68,9029,2007],{"class":78},[68,9031,1846],{"class":85},[68,9033,2007],{"class":78},[68,9035,1715],{"class":85},[68,9037,2007],{"class":78},[68,9039,313],{"class":85},[68,9041,2007],{"class":78},[68,9043,2024],{"class":85},[68,9045,2007],{"class":78},[68,9047,1998],{"class":85},[68,9049,2007],{"class":78},[68,9051,1948],{"class":85},[68,9053,5485],{"class":78},[68,9055,9056,9058,9060,9062,9064],{"class":70,"line":3223},[68,9057,3475],{"class":316},[68,9059,8820],{"class":78},[68,9061,1685],{"class":316},[68,9063,313],{"class":85},[68,9065,95],{"class":78},[68,9067,9068,9070,9072,9074,9076],{"class":70,"line":3240},[68,9069,3475],{"class":316},[68,9071,8007],{"class":316},[68,9073,170],{"class":78},[68,9075,1685],{"class":316},[68,9077,8527],{"class":78},[68,9079,9080],{"class":70,"line":3245},[68,9081,9082],{"class":302},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[68,9084,9085,9088],{"class":70,"line":3250},[68,9086,9087],{"class":74},"    bubbleSort",[68,9089,9090],{"class":78},"(p,len);\n",[68,9092,9093],{"class":70,"line":3255},[68,9094,3890],{"emptyLinePlaceholder":1567},[68,9096,9097],{"class":70,"line":3269},[68,9098,9099],{"class":302},"    \u002F\u002F 3.打印排序后的数组\n",[68,9101,9102,9104,9106,9108,9110,9112,9114,9116,9118,9121,9123],{"class":70,"line":3274},[68,9103,4691],{"class":316},[68,9105,3149],{"class":78},[68,9107,1643],{"class":316},[68,9109,4522],{"class":78},[68,9111,1685],{"class":316},[68,9113,1248],{"class":85},[68,9115,4704],{"class":78},[68,9117,2537],{"class":316},[68,9119,9120],{"class":78},"len; i",[68,9122,3782],{"class":316},[68,9124,1646],{"class":78},[68,9126,9127],{"class":70,"line":4067},[68,9128,3520],{"class":78},[68,9130,9131,9133,9135,9137,9139,9142],{"class":70,"line":4081},[68,9132,4941],{"class":78},[68,9134,7908],{"class":316},[68,9136,170],{"class":78},[68,9138,2670],{"class":316},[68,9140,9141],{"class":1742},"\"\"",[68,9143,95],{"class":78},[68,9145,9146,9149,9151],{"class":70,"line":4089},[68,9147,9148],{"class":78},"        p",[68,9150,3782],{"class":316},[68,9152,95],{"class":78},[68,9154,9155],{"class":70,"line":4094},[68,9156,3677],{"class":78},[68,9158,9159],{"class":70,"line":4100},[68,9160,101],{"class":78},[1553,9162,9163],{},"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":63,"searchDepth":82,"depth":82,"links":9165},[9166,9167,9168,9169,9170,9171,9172,9173],{"id":7772,"depth":82,"text":7773},{"id":7938,"depth":82,"text":7939},{"id":8094,"depth":82,"text":8095},{"id":8172,"depth":82,"text":8173},{"id":8251,"depth":82,"text":8252},{"id":8350,"depth":82,"text":8351},{"id":8589,"depth":82,"text":8590},{"id":8767,"depth":82,"text":8768},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7761,"description":7769},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9180,"title":9181,"body":9182,"description":9189,"extension":1565,"meta":12162,"navigation":1567,"path":12163,"seo":12164,"stem":12165,"__hash__":12166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9183,"toc":12153},[9184,9187,9190,9194,9197,9200,9211,9549,9552,9556,9559,9566,9821,9825,9828,9831,9986,9990,9993,9996,10202,10206,10209,10512,10514,10522,10526,10529,10680,10682,10693,10750,10754,10759,11416,11424,11427,11521,11524,12144,12150],[10,9185,9181],{"id":9186},"_4结构体",[170,9188,9189],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9191,9193],{"id":9192},"_41结构体定义与使用","4.1结构体定义与使用",[170,9195,9196],{},"语法：struct 结构体名 {结构体成员列表}；",[170,9198,9199],{},"通过结构体创建变量的方式：",[24,9201,9202,9205,9208],{},[27,9203,9204],{},"struct 结构体名 变量名",[27,9206,9207],{},"struct 结构体名 变量名={成员1值，成员2值...}",[27,9209,9210],{},"定义结构体时顺便创建变量",[58,9212,9214],{"className":1628,"code":9213,"language":1630,"meta":63,"style":63},"#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",[65,9215,9216,9222,9232,9239,9244,9252,9256,9261,9265,9270,9275,9280,9287,9292,9299,9303,9310,9314,9318,9322,9326,9330,9334,9340,9344,9350,9358,9366,9370,9375,9380,9391,9396,9408,9419,9430,9435,9459,9464,9470,9497,9502,9508,9520,9532,9544],{"__ignoreMap":63},[68,9217,9218,9220],{"class":70,"line":71},[68,9219,3440],{"class":316},[68,9221,3443],{"class":1742},[68,9223,9224,9226,9228,9230],{"class":70,"line":82},[68,9225,3448],{"class":316},[68,9227,3451],{"class":316},[68,9229,3454],{"class":74},[68,9231,95],{"class":78},[68,9233,9234,9236],{"class":70,"line":98},[68,9235,3440],{"class":316},[68,9237,9238],{"class":1742},"\u003Cstring>\n",[68,9240,9241],{"class":70,"line":104},[68,9242,9243],{"class":302},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[68,9245,9246,9249],{"class":70,"line":112},[68,9247,9248],{"class":316},"struct",[68,9250,9251],{"class":74}," Student\n",[68,9253,9254],{"class":70,"line":124},[68,9255,3038],{"class":78},[68,9257,9258],{"class":70,"line":1496},[68,9259,9260],{"class":302},"    \u002F\u002F成员列表\n",[68,9262,9263],{"class":70,"line":1502},[68,9264,3890],{"emptyLinePlaceholder":1567},[68,9266,9267],{"class":70,"line":1510},[68,9268,9269],{"class":302},"    \u002F\u002F姓名\n",[68,9271,9272],{"class":70,"line":1521},[68,9273,9274],{"class":78},"    string name;\n",[68,9276,9277],{"class":70,"line":3103},[68,9278,9279],{"class":302},"    \u002F\u002F年龄\n",[68,9281,9282,9284],{"class":70,"line":3108},[68,9283,3475],{"class":316},[68,9285,9286],{"class":78}," age;\n",[68,9288,9289],{"class":70,"line":3114},[68,9290,9291],{"class":302},"    \u002F\u002F分数\n",[68,9293,9294,9296],{"class":70,"line":3119},[68,9295,3475],{"class":316},[68,9297,9298],{"class":78}," score;\n",[68,9300,9301],{"class":70,"line":3133},[68,9302,5485],{"class":78},[68,9304,9305,9307],{"class":70,"line":3138},[68,9306,9248],{"class":316},[68,9308,9309],{"class":74}," School\n",[68,9311,9312],{"class":70,"line":3144},[68,9313,3038],{"class":78},[68,9315,9316],{"class":70,"line":3165},[68,9317,9260],{"class":302},[68,9319,9320],{"class":70,"line":3170},[68,9321,3890],{"emptyLinePlaceholder":1567},[68,9323,9324],{"class":70,"line":3184},[68,9325,9269],{"class":302},[68,9327,9328],{"class":70,"line":3189},[68,9329,9274],{"class":78},[68,9331,9332],{"class":70,"line":3218},[68,9333,9279],{"class":302},[68,9335,9336,9338],{"class":70,"line":3223},[68,9337,3475],{"class":316},[68,9339,9286],{"class":78},[68,9341,9342],{"class":70,"line":3240},[68,9343,9291],{"class":302},[68,9345,9346,9348],{"class":70,"line":3245},[68,9347,3475],{"class":316},[68,9349,9298],{"class":78},[68,9351,9352,9355],{"class":70,"line":3250},[68,9353,9354],{"class":78},"} s3;",[68,9356,9357],{"class":302}," \u002F\u002F创建结构体时就创建了变量\n",[68,9359,9360,9362,9364],{"class":70,"line":3255},[68,9361,1643],{"class":316},[68,9363,3463],{"class":74},[68,9365,3466],{"class":78},[68,9367,9368],{"class":70,"line":3269},[68,9369,3038],{"class":78},[68,9371,9372],{"class":70,"line":3274},[68,9373,9374],{"class":302},"    \u002F\u002F2.通过学生类型创建具体学生\n",[68,9376,9377],{"class":70,"line":4067},[68,9378,9379],{"class":302},"    \u002F\u002F2.1 struct Student s1;\n",[68,9381,9382,9385,9388],{"class":70,"line":4081},[68,9383,9384],{"class":316},"    struct",[68,9386,9387],{"class":74}," Student",[68,9389,9390],{"class":78}," s1;\n",[68,9392,9393],{"class":70,"line":4089},[68,9394,9395],{"class":302},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[68,9397,9398,9401,9403,9406],{"class":70,"line":4094},[68,9399,9400],{"class":78},"    s1.name",[68,9402,1685],{"class":316},[68,9404,9405],{"class":1742},"\"张三\"",[68,9407,95],{"class":78},[68,9409,9410,9413,9415,9417],{"class":70,"line":4100},[68,9411,9412],{"class":78},"    s1.age",[68,9414,1685],{"class":316},[68,9416,2278],{"class":85},[68,9418,95],{"class":78},[68,9420,9421,9424,9426,9428],{"class":70,"line":4106},[68,9422,9423],{"class":78},"    s1.score",[68,9425,1685],{"class":316},[68,9427,1883],{"class":85},[68,9429,95],{"class":78},[68,9431,9432],{"class":70,"line":4111},[68,9433,9434],{"class":302},"    \u002F\u002F输出结果\n",[68,9436,9438,9440,9442,9445,9447,9450,9452,9455,9457],{"class":70,"line":9437},37,[68,9439,3043],{"class":78},[68,9441,2670],{"class":316},[68,9443,9444],{"class":78},"s1.name",[68,9446,2670],{"class":316},[68,9448,9449],{"class":78},"s1.age",[68,9451,2670],{"class":316},[68,9453,9454],{"class":78},"s1.score",[68,9456,2670],{"class":316},[68,9458,2692],{"class":78},[68,9460,9462],{"class":70,"line":9461},38,[68,9463,3890],{"emptyLinePlaceholder":1567},[68,9465,9467],{"class":70,"line":9466},39,[68,9468,9469],{"class":302},"    \u002F\u002F2.2 struct Student s2={...}\n",[68,9471,9473,9475,9477,9480,9482,9484,9487,9489,9491,9493,9495],{"class":70,"line":9472},40,[68,9474,9384],{"class":316},[68,9476,9387],{"class":74},[68,9478,9479],{"class":78}," s2",[68,9481,1685],{"class":316},[68,9483,2523],{"class":78},[68,9485,9486],{"class":1742},"\"王五\"",[68,9488,2007],{"class":78},[68,9490,2278],{"class":85},[68,9492,2007],{"class":78},[68,9494,1883],{"class":85},[68,9496,5485],{"class":78},[68,9498,9500],{"class":70,"line":9499},41,[68,9501,3890],{"emptyLinePlaceholder":1567},[68,9503,9505],{"class":70,"line":9504},42,[68,9506,9507],{"class":302},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[68,9509,9511,9514,9516,9518],{"class":70,"line":9510},43,[68,9512,9513],{"class":78},"    s3.name",[68,9515,1685],{"class":316},[68,9517,5168],{"class":1742},[68,9519,95],{"class":78},[68,9521,9523,9526,9528,9530],{"class":70,"line":9522},44,[68,9524,9525],{"class":78},"    s3.age",[68,9527,1685],{"class":316},[68,9529,2278],{"class":85},[68,9531,95],{"class":78},[68,9533,9535,9538,9540,9542],{"class":70,"line":9534},45,[68,9536,9537],{"class":78},"    s3.score",[68,9539,1685],{"class":316},[68,9541,333],{"class":85},[68,9543,95],{"class":78},[68,9545,9547],{"class":70,"line":9546},46,[68,9548,101],{"class":78},[170,9550,9551],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9553,9555],{"id":9554},"_42结构体数组","4.2结构体数组",[170,9557,9558],{},"将自定义的结构体放入到数组中方便维护",[170,9560,9561,9562,9565],{},"语法：struct 结构体名 数组名",[68,9563,9564],{},"元素个数","={ {}，{},...{} };",[58,9567,9569],{"className":1628,"code":9568,"language":1630,"meta":63,"style":63},"#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",[65,9570,9571,9577,9587,9593,9598,9604,9608,9612,9618,9624,9628,9632,9640,9644,9649,9664,9668,9684,9700,9704,9709,9725,9740,9755,9760,9786,9790,9813,9817],{"__ignoreMap":63},[68,9572,9573,9575],{"class":70,"line":71},[68,9574,3440],{"class":316},[68,9576,3443],{"class":1742},[68,9578,9579,9581,9583,9585],{"class":70,"line":82},[68,9580,3448],{"class":316},[68,9582,3451],{"class":316},[68,9584,3454],{"class":74},[68,9586,95],{"class":78},[68,9588,9589,9591],{"class":70,"line":98},[68,9590,3440],{"class":316},[68,9592,9238],{"class":1742},[68,9594,9595],{"class":70,"line":104},[68,9596,9597],{"class":302},"\u002F\u002F1.定义结构体\n",[68,9599,9600,9602],{"class":70,"line":112},[68,9601,9248],{"class":316},[68,9603,9251],{"class":74},[68,9605,9606],{"class":70,"line":124},[68,9607,3038],{"class":78},[68,9609,9610],{"class":70,"line":1496},[68,9611,9274],{"class":78},[68,9613,9614,9616],{"class":70,"line":1502},[68,9615,3475],{"class":316},[68,9617,9286],{"class":78},[68,9619,9620,9622],{"class":70,"line":1510},[68,9621,3475],{"class":316},[68,9623,9298],{"class":78},[68,9625,9626],{"class":70,"line":1521},[68,9627,3890],{"emptyLinePlaceholder":1567},[68,9629,9630],{"class":70,"line":3103},[68,9631,5485],{"class":78},[68,9633,9634,9636,9638],{"class":70,"line":3108},[68,9635,1643],{"class":316},[68,9637,3463],{"class":74},[68,9639,3466],{"class":78},[68,9641,9642],{"class":70,"line":3114},[68,9643,3038],{"class":78},[68,9645,9646],{"class":70,"line":3119},[68,9647,9648],{"class":302},"    \u002F\u002F2.创建结构体数组\n",[68,9650,9651,9653,9655,9658,9660,9662],{"class":70,"line":3133},[68,9652,9384],{"class":316},[68,9654,9387],{"class":74},[68,9656,9657],{"class":78}," stuArray[",[68,9659,1715],{"class":85},[68,9661,2567],{"class":78},[68,9663,6398],{"class":316},[68,9665,9666],{"class":70,"line":3138},[68,9667,3520],{"class":78},[68,9669,9670,9672,9674,9676,9678,9680,9682],{"class":70,"line":3144},[68,9671,6407],{"class":78},[68,9673,9405],{"class":1742},[68,9675,2007],{"class":78},[68,9677,2278],{"class":85},[68,9679,2007],{"class":78},[68,9681,1940],{"class":85},[68,9683,6420],{"class":78},[68,9685,9686,9688,9690,9692,9694,9696,9698],{"class":70,"line":3165},[68,9687,6407],{"class":78},[68,9689,5168],{"class":1742},[68,9691,2007],{"class":78},[68,9693,2203],{"class":85},[68,9695,2007],{"class":78},[68,9697,2203],{"class":85},[68,9699,101],{"class":78},[68,9701,9702],{"class":70,"line":3170},[68,9703,3677],{"class":78},[68,9705,9706],{"class":70,"line":3184},[68,9707,9708],{"class":302},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[68,9710,9711,9714,9716,9719,9721,9723],{"class":70,"line":3189},[68,9712,9713],{"class":78},"    stuArray[",[68,9715,1846],{"class":85},[68,9717,9718],{"class":78},"].name",[68,9720,1685],{"class":316},[68,9722,5191],{"class":1742},[68,9724,95],{"class":78},[68,9726,9727,9729,9731,9734,9736,9738],{"class":70,"line":3218},[68,9728,9713],{"class":78},[68,9730,1846],{"class":85},[68,9732,9733],{"class":78},"].age",[68,9735,1685],{"class":316},[68,9737,1715],{"class":85},[68,9739,95],{"class":78},[68,9741,9742,9744,9746,9749,9751,9753],{"class":70,"line":3223},[68,9743,9713],{"class":78},[68,9745,1846],{"class":85},[68,9747,9748],{"class":78},"].score",[68,9750,1685],{"class":316},[68,9752,1715],{"class":85},[68,9754,95],{"class":78},[68,9756,9757],{"class":70,"line":3240},[68,9758,9759],{"class":302},"    \u002F\u002F4.遍历结构体数组\n",[68,9761,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782,9784],{"class":70,"line":3245},[68,9763,4691],{"class":316},[68,9765,3149],{"class":78},[68,9767,1643],{"class":316},[68,9769,4522],{"class":78},[68,9771,1685],{"class":316},[68,9773,1248],{"class":85},[68,9775,4529],{"class":78},[68,9777,2537],{"class":316},[68,9779,1715],{"class":85},[68,9781,4529],{"class":78},[68,9783,3782],{"class":316},[68,9785,1646],{"class":78},[68,9787,9788],{"class":70,"line":3250},[68,9789,3520],{"class":78},[68,9791,9792,9794,9796,9799,9801,9804,9806,9809,9811],{"class":70,"line":3255},[68,9793,4941],{"class":78},[68,9795,2670],{"class":316},[68,9797,9798],{"class":78},"stuArray[i].name",[68,9800,2670],{"class":316},[68,9802,9803],{"class":78},"stuArray[i].age",[68,9805,2670],{"class":316},[68,9807,9808],{"class":78},"stuArray[i].score",[68,9810,2670],{"class":316},[68,9812,2692],{"class":78},[68,9814,9815],{"class":70,"line":3269},[68,9816,3677],{"class":78},[68,9818,9819],{"class":70,"line":3274},[68,9820,101],{"class":78},[14,9822,9824],{"id":9823},"_43结构体指针","4.3结构体指针",[170,9826,9827],{},"作用：通过指针访问结构体中的成员",[170,9829,9830],{},"利用操作符->可以通过结构体指针访问结构体属性",[58,9832,9834],{"className":1628,"code":9833,"language":1630,"meta":63,"style":63},"#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",[65,9835,9836,9842,9852,9858,9862,9868,9872,9876,9882,9888,9892,9900,9904,9909,9934,9939,9954,9959,9982],{"__ignoreMap":63},[68,9837,9838,9840],{"class":70,"line":71},[68,9839,3440],{"class":316},[68,9841,3443],{"class":1742},[68,9843,9844,9846,9848,9850],{"class":70,"line":82},[68,9845,3448],{"class":316},[68,9847,3451],{"class":316},[68,9849,3454],{"class":74},[68,9851,95],{"class":78},[68,9853,9854,9856],{"class":70,"line":98},[68,9855,3440],{"class":316},[68,9857,9238],{"class":1742},[68,9859,9860],{"class":70,"line":104},[68,9861,9597],{"class":302},[68,9863,9864,9866],{"class":70,"line":112},[68,9865,9248],{"class":316},[68,9867,9251],{"class":74},[68,9869,9870],{"class":70,"line":124},[68,9871,3038],{"class":78},[68,9873,9874],{"class":70,"line":1496},[68,9875,9274],{"class":78},[68,9877,9878,9880],{"class":70,"line":1502},[68,9879,3475],{"class":316},[68,9881,9286],{"class":78},[68,9883,9884,9886],{"class":70,"line":1510},[68,9885,3475],{"class":316},[68,9887,9298],{"class":78},[68,9889,9890],{"class":70,"line":1521},[68,9891,5485],{"class":78},[68,9893,9894,9896,9898],{"class":70,"line":3103},[68,9895,1643],{"class":316},[68,9897,3463],{"class":74},[68,9899,3466],{"class":78},[68,9901,9902],{"class":70,"line":3108},[68,9903,3038],{"class":78},[68,9905,9906],{"class":70,"line":3114},[68,9907,9908],{"class":302},"    \u002F\u002F创建学生结构体变量\n",[68,9910,9911,9913,9915,9918,9920,9922,9924,9926,9928,9930,9932],{"class":70,"line":3119},[68,9912,9384],{"class":316},[68,9914,9387],{"class":74},[68,9916,9917],{"class":78}," s",[68,9919,1685],{"class":316},[68,9921,2523],{"class":78},[68,9923,9405],{"class":1742},[68,9925,2007],{"class":78},[68,9927,2278],{"class":85},[68,9929,2007],{"class":78},[68,9931,3213],{"class":85},[68,9933,5485],{"class":78},[68,9935,9936],{"class":70,"line":3133},[68,9937,9938],{"class":302},"    \u002F\u002F通过指针指向结构体变量\n",[68,9940,9941,9943,9945,9947,9949,9951],{"class":70,"line":3138},[68,9942,9384],{"class":316},[68,9944,9387],{"class":74},[68,9946,8007],{"class":316},[68,9948,170],{"class":78},[68,9950,7828],{"class":316},[68,9952,9953],{"class":78},"s\n",[68,9955,9956],{"class":70,"line":3144},[68,9957,9958],{"class":302},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[68,9960,9961,9963,9965,9968,9970,9973,9975,9978,9980],{"class":70,"line":3165},[68,9962,3043],{"class":78},[68,9964,2670],{"class":316},[68,9966,9967],{"class":78},"p->name",[68,9969,2670],{"class":316},[68,9971,9972],{"class":78},"p->age",[68,9974,2670],{"class":316},[68,9976,9977],{"class":78},"p->score",[68,9979,2670],{"class":316},[68,9981,2692],{"class":78},[68,9983,9984],{"class":70,"line":3170},[68,9985,101],{"class":78},[14,9987,9989],{"id":9988},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[170,9991,9992],{},"作用：结构体中的成员可以是另一个结构体",[170,9994,9995],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[58,9997,9999],{"className":1628,"code":9998,"language":1630,"meta":63,"style":63},"#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",[65,10000,10001,10007,10017,10023,10028,10036,10040,10044,10050,10056,10060,10065,10072,10076,10083,10087,10093,10098,10102,10110,10114,10119,10124,10129,10140,10152,10163,10176,10187,10198],{"__ignoreMap":63},[68,10002,10003,10005],{"class":70,"line":71},[68,10004,3440],{"class":316},[68,10006,3443],{"class":1742},[68,10008,10009,10011,10013,10015],{"class":70,"line":82},[68,10010,3448],{"class":316},[68,10012,3451],{"class":316},[68,10014,3454],{"class":74},[68,10016,95],{"class":78},[68,10018,10019,10021],{"class":70,"line":98},[68,10020,3440],{"class":316},[68,10022,9238],{"class":1742},[68,10024,10025],{"class":70,"line":104},[68,10026,10027],{"class":302},"\u002F\u002F定义学生结构体\n",[68,10029,10030,10032,10034],{"class":70,"line":112},[68,10031,9248],{"class":316},[68,10033,9387],{"class":74},[68,10035,4164],{"class":78},[68,10037,10038],{"class":70,"line":124},[68,10039,3038],{"class":78},[68,10041,10042],{"class":70,"line":1496},[68,10043,9274],{"class":78},[68,10045,10046,10048],{"class":70,"line":1502},[68,10047,3475],{"class":316},[68,10049,9286],{"class":78},[68,10051,10052,10054],{"class":70,"line":1510},[68,10053,3475],{"class":316},[68,10055,9298],{"class":78},[68,10057,10058],{"class":70,"line":1521},[68,10059,101],{"class":78},[68,10061,10062],{"class":70,"line":3103},[68,10063,10064],{"class":302},"\u002F\u002F定义老师结构体\n",[68,10066,10067,10069],{"class":70,"line":3108},[68,10068,9248],{"class":316},[68,10070,10071],{"class":74}," Teacher\n",[68,10073,10074],{"class":70,"line":3114},[68,10075,3038],{"class":78},[68,10077,10078,10080],{"class":70,"line":3119},[68,10079,3475],{"class":316},[68,10081,10082],{"class":78}," id;\n",[68,10084,10085],{"class":70,"line":3133},[68,10086,9274],{"class":78},[68,10088,10089,10091],{"class":70,"line":3138},[68,10090,3475],{"class":316},[68,10092,9286],{"class":78},[68,10094,10095],{"class":70,"line":3144},[68,10096,10097],{"class":78},"    Student stu;\n",[68,10099,10100],{"class":70,"line":3165},[68,10101,101],{"class":78},[68,10103,10104,10106,10108],{"class":70,"line":3170},[68,10105,1643],{"class":316},[68,10107,3463],{"class":74},[68,10109,7467],{"class":78},[68,10111,10112],{"class":70,"line":3184},[68,10113,3038],{"class":78},[68,10115,10116],{"class":70,"line":3189},[68,10117,10118],{"class":302},"    \u002F\u002F结构体嵌套结构体\n",[68,10120,10121],{"class":70,"line":3218},[68,10122,10123],{"class":302},"    \u002F\u002F创建老师\n",[68,10125,10126],{"class":70,"line":3223},[68,10127,10128],{"class":78},"    Teacher t;\n",[68,10130,10131,10134,10136,10138],{"class":70,"line":3240},[68,10132,10133],{"class":78},"    t.id",[68,10135,1685],{"class":316},[68,10137,1940],{"class":85},[68,10139,95],{"class":78},[68,10141,10142,10145,10147,10150],{"class":70,"line":3245},[68,10143,10144],{"class":78},"    t.name",[68,10146,1685],{"class":316},[68,10148,10149],{"class":1742},"\"老王\"",[68,10151,95],{"class":78},[68,10153,10154,10157,10159,10161],{"class":70,"line":3250},[68,10155,10156],{"class":78},"    t.age",[68,10158,1685],{"class":316},[68,10160,2278],{"class":85},[68,10162,95],{"class":78},[68,10164,10165,10168,10170,10173],{"class":70,"line":3255},[68,10166,10167],{"class":78},"    t.stu.name",[68,10169,1685],{"class":316},[68,10171,10172],{"class":1742},"\"小王\"",[68,10174,10175],{"class":78},"；\n",[68,10177,10178,10181,10183,10185],{"class":70,"line":3269},[68,10179,10180],{"class":78},"    t.stu.age",[68,10182,1685],{"class":316},[68,10184,333],{"class":85},[68,10186,95],{"class":78},[68,10188,10189,10192,10194,10196],{"class":70,"line":3274},[68,10190,10191],{"class":78},"    t.stu.score",[68,10193,1685],{"class":316},[68,10195,1973],{"class":85},[68,10197,95],{"class":78},[68,10199,10200],{"class":70,"line":4067},[68,10201,101],{"class":78},[14,10203,10205],{"id":10204},"_45结构体做函数参数","4.5结构体做函数参数",[170,10207,10208],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[58,10210,10212],{"className":1628,"code":10211,"language":1630,"meta":63,"style":63},"#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",[65,10213,10214,10220,10230,10236,10242,10246,10250,10256,10262,10266,10271,10276,10293,10297,10330,10334,10339,10358,10362,10393,10397,10405,10409,10418,10430,10442,10454,10467,10475,10488,10500,10508],{"__ignoreMap":63},[68,10215,10216,10218],{"class":70,"line":71},[68,10217,3440],{"class":316},[68,10219,3443],{"class":1742},[68,10221,10222,10224,10226,10228],{"class":70,"line":82},[68,10223,3448],{"class":316},[68,10225,3451],{"class":316},[68,10227,3454],{"class":74},[68,10229,95],{"class":78},[68,10231,10232,10234],{"class":70,"line":98},[68,10233,3440],{"class":316},[68,10235,9238],{"class":1742},[68,10237,10238,10240],{"class":70,"line":104},[68,10239,9248],{"class":316},[68,10241,9251],{"class":74},[68,10243,10244],{"class":70,"line":112},[68,10245,3038],{"class":78},[68,10247,10248],{"class":70,"line":124},[68,10249,9274],{"class":78},[68,10251,10252,10254],{"class":70,"line":1496},[68,10253,3475],{"class":316},[68,10255,9286],{"class":78},[68,10257,10258,10260],{"class":70,"line":1502},[68,10259,3475],{"class":316},[68,10261,9298],{"class":78},[68,10263,10264],{"class":70,"line":1510},[68,10265,5485],{"class":78},[68,10267,10268],{"class":70,"line":1521},[68,10269,10270],{"class":302},"\u002F\u002F打印学生信息的函数\n",[68,10272,10273],{"class":70,"line":3103},[68,10274,10275],{"class":302},"\u002F\u002F值传递\n",[68,10277,10278,10280,10283,10285,10287,10289,10291],{"class":70,"line":3108},[68,10279,6853],{"class":316},[68,10281,10282],{"class":74}," printStudent1",[68,10284,1640],{"class":78},[68,10286,9248],{"class":316},[68,10288,9387],{"class":74},[68,10290,9917],{"class":6705},[68,10292,1646],{"class":78},[68,10294,10295],{"class":70,"line":3114},[68,10296,3038],{"class":78},[68,10298,10299,10301,10303,10306,10308,10311,10313,10316,10318,10320,10322,10325,10327],{"class":70,"line":3119},[68,10300,8018],{"class":78},[68,10302,2670],{"class":316},[68,10304,10305],{"class":78}," s.name ",[68,10307,2670],{"class":316},[68,10309,10310],{"class":1742}," \" \"",[68,10312,2937],{"class":316},[68,10314,10315],{"class":78}," s.age ",[68,10317,2670],{"class":316},[68,10319,10310],{"class":1742},[68,10321,2937],{"class":316},[68,10323,10324],{"class":78}," s.score ",[68,10326,2670],{"class":316},[68,10328,10329],{"class":78}," endl;\n",[68,10331,10332],{"class":70,"line":3133},[68,10333,101],{"class":78},[68,10335,10336],{"class":70,"line":3138},[68,10337,10338],{"class":302},"\u002F\u002F地址传递\n",[68,10340,10341,10343,10346,10348,10350,10352,10354,10356],{"class":70,"line":3144},[68,10342,6853],{"class":316},[68,10344,10345],{"class":74}," printStudent2",[68,10347,1640],{"class":78},[68,10349,9248],{"class":316},[68,10351,9387],{"class":74},[68,10353,8007],{"class":316},[68,10355,2323],{"class":6705},[68,10357,1646],{"class":78},[68,10359,10360],{"class":70,"line":3165},[68,10361,3038],{"class":78},[68,10363,10364,10366,10368,10371,10373,10375,10377,10380,10382,10384,10386,10389,10391],{"class":70,"line":3170},[68,10365,8018],{"class":78},[68,10367,2670],{"class":316},[68,10369,10370],{"class":78}," s->name ",[68,10372,2670],{"class":316},[68,10374,10310],{"class":1742},[68,10376,2937],{"class":316},[68,10378,10379],{"class":78}," s->age ",[68,10381,2670],{"class":316},[68,10383,10310],{"class":1742},[68,10385,2937],{"class":316},[68,10387,10388],{"class":78}," s->score ",[68,10390,2670],{"class":316},[68,10392,10329],{"class":78},[68,10394,10395],{"class":70,"line":3184},[68,10396,101],{"class":78},[68,10398,10399,10401,10403],{"class":70,"line":3189},[68,10400,1643],{"class":316},[68,10402,3463],{"class":74},[68,10404,3466],{"class":78},[68,10406,10407],{"class":70,"line":3218},[68,10408,3038],{"class":78},[68,10410,10411,10413,10415],{"class":70,"line":3223},[68,10412,9384],{"class":316},[68,10414,9387],{"class":74},[68,10416,10417],{"class":78}," s;\n",[68,10419,10420,10423,10425,10428],{"class":70,"line":3240},[68,10421,10422],{"class":78},"    s.name ",[68,10424,1685],{"class":316},[68,10426,10427],{"class":1742}," \"张三\"",[68,10429,95],{"class":78},[68,10431,10432,10435,10437,10440],{"class":70,"line":3245},[68,10433,10434],{"class":78},"    s.age ",[68,10436,1685],{"class":316},[68,10438,10439],{"class":85}," 20",[68,10441,95],{"class":78},[68,10443,10444,10447,10449,10452],{"class":70,"line":3250},[68,10445,10446],{"class":78},"    s.score ",[68,10448,1685],{"class":316},[68,10450,10451],{"class":85}," 85",[68,10453,95],{"class":78},[68,10455,10456,10458,10460,10463,10465],{"class":70,"line":3255},[68,10457,3043],{"class":78},[68,10459,2670],{"class":316},[68,10461,10462],{"class":1742},"\"值传递:\"",[68,10464,2670],{"class":316},[68,10466,2692],{"class":78},[68,10468,10469,10472],{"class":70,"line":3269},[68,10470,10471],{"class":74},"    printStudent1",[68,10473,10474],{"class":78},"(s);\n",[68,10476,10477,10479,10481,10484,10486],{"class":70,"line":3274},[68,10478,3043],{"class":78},[68,10480,2670],{"class":316},[68,10482,10483],{"class":1742},"\"地址传递:\"",[68,10485,2670],{"class":316},[68,10487,2692],{"class":78},[68,10489,10490,10493,10495,10497],{"class":70,"line":4067},[68,10491,10492],{"class":74},"    printStudent2",[68,10494,1640],{"class":78},[68,10496,1982],{"class":316},[68,10498,10499],{"class":78},"s); \n",[68,10501,10502,10504,10506],{"class":70,"line":4081},[68,10503,5580],{"class":316},[68,10505,5583],{"class":85},[68,10507,95],{"class":78},[68,10509,10510],{"class":70,"line":4089},[68,10511,101],{"class":78},[170,10513,1106],{},[24,10515,10516,10519],{},[27,10517,10518],{},"1.先定义结构体，不要在函数中写结构体的定义",[27,10520,10521],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10523,10525],{"id":10524},"_46结构体中const使用场景","4.6结构体中const使用场景",[170,10527,10528],{},"用const防止误操作",[58,10530,10532],{"className":1628,"code":10531,"language":1630,"meta":63,"style":63},"#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",[65,10533,10534,10540,10550,10556,10561,10565,10569,10575,10581,10585,10601,10605,10628,10632,10640,10644,10665,10672,10676],{"__ignoreMap":63},[68,10535,10536,10538],{"class":70,"line":71},[68,10537,3440],{"class":316},[68,10539,3443],{"class":1742},[68,10541,10542,10544,10546,10548],{"class":70,"line":82},[68,10543,3448],{"class":316},[68,10545,3451],{"class":316},[68,10547,3454],{"class":74},[68,10549,95],{"class":78},[68,10551,10552,10554],{"class":70,"line":98},[68,10553,3440],{"class":316},[68,10555,9238],{"class":1742},[68,10557,10558],{"class":70,"line":104},[68,10559,10560],{"class":78},"sctuct Student\n",[68,10562,10563],{"class":70,"line":112},[68,10564,3038],{"class":78},[68,10566,10567],{"class":70,"line":124},[68,10568,9274],{"class":78},[68,10570,10571,10573],{"class":70,"line":1496},[68,10572,3475],{"class":316},[68,10574,9286],{"class":78},[68,10576,10577,10579],{"class":70,"line":1502},[68,10578,3475],{"class":316},[68,10580,9298],{"class":78},[68,10582,10583],{"class":70,"line":1510},[68,10584,5485],{"class":78},[68,10586,10587,10589,10592,10594,10597,10599],{"class":70,"line":1521},[68,10588,6853],{"class":316},[68,10590,10591],{"class":74}," printStudents",[68,10593,1640],{"class":78},[68,10595,10596],{"class":74},"student",[68,10598,9917],{"class":6705},[68,10600,1646],{"class":78},[68,10602,10603],{"class":70,"line":3103},[68,10604,3038],{"class":78},[68,10606,10607,10609,10611,10614,10616,10619,10621,10624,10626],{"class":70,"line":3108},[68,10608,3043],{"class":78},[68,10610,2670],{"class":316},[68,10612,10613],{"class":78},"s.name",[68,10615,2670],{"class":316},[68,10617,10618],{"class":78},"s.age",[68,10620,2670],{"class":316},[68,10622,10623],{"class":78},"s.score",[68,10625,2670],{"class":316},[68,10627,2692],{"class":78},[68,10629,10630],{"class":70,"line":3114},[68,10631,101],{"class":78},[68,10633,10634,10636,10638],{"class":70,"line":3119},[68,10635,1643],{"class":316},[68,10637,3463],{"class":74},[68,10639,7467],{"class":78},[68,10641,10642],{"class":70,"line":3133},[68,10643,3038],{"class":78},[68,10645,10646,10649,10651,10653,10655,10657,10659,10661,10663],{"class":70,"line":3138},[68,10647,10648],{"class":78},"    Student s",[68,10650,1685],{"class":316},[68,10652,2523],{"class":78},[68,10654,9405],{"class":1742},[68,10656,2007],{"class":78},[68,10658,2278],{"class":85},[68,10660,2007],{"class":78},[68,10662,2278],{"class":85},[68,10664,5485],{"class":78},[68,10666,10667,10670],{"class":70,"line":3144},[68,10668,10669],{"class":74},"    printStudent",[68,10671,10474],{"class":78},[68,10673,10674],{"class":70,"line":3165},[68,10675,3890],{"emptyLinePlaceholder":1567},[68,10677,10678],{"class":70,"line":3170},[68,10679,101],{"class":78},[170,10681,1106],{},[24,10683,10684,10687,10690],{},[27,10685,10686],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[27,10688,10689],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[27,10691,10692],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[58,10694,10696],{"className":1628,"code":10695,"language":1630,"meta":63,"style":63},"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",[65,10697,10698,10717,10721,10726,10746],{"__ignoreMap":63},[68,10699,10700,10702,10704,10706,10708,10711,10713,10715],{"class":70,"line":71},[68,10701,6853],{"class":316},[68,10703,10591],{"class":74},[68,10705,1640],{"class":78},[68,10707,8281],{"class":316},[68,10709,10710],{"class":74}," student",[68,10712,8007],{"class":316},[68,10714,2323],{"class":6705},[68,10716,1646],{"class":78},[68,10718,10719],{"class":70,"line":82},[68,10720,3038],{"class":78},[68,10722,10723],{"class":70,"line":98},[68,10724,10725],{"class":302},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[68,10727,10728,10730,10732,10734,10736,10738,10740,10742,10744],{"class":70,"line":104},[68,10729,3043],{"class":78},[68,10731,2670],{"class":316},[68,10733,10613],{"class":78},[68,10735,2670],{"class":316},[68,10737,10618],{"class":78},[68,10739,2670],{"class":316},[68,10741,10623],{"class":78},[68,10743,2670],{"class":316},[68,10745,2692],{"class":78},[68,10747,10748],{"class":70,"line":112},[68,10749,101],{"class":78},[14,10751,10753],{"id":10752},"_47案例","4.7案例",[263,10755,10756],{},[27,10757,10758],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[58,10760,10762],{"className":1628,"code":10761,"language":1630,"meta":63,"style":63},"#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",[65,10763,10764,10770,10780,10786,10793,10797,10803,10807,10812,10818,10824,10828,10832,10838,10842,10847,10852,10865,10869,10874,10900,10904,10916,10943,10947,10959,10969,10973,10978,11007,11011,11023,11032,11059,11070,11080,11084,11088,11092,11097,11121,11125,11149,11153,11172,11198,11202,11227,11250,11274,11279,11284,11289,11298,11303,11309,11330,11336,11350,11356,11383,11392,11398,11406,11411],{"__ignoreMap":63},[68,10765,10766,10768],{"class":70,"line":71},[68,10767,3440],{"class":316},[68,10769,3443],{"class":1742},[68,10771,10772,10774,10776,10778],{"class":70,"line":82},[68,10773,3448],{"class":316},[68,10775,3451],{"class":316},[68,10777,3454],{"class":74},[68,10779,95],{"class":78},[68,10781,10782,10784],{"class":70,"line":98},[68,10783,3440],{"class":316},[68,10785,9238],{"class":1742},[68,10787,10788,10790],{"class":70,"line":104},[68,10789,3440],{"class":316},[68,10791,10792],{"class":1742},"\u003Cctime>\n",[68,10794,10795],{"class":70,"line":112},[68,10796,10027],{"class":302},[68,10798,10799,10801],{"class":70,"line":124},[68,10800,9248],{"class":316},[68,10802,9251],{"class":74},[68,10804,10805],{"class":70,"line":1496},[68,10806,3038],{"class":78},[68,10808,10809],{"class":70,"line":1502},[68,10810,10811],{"class":78},"    string sName;\n",[68,10813,10814,10816],{"class":70,"line":1510},[68,10815,3475],{"class":316},[68,10817,9286],{"class":78},[68,10819,10820,10822],{"class":70,"line":1521},[68,10821,3475],{"class":316},[68,10823,9298],{"class":78},[68,10825,10826],{"class":70,"line":3103},[68,10827,5485],{"class":78},[68,10829,10830],{"class":70,"line":3108},[68,10831,10064],{"class":302},[68,10833,10834,10836],{"class":70,"line":3114},[68,10835,9248],{"class":316},[68,10837,10071],{"class":74},[68,10839,10840],{"class":70,"line":3119},[68,10841,3038],{"class":78},[68,10843,10844],{"class":70,"line":3133},[68,10845,10846],{"class":78},"    string tName;\n",[68,10848,10849],{"class":70,"line":3138},[68,10850,10851],{"class":302},"    \u002F\u002F学生数组\n",[68,10853,10854,10856,10858,10861,10863],{"class":70,"line":3144},[68,10855,9384],{"class":316},[68,10857,9387],{"class":74},[68,10859,10860],{"class":78}," sArray[",[68,10862,1948],{"class":85},[68,10864,6180],{"class":78},[68,10866,10867],{"class":70,"line":3165},[68,10868,5485],{"class":78},[68,10870,10871],{"class":70,"line":3170},[68,10872,10873],{"class":302},"\u002F\u002F给老师和学生赋值的函数\n",[68,10875,10876,10878,10881,10883,10885,10888,10891,10894,10896,10898],{"class":70,"line":3184},[68,10877,6853],{"class":316},[68,10879,10880],{"class":74}," allocateSpace",[68,10882,1640],{"class":78},[68,10884,9248],{"class":316},[68,10886,10887],{"class":74}," Teacher",[68,10889,10890],{"class":6705}," tArray",[68,10892,10893],{"class":78},"[],",[68,10895,1643],{"class":316},[68,10897,8820],{"class":6705},[68,10899,1646],{"class":78},[68,10901,10902],{"class":70,"line":3189},[68,10903,3038],{"class":78},[68,10905,10906,10909,10911,10914],{"class":70,"line":3218},[68,10907,10908],{"class":78},"    string nameSeed",[68,10910,1685],{"class":316},[68,10912,10913],{"class":1742},"\"ABCDE\"",[68,10915,95],{"class":78},[68,10917,10918,10920,10922,10924,10927,10929,10931,10934,10936,10939,10941],{"class":70,"line":3223},[68,10919,4691],{"class":316},[68,10921,3149],{"class":78},[68,10923,1643],{"class":316},[68,10925,10926],{"class":78}," i ",[68,10928,1685],{"class":316},[68,10930,5583],{"class":85},[68,10932,10933],{"class":78},"; i ",[68,10935,2537],{"class":316},[68,10937,10938],{"class":78}," len; i",[68,10940,3782],{"class":316},[68,10942,1646],{"class":78},[68,10944,10945],{"class":70,"line":3240},[68,10946,3520],{"class":78},[68,10948,10949,10952,10954,10957],{"class":70,"line":3245},[68,10950,10951],{"class":78},"        tArray[i].tName ",[68,10953,1685],{"class":316},[68,10955,10956],{"class":1742}," \"Teacher_\"",[68,10958,95],{"class":78},[68,10960,10961,10963,10966],{"class":70,"line":3250},[68,10962,10951],{"class":78},[68,10964,10965],{"class":316},"+=",[68,10967,10968],{"class":78},"nameSeed[i];\n",[68,10970,10971],{"class":70,"line":3255},[68,10972,3890],{"emptyLinePlaceholder":1567},[68,10974,10975],{"class":70,"line":3269},[68,10976,10977],{"class":302},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[68,10979,10980,10982,10984,10986,10989,10991,10993,10996,10998,11000,11003,11005],{"class":70,"line":3274},[68,10981,4893],{"class":316},[68,10983,3149],{"class":78},[68,10985,1643],{"class":316},[68,10987,10988],{"class":78}," j ",[68,10990,1685],{"class":316},[68,10992,5583],{"class":85},[68,10994,10995],{"class":78},"; j ",[68,10997,2537],{"class":316},[68,10999,3638],{"class":85},[68,11001,11002],{"class":78},"; j",[68,11004,3782],{"class":316},[68,11006,1646],{"class":78},[68,11008,11009],{"class":70,"line":4067},[68,11010,4000],{"class":78},[68,11012,11013,11016,11018,11021],{"class":70,"line":4081},[68,11014,11015],{"class":78},"            tArray[i].sArray[j].sName ",[68,11017,1685],{"class":316},[68,11019,11020],{"class":1742}," \"Student_\"",[68,11022,95],{"class":78},[68,11024,11025,11027,11029],{"class":70,"line":4089},[68,11026,11015],{"class":78},[68,11028,10965],{"class":316},[68,11030,11031],{"class":78}," nameSeed[j];\n",[68,11033,11034,11037,11040,11042,11044,11046,11048,11050,11052,11054,11056],{"class":70,"line":4094},[68,11035,11036],{"class":316},"            int",[68,11038,11039],{"class":78}," random",[68,11041,1685],{"class":316},[68,11043,3914],{"class":74},[68,11045,3917],{"class":78},[68,11047,1957],{"class":316},[68,11049,2534],{"class":85},[68,11051,2109],{"class":316},[68,11053,2030],{"class":85},[68,11055,1694],{"class":78},[68,11057,11058],{"class":302},"\u002F\u002F40~99\n",[68,11060,11061,11064,11066,11068],{"class":70,"line":4100},[68,11062,11063],{"class":78},"            tArray[i].sArray[j].age ",[68,11065,1685],{"class":316},[68,11067,10439],{"class":85},[68,11069,95],{"class":78},[68,11071,11072,11075,11077],{"class":70,"line":4106},[68,11073,11074],{"class":78},"            tArray[i].sArray[j].score ",[68,11076,1685],{"class":316},[68,11078,11079],{"class":78}," random;\n",[68,11081,11082],{"class":70,"line":4111},[68,11083,4019],{"class":78},[68,11085,11086],{"class":70,"line":9437},[68,11087,3677],{"class":78},[68,11089,11090],{"class":70,"line":9461},[68,11091,101],{"class":78},[68,11093,11094],{"class":70,"line":9466},[68,11095,11096],{"class":302},"\u002F\u002F打印所有信息的函数\n",[68,11098,11099,11101,11104,11106,11108,11110,11112,11115,11117,11119],{"class":70,"line":9472},[68,11100,6853],{"class":316},[68,11102,11103],{"class":74}," printInfo",[68,11105,1640],{"class":78},[68,11107,9248],{"class":316},[68,11109,10887],{"class":74},[68,11111,10890],{"class":6705},[68,11113,11114],{"class":78},"[], ",[68,11116,1643],{"class":316},[68,11118,8820],{"class":6705},[68,11120,1646],{"class":78},[68,11122,11123],{"class":70,"line":9499},[68,11124,3038],{"class":78},[68,11126,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147],{"class":70,"line":9504},[68,11128,4691],{"class":316},[68,11130,3149],{"class":78},[68,11132,1643],{"class":316},[68,11134,10926],{"class":78},[68,11136,1685],{"class":316},[68,11138,5583],{"class":85},[68,11140,10933],{"class":78},[68,11142,2537],{"class":316},[68,11144,10938],{"class":78},[68,11146,3782],{"class":316},[68,11148,1646],{"class":78},[68,11150,11151],{"class":70,"line":9510},[68,11152,3520],{"class":78},[68,11154,11155,11158,11160,11163,11165,11168,11170],{"class":70,"line":9522},[68,11156,11157],{"class":78},"        cout ",[68,11159,2670],{"class":316},[68,11161,11162],{"class":1742}," \"Teacher: \"",[68,11164,2937],{"class":316},[68,11166,11167],{"class":78}," tArray[i].tName ",[68,11169,2670],{"class":316},[68,11171,10329],{"class":78},[68,11173,11174,11176,11178,11180,11182,11184,11186,11188,11190,11192,11194,11196],{"class":70,"line":9534},[68,11175,4893],{"class":316},[68,11177,3149],{"class":78},[68,11179,1643],{"class":316},[68,11181,10988],{"class":78},[68,11183,1685],{"class":316},[68,11185,5583],{"class":85},[68,11187,10995],{"class":78},[68,11189,2537],{"class":316},[68,11191,3638],{"class":85},[68,11193,11002],{"class":78},[68,11195,3782],{"class":316},[68,11197,1646],{"class":78},[68,11199,11200],{"class":70,"line":9546},[68,11201,4000],{"class":78},[68,11203,11205,11208,11210,11213,11215,11218,11220,11223,11225],{"class":70,"line":11204},47,[68,11206,11207],{"class":78},"            cout ",[68,11209,2670],{"class":316},[68,11211,11212],{"class":1742}," \"",[68,11214,2727],{"class":85},[68,11216,11217],{"class":1742},"Student: \"",[68,11219,2937],{"class":316},[68,11221,11222],{"class":78}," tArray[i].sArray[j].sName",[68,11224,2670],{"class":316},[68,11226,2692],{"class":78},[68,11228,11230,11232,11234,11236,11238,11241,11243,11246,11248],{"class":70,"line":11229},48,[68,11231,11207],{"class":78},[68,11233,2670],{"class":316},[68,11235,11212],{"class":1742},[68,11237,2727],{"class":85},[68,11239,11240],{"class":1742},"Age: \"",[68,11242,2937],{"class":316},[68,11244,11245],{"class":78}," tArray[i].sArray[j].age ",[68,11247,2670],{"class":316},[68,11249,10329],{"class":78},[68,11251,11253,11255,11257,11259,11261,11264,11266,11269,11271],{"class":70,"line":11252},49,[68,11254,11207],{"class":78},[68,11256,2670],{"class":316},[68,11258,11212],{"class":1742},[68,11260,2727],{"class":85},[68,11262,11263],{"class":1742},"Score: \"",[68,11265,2937],{"class":316},[68,11267,11268],{"class":78}," tArray[i].sArray[j].score ",[68,11270,2670],{"class":316},[68,11272,11273],{"class":78}," endl;   \n",[68,11275,11277],{"class":70,"line":11276},50,[68,11278,4019],{"class":78},[68,11280,11282],{"class":70,"line":11281},51,[68,11283,3677],{"class":78},[68,11285,11287],{"class":70,"line":11286},52,[68,11288,101],{"class":78},[68,11290,11292,11294,11296],{"class":70,"line":11291},53,[68,11293,1643],{"class":316},[68,11295,3463],{"class":74},[68,11297,3466],{"class":78},[68,11299,11301],{"class":70,"line":11300},54,[68,11302,3038],{"class":78},[68,11304,11306],{"class":70,"line":11305},55,[68,11307,11308],{"class":302},"    \u002F\u002F随机数种子\n",[68,11310,11312,11314,11316,11318,11320,11322,11324,11326,11328],{"class":70,"line":11311},56,[68,11313,3863],{"class":74},[68,11315,3866],{"class":78},[68,11317,3869],{"class":316},[68,11319,3872],{"class":316},[68,11321,2058],{"class":78},[68,11323,3877],{"class":74},[68,11325,1640],{"class":78},[68,11327,3882],{"class":85},[68,11329,3885],{"class":78},[68,11331,11333],{"class":70,"line":11332},57,[68,11334,11335],{"class":302},"    \u002F\u002F1.创建3名老师的数组\n",[68,11337,11339,11341,11343,11346,11348],{"class":70,"line":11338},58,[68,11340,9384],{"class":316},[68,11342,10887],{"class":74},[68,11344,11345],{"class":78}," tArray[",[68,11347,1709],{"class":85},[68,11349,6180],{"class":78},[68,11351,11353],{"class":70,"line":11352},59,[68,11354,11355],{"class":302},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[68,11357,11359,11361,11364,11366,11369,11372,11374,11376,11379,11381],{"class":70,"line":11358},60,[68,11360,3475],{"class":316},[68,11362,11363],{"class":78}," len ",[68,11365,1685],{"class":316},[68,11367,11368],{"class":316}," sizeof",[68,11370,11371],{"class":78},"(tArray) ",[68,11373,2212],{"class":316},[68,11375,11368],{"class":316},[68,11377,11378],{"class":78},"(tArray[",[68,11380,1248],{"class":85},[68,11382,5346],{"class":78},[68,11384,11386,11389],{"class":70,"line":11385},61,[68,11387,11388],{"class":74},"    allocateSpace",[68,11390,11391],{"class":78},"(tArray, len);\n",[68,11393,11395],{"class":70,"line":11394},62,[68,11396,11397],{"class":302},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[68,11399,11401,11404],{"class":70,"line":11400},63,[68,11402,11403],{"class":74},"    printInfo",[68,11405,11391],{"class":78},[68,11407,11409],{"class":70,"line":11408},64,[68,11410,3890],{"emptyLinePlaceholder":1567},[68,11412,11414],{"class":70,"line":11413},65,[68,11415,101],{"class":78},[263,11417,11418],{"start":82},[27,11419,11420,11423],{},[268,11421,11422],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[170,11425,11426],{},"五名英雄信息如下：",[58,11428,11432],{"className":11429,"code":11430,"language":11431,"meta":63,"style":63},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[65,11433,11434,11452,11469,11486,11503],{"__ignoreMap":63},[68,11435,11436,11438,11441,11443,11445,11447,11450],{"class":70,"line":71},[68,11437,6407],{"class":78},[68,11439,11440],{"class":1742},"\"刘备\"",[68,11442,2007],{"class":78},[68,11444,2402],{"class":85},[68,11446,2007],{"class":78},[68,11448,11449],{"class":1742},"\"男\"",[68,11451,6420],{"class":78},[68,11453,11454,11456,11459,11461,11463,11465,11467],{"class":70,"line":82},[68,11455,6407],{"class":78},[68,11457,11458],{"class":1742},"\"关羽\"",[68,11460,2007],{"class":78},[68,11462,2377],{"class":85},[68,11464,2007],{"class":78},[68,11466,11449],{"class":1742},[68,11468,6420],{"class":78},[68,11470,11471,11473,11476,11478,11480,11482,11484],{"class":70,"line":98},[68,11472,6407],{"class":78},[68,11474,11475],{"class":1742},"\"张飞\"",[68,11477,2007],{"class":78},[68,11479,333],{"class":85},[68,11481,2007],{"class":78},[68,11483,11449],{"class":1742},[68,11485,6420],{"class":78},[68,11487,11488,11490,11493,11495,11497,11499,11501],{"class":70,"line":104},[68,11489,6407],{"class":78},[68,11491,11492],{"class":1742},"\"赵云\"",[68,11494,2007],{"class":78},[68,11496,2352],{"class":85},[68,11498,2007],{"class":78},[68,11500,11449],{"class":1742},[68,11502,6420],{"class":78},[68,11504,11505,11507,11510,11512,11514,11516,11519],{"class":70,"line":112},[68,11506,6407],{"class":78},[68,11508,11509],{"class":1742},"\"貂蝉\"",[68,11511,2007],{"class":78},[68,11513,2303],{"class":85},[68,11515,2007],{"class":78},[68,11517,11518],{"class":1742},"\"女\"",[68,11520,6420],{"class":78},[170,11522,11523],{},"代码：",[58,11525,11527],{"className":1628,"code":11526,"language":1630,"meta":63,"style":63},"#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",[65,11528,11529,11535,11545,11551,11558,11562,11566,11572,11577,11581,11586,11609,11613,11638,11642,11675,11680,11709,11714,11729,11755,11775,11780,11785,11789,11793,11798,11820,11824,11848,11852,11914,11918,11922,11930,11934,11939,11950,11954,11970,11986,12002,12018,12034,12038,12058,12080,12085,12098,12105,12110,12116,12121,12134,12140],{"__ignoreMap":63},[68,11530,11531,11533],{"class":70,"line":71},[68,11532,3440],{"class":316},[68,11534,3443],{"class":1742},[68,11536,11537,11539,11541,11543],{"class":70,"line":82},[68,11538,3448],{"class":316},[68,11540,3451],{"class":316},[68,11542,3454],{"class":74},[68,11544,95],{"class":78},[68,11546,11547,11549],{"class":70,"line":98},[68,11548,3440],{"class":316},[68,11550,9238],{"class":1742},[68,11552,11553,11555],{"class":70,"line":104},[68,11554,9248],{"class":316},[68,11556,11557],{"class":74}," Sanguo\n",[68,11559,11560],{"class":70,"line":112},[68,11561,3038],{"class":78},[68,11563,11564],{"class":70,"line":124},[68,11565,9274],{"class":78},[68,11567,11568,11570],{"class":70,"line":1496},[68,11569,3475],{"class":316},[68,11571,9286],{"class":78},[68,11573,11574],{"class":70,"line":1502},[68,11575,11576],{"class":78},"    string gender;\n",[68,11578,11579],{"class":70,"line":1510},[68,11580,5485],{"class":78},[68,11582,11583],{"class":70,"line":1521},[68,11584,11585],{"class":302},"\u002F\u002F定义排序函数\n",[68,11587,11588,11590,11592,11594,11597,11599,11601,11603,11605,11607],{"class":70,"line":3103},[68,11589,6853],{"class":316},[68,11591,8805],{"class":74},[68,11593,1640],{"class":78},[68,11595,11596],{"class":74},"Sanguo",[68,11598,8007],{"class":316},[68,11600,2323],{"class":6705},[68,11602,2007],{"class":78},[68,11604,1643],{"class":316},[68,11606,8820],{"class":6705},[68,11608,1646],{"class":78},[68,11610,11611],{"class":70,"line":3108},[68,11612,3038],{"class":78},[68,11614,11615,11617,11619,11621,11623,11625,11627,11629,11631,11634,11636],{"class":70,"line":3114},[68,11616,4691],{"class":316},[68,11618,1640],{"class":78},[68,11620,1643],{"class":316},[68,11622,4522],{"class":78},[68,11624,1685],{"class":316},[68,11626,1248],{"class":85},[68,11628,4529],{"class":78},[68,11630,2537],{"class":316},[68,11632,11633],{"class":78},"len;i",[68,11635,3782],{"class":316},[68,11637,1646],{"class":78},[68,11639,11640],{"class":70,"line":3119},[68,11641,3520],{"class":78},[68,11643,11644,11647,11649,11651,11653,11655,11657,11659,11661,11663,11665,11667,11669,11671,11673],{"class":70,"line":3133},[68,11645,11646],{"class":316},"     for",[68,11648,3149],{"class":78},[68,11650,1643],{"class":316},[68,11652,4900],{"class":78},[68,11654,1685],{"class":316},[68,11656,1248],{"class":85},[68,11658,4907],{"class":78},[68,11660,2537],{"class":316},[68,11662,8847],{"class":78},[68,11664,2160],{"class":316},[68,11666,1846],{"class":85},[68,11668,2160],{"class":316},[68,11670,5040],{"class":78},[68,11672,3782],{"class":316},[68,11674,1646],{"class":78},[68,11676,11677],{"class":70,"line":3138},[68,11678,11679],{"class":78},"     {\n",[68,11681,11682,11685,11688,11690,11693,11695,11698,11700,11702,11704,11706],{"class":70,"line":3144},[68,11683,11684],{"class":316},"         if",[68,11686,11687],{"class":78}," ((s",[68,11689,2109],{"class":316},[68,11691,11692],{"class":78},"j)->age ",[68,11694,2587],{"class":316},[68,11696,11697],{"class":78}," (s",[68,11699,2109],{"class":316},[68,11701,2095],{"class":78},[68,11703,2109],{"class":316},[68,11705,1846],{"class":85},[68,11707,11708],{"class":78},")->age)\n",[68,11710,11711],{"class":70,"line":3165},[68,11712,11713],{"class":78},"         {\n",[68,11715,11716,11719,11721,11724,11726],{"class":70,"line":3170},[68,11717,11718],{"class":78},"             Sanguo temp",[68,11720,8642],{"class":316},[68,11722,11723],{"class":78},"(s",[68,11725,2109],{"class":316},[68,11727,11728],{"class":78},"j);\n",[68,11730,11731,11734,11736,11738,11741,11743,11745,11747,11749,11751,11753],{"class":70,"line":3184},[68,11732,11733],{"class":316},"             *",[68,11735,11723],{"class":78},[68,11737,2109],{"class":316},[68,11739,11740],{"class":78},"j)",[68,11742,8642],{"class":316},[68,11744,11723],{"class":78},[68,11746,2109],{"class":316},[68,11748,2095],{"class":78},[68,11750,2109],{"class":316},[68,11752,1846],{"class":85},[68,11754,4209],{"class":78},[68,11756,11757,11759,11761,11763,11765,11767,11769,11771,11773],{"class":70,"line":3189},[68,11758,11733],{"class":316},[68,11760,11723],{"class":78},[68,11762,2109],{"class":316},[68,11764,2095],{"class":78},[68,11766,2109],{"class":316},[68,11768,1846],{"class":85},[68,11770,2058],{"class":78},[68,11772,1685],{"class":316},[68,11774,5770],{"class":78},[68,11776,11777],{"class":70,"line":3218},[68,11778,11779],{"class":78},"         }\n",[68,11781,11782],{"class":70,"line":3223},[68,11783,11784],{"class":78},"     }\n",[68,11786,11787],{"class":70,"line":3240},[68,11788,3677],{"class":78},[68,11790,11791],{"class":70,"line":3245},[68,11792,101],{"class":78},[68,11794,11795],{"class":70,"line":3250},[68,11796,11797],{"class":302},"\u002F\u002F定义打印函数\n",[68,11799,11800,11802,11804,11806,11808,11810,11812,11814,11816,11818],{"class":70,"line":3255},[68,11801,6853],{"class":316},[68,11803,11103],{"class":74},[68,11805,1640],{"class":78},[68,11807,11596],{"class":74},[68,11809,8007],{"class":316},[68,11811,2323],{"class":6705},[68,11813,2007],{"class":78},[68,11815,1643],{"class":316},[68,11817,8820],{"class":6705},[68,11819,1646],{"class":78},[68,11821,11822],{"class":70,"line":3269},[68,11823,3038],{"class":78},[68,11825,11826,11828,11830,11832,11834,11836,11838,11840,11842,11844,11846],{"class":70,"line":3274},[68,11827,4691],{"class":316},[68,11829,3149],{"class":78},[68,11831,1643],{"class":316},[68,11833,4522],{"class":78},[68,11835,1685],{"class":316},[68,11837,1248],{"class":85},[68,11839,4529],{"class":78},[68,11841,2537],{"class":316},[68,11843,11633],{"class":78},[68,11845,3782],{"class":316},[68,11847,1646],{"class":78},[68,11849,11850],{"class":70,"line":4067},[68,11851,3520],{"class":78},[68,11853,11854,11856,11858,11860,11862,11865,11867,11869,11871,11874,11876,11878,11880,11883,11885,11887,11889,11892,11894,11896,11898,11901,11903,11905,11907,11910,11912],{"class":70,"line":4081},[68,11855,4941],{"class":78},[68,11857,2670],{"class":316},[68,11859,1880],{"class":1742},[68,11861,2727],{"class":85},[68,11863,11864],{"class":1742},"姓名：\"",[68,11866,2670],{"class":316},[68,11868,11723],{"class":78},[68,11870,2109],{"class":316},[68,11872,11873],{"class":78},"i)->name",[68,11875,2670],{"class":316},[68,11877,1880],{"class":1742},[68,11879,2727],{"class":85},[68,11881,11882],{"class":1742},"年龄：\"",[68,11884,2670],{"class":316},[68,11886,11723],{"class":78},[68,11888,2109],{"class":316},[68,11890,11891],{"class":78},"i)->age",[68,11893,2670],{"class":316},[68,11895,1880],{"class":1742},[68,11897,2727],{"class":85},[68,11899,11900],{"class":1742},"性别：\"",[68,11902,2670],{"class":316},[68,11904,11723],{"class":78},[68,11906,2109],{"class":316},[68,11908,11909],{"class":78},"i)->gender",[68,11911,2670],{"class":316},[68,11913,2692],{"class":78},[68,11915,11916],{"class":70,"line":4089},[68,11917,3677],{"class":78},[68,11919,11920],{"class":70,"line":4094},[68,11921,101],{"class":78},[68,11923,11924,11926,11928],{"class":70,"line":4100},[68,11925,1643],{"class":316},[68,11927,3463],{"class":74},[68,11929,3466],{"class":78},[68,11931,11932],{"class":70,"line":4106},[68,11933,3038],{"class":78},[68,11935,11936],{"class":70,"line":4111},[68,11937,11938],{"class":302},"    \u002F\u002F定义结构体变量\n",[68,11940,11941,11944,11946,11948],{"class":70,"line":9437},[68,11942,11943],{"class":78},"    Sanguo s1[",[68,11945,1948],{"class":85},[68,11947,2567],{"class":78},[68,11949,6398],{"class":316},[68,11951,11952],{"class":70,"line":9461},[68,11953,3520],{"class":78},[68,11955,11956,11958,11960,11962,11964,11966,11968],{"class":70,"line":9466},[68,11957,6407],{"class":78},[68,11959,11440],{"class":1742},[68,11961,2007],{"class":78},[68,11963,2402],{"class":85},[68,11965,2007],{"class":78},[68,11967,11449],{"class":1742},[68,11969,6420],{"class":78},[68,11971,11972,11974,11976,11978,11980,11982,11984],{"class":70,"line":9472},[68,11973,6407],{"class":78},[68,11975,11458],{"class":1742},[68,11977,2007],{"class":78},[68,11979,2377],{"class":85},[68,11981,2007],{"class":78},[68,11983,11449],{"class":1742},[68,11985,6420],{"class":78},[68,11987,11988,11990,11992,11994,11996,11998,12000],{"class":70,"line":9499},[68,11989,6407],{"class":78},[68,11991,11475],{"class":1742},[68,11993,2007],{"class":78},[68,11995,333],{"class":85},[68,11997,2007],{"class":78},[68,11999,11449],{"class":1742},[68,12001,6420],{"class":78},[68,12003,12004,12006,12008,12010,12012,12014,12016],{"class":70,"line":9504},[68,12005,6407],{"class":78},[68,12007,11492],{"class":1742},[68,12009,2007],{"class":78},[68,12011,2352],{"class":85},[68,12013,2007],{"class":78},[68,12015,11449],{"class":1742},[68,12017,6420],{"class":78},[68,12019,12020,12022,12024,12026,12028,12030,12032],{"class":70,"line":9510},[68,12021,6407],{"class":78},[68,12023,11509],{"class":1742},[68,12025,2007],{"class":78},[68,12027,2303],{"class":85},[68,12029,2007],{"class":78},[68,12031,11518],{"class":1742},[68,12033,6420],{"class":78},[68,12035,12036],{"class":70,"line":9522},[68,12037,6441],{"class":78},[68,12039,12040,12042,12044,12046,12049,12051,12054,12056],{"class":70,"line":9534},[68,12041,3475],{"class":316},[68,12043,8820],{"class":78},[68,12045,5693],{"class":316},[68,12047,12048],{"class":78},"(s1)",[68,12050,5699],{"class":316},[68,12052,12053],{"class":78},"(s1[",[68,12055,1248],{"class":85},[68,12057,5346],{"class":78},[68,12059,12060,12063,12065,12068,12070,12073,12076,12078],{"class":70,"line":9546},[68,12061,12062],{"class":78},"    Sanguo ",[68,12064,2083],{"class":316},[68,12066,12067],{"class":78},"s ",[68,12069,1685],{"class":316},[68,12071,12072],{"class":316}," &",[68,12074,12075],{"class":78},"s1[",[68,12077,1248],{"class":85},[68,12079,6180],{"class":78},[68,12081,12082],{"class":70,"line":11204},[68,12083,12084],{"class":302},"    \u002F\u002F排序前：\n",[68,12086,12087,12089,12091,12094,12096],{"class":70,"line":11229},[68,12088,8018],{"class":78},[68,12090,2670],{"class":316},[68,12092,12093],{"class":1742}," \"排序前：\"",[68,12095,2937],{"class":316},[68,12097,10329],{"class":78},[68,12099,12100,12102],{"class":70,"line":11252},[68,12101,11403],{"class":74},[68,12103,12104],{"class":78},"(s,len);\n",[68,12106,12107],{"class":70,"line":11276},[68,12108,12109],{"class":302},"    \u002F\u002F调用排序函数\n",[68,12111,12112,12114],{"class":70,"line":11281},[68,12113,9087],{"class":74},[68,12115,12104],{"class":78},[68,12117,12118],{"class":70,"line":11286},[68,12119,12120],{"class":302},"    \u002F\u002F排序后\n",[68,12122,12123,12125,12127,12130,12132],{"class":70,"line":11291},[68,12124,8018],{"class":78},[68,12126,2670],{"class":316},[68,12128,12129],{"class":1742}," \"排序后：\"",[68,12131,2937],{"class":316},[68,12133,10329],{"class":78},[68,12135,12136,12138],{"class":70,"line":11300},[68,12137,11403],{"class":74},[68,12139,12104],{"class":78},[68,12141,12142],{"class":70,"line":11305},[68,12143,101],{"class":78},[170,12145,12146,12147,12149],{},"注意：使用指针时直接用传首地址**&s",[68,12148,1248],{},"**",[1553,12151,12152],{},"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":63,"searchDepth":82,"depth":82,"links":12154},[12155,12156,12157,12158,12159,12160,12161],{"id":9192,"depth":82,"text":9193},{"id":9554,"depth":82,"text":9555},{"id":9823,"depth":82,"text":9824},{"id":9988,"depth":82,"text":9989},{"id":10204,"depth":82,"text":10205},{"id":10524,"depth":82,"text":10525},{"id":10752,"depth":82,"text":10753},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9181,"description":9189},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12168,"title":12169,"body":12170,"description":63,"extension":1565,"meta":13513,"navigation":1567,"path":13514,"seo":13515,"stem":13516,"__hash__":13517},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12171,"toc":13507},[12172,12175,12179,12185,12199,12204,12207,12211,12218,12224,12227,12234,12240,12245,12248,12251,12254,12818,12821,12835,12839,12844,12860,13000,13003,13009,13012,13017,13025,13133,13136,13141,13144,13149,13152,13158,13161,13504],[10,12173,12169],{"id":12174},"_5程序内存模型",[14,12176,12178],{"id":12177},"_51内存分区模型","5.1内存分区模型",[170,12180,12181,12182],{},"C++程序在执行时，将内存大方向划分为",[268,12183,12184],{},"4个区域",[24,12186,12187,12190,12193,12196],{},[27,12188,12189],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[27,12191,12192],{},"全局区：存放全局变量和静态变量以及常量",[27,12194,12195],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[27,12197,12198],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[170,12200,12201],{},[268,12202,12203],{},"内存四区意义：",[170,12205,12206],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,12208,12210],{"id":12209},"_511程序运行前","5.1.1程序运行前",[170,12212,12213,12214,12217],{},"​\t在程序编译后，生成了exe可执行程序，",[268,12215,12216],{},"未执行该程序前","分为两个区域",[170,12219,12220,12221],{},"​\t",[268,12222,12223],{},"代码区：",[170,12225,12226],{},"​\t\t存放 CPU 执行的机器指令",[170,12228,12229,12230,12233],{},"​\t\t代码区是",[268,12231,12232],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[170,12235,12229,12236,12239],{},[268,12237,12238],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[170,12241,12220,12242],{},[268,12243,12244],{},"全局区：",[170,12246,12247],{},"​\t\t全局变量和静态变量存放在此.",[170,12249,12250],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[170,12252,12253],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[58,12255,12257],{"className":1628,"code":12256,"language":1630,"meta":63,"style":63},"\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",[65,12258,12259,12264,12277,12290,12294,12299,12314,12329,12333,12342,12346,12351,12364,12377,12381,12386,12412,12438,12442,12469,12495,12499,12504,12520,12535,12539,12565,12591,12595,12620,12645,12649,12675,12701,12705,12721,12736,12762,12788,12792,12802,12806,12814],{"__ignoreMap":63},[68,12260,12261],{"class":70,"line":71},[68,12262,12263],{"class":302},"\u002F\u002F全局变量\n",[68,12265,12266,12268,12271,12273,12275],{"class":70,"line":82},[68,12267,1643],{"class":316},[68,12269,12270],{"class":78}," g_a ",[68,12272,1685],{"class":316},[68,12274,3528],{"class":85},[68,12276,95],{"class":78},[68,12278,12279,12281,12284,12286,12288],{"class":70,"line":98},[68,12280,1643],{"class":316},[68,12282,12283],{"class":78}," g_b ",[68,12285,1685],{"class":316},[68,12287,3528],{"class":85},[68,12289,95],{"class":78},[68,12291,12292],{"class":70,"line":104},[68,12293,3890],{"emptyLinePlaceholder":1567},[68,12295,12296],{"class":70,"line":112},[68,12297,12298],{"class":302},"\u002F\u002F全局常量\n",[68,12300,12301,12303,12305,12308,12310,12312],{"class":70,"line":124},[68,12302,8281],{"class":316},[68,12304,3872],{"class":316},[68,12306,12307],{"class":78}," c_g_a ",[68,12309,1685],{"class":316},[68,12311,3528],{"class":85},[68,12313,95],{"class":78},[68,12315,12316,12318,12320,12323,12325,12327],{"class":70,"line":1496},[68,12317,8281],{"class":316},[68,12319,3872],{"class":316},[68,12321,12322],{"class":78}," c_g_b ",[68,12324,1685],{"class":316},[68,12326,3528],{"class":85},[68,12328,95],{"class":78},[68,12330,12331],{"class":70,"line":1502},[68,12332,3890],{"emptyLinePlaceholder":1567},[68,12334,12335,12337,12339],{"class":70,"line":1510},[68,12336,1643],{"class":316},[68,12338,3463],{"class":74},[68,12340,12341],{"class":78},"() {\n",[68,12343,12344],{"class":70,"line":1521},[68,12345,3890],{"emptyLinePlaceholder":1567},[68,12347,12348],{"class":70,"line":3103},[68,12349,12350],{"class":302},"    \u002F\u002F局部变量\n",[68,12352,12353,12355,12358,12360,12362],{"class":70,"line":3108},[68,12354,3475],{"class":316},[68,12356,12357],{"class":78}," a ",[68,12359,1685],{"class":316},[68,12361,3528],{"class":85},[68,12363,95],{"class":78},[68,12365,12366,12368,12371,12373,12375],{"class":70,"line":3114},[68,12367,3475],{"class":316},[68,12369,12370],{"class":78}," b ",[68,12372,1685],{"class":316},[68,12374,3528],{"class":85},[68,12376,95],{"class":78},[68,12378,12379],{"class":70,"line":3119},[68,12380,3890],{"emptyLinePlaceholder":1567},[68,12382,12383],{"class":70,"line":3133},[68,12384,12385],{"class":302},"    \u002F\u002F打印地址\n",[68,12387,12388,12390,12392,12395,12397,12399,12401,12403,12405,12408,12410],{"class":70,"line":3138},[68,12389,8018],{"class":78},[68,12391,2670],{"class":316},[68,12393,12394],{"class":1742}," \"局部变量a地址为： \"",[68,12396,2937],{"class":316},[68,12398,3149],{"class":78},[68,12400,1643],{"class":316},[68,12402,2058],{"class":78},[68,12404,1982],{"class":316},[68,12406,12407],{"class":78},"a ",[68,12409,2670],{"class":316},[68,12411,10329],{"class":78},[68,12413,12414,12416,12418,12421,12423,12425,12427,12429,12431,12434,12436],{"class":70,"line":3144},[68,12415,8018],{"class":78},[68,12417,2670],{"class":316},[68,12419,12420],{"class":1742}," \"局部变量b地址为： \"",[68,12422,2937],{"class":316},[68,12424,3149],{"class":78},[68,12426,1643],{"class":316},[68,12428,2058],{"class":78},[68,12430,1982],{"class":316},[68,12432,12433],{"class":78},"b ",[68,12435,2670],{"class":316},[68,12437,10329],{"class":78},[68,12439,12440],{"class":70,"line":3165},[68,12441,3890],{"emptyLinePlaceholder":1567},[68,12443,12444,12446,12448,12451,12453,12456,12458,12460,12462,12465,12467],{"class":70,"line":3170},[68,12445,8018],{"class":78},[68,12447,2670],{"class":316},[68,12449,12450],{"class":1742}," \"全局变量g_a地址为： \"",[68,12452,2937],{"class":316},[68,12454,12455],{"class":78},"  (",[68,12457,1643],{"class":316},[68,12459,2058],{"class":78},[68,12461,1982],{"class":316},[68,12463,12464],{"class":78},"g_a ",[68,12466,2670],{"class":316},[68,12468,10329],{"class":78},[68,12470,12471,12473,12475,12478,12480,12482,12484,12486,12488,12491,12493],{"class":70,"line":3184},[68,12472,8018],{"class":78},[68,12474,2670],{"class":316},[68,12476,12477],{"class":1742}," \"全局变量g_b地址为： \"",[68,12479,2937],{"class":316},[68,12481,12455],{"class":78},[68,12483,1643],{"class":316},[68,12485,2058],{"class":78},[68,12487,1982],{"class":316},[68,12489,12490],{"class":78},"g_b ",[68,12492,2670],{"class":316},[68,12494,10329],{"class":78},[68,12496,12497],{"class":70,"line":3189},[68,12498,3890],{"emptyLinePlaceholder":1567},[68,12500,12501],{"class":70,"line":3218},[68,12502,12503],{"class":302},"    \u002F\u002F静态变量\n",[68,12505,12506,12509,12511,12514,12516,12518],{"class":70,"line":3223},[68,12507,12508],{"class":316},"    static",[68,12510,3872],{"class":316},[68,12512,12513],{"class":78}," s_a ",[68,12515,1685],{"class":316},[68,12517,3528],{"class":85},[68,12519,95],{"class":78},[68,12521,12522,12524,12526,12529,12531,12533],{"class":70,"line":3240},[68,12523,12508],{"class":316},[68,12525,3872],{"class":316},[68,12527,12528],{"class":78}," s_b ",[68,12530,1685],{"class":316},[68,12532,3528],{"class":85},[68,12534,95],{"class":78},[68,12536,12537],{"class":70,"line":3245},[68,12538,3890],{"emptyLinePlaceholder":1567},[68,12540,12541,12543,12545,12548,12550,12552,12554,12556,12558,12561,12563],{"class":70,"line":3250},[68,12542,8018],{"class":78},[68,12544,2670],{"class":316},[68,12546,12547],{"class":1742}," \"静态变量s_a地址为： \"",[68,12549,2937],{"class":316},[68,12551,3149],{"class":78},[68,12553,1643],{"class":316},[68,12555,2058],{"class":78},[68,12557,1982],{"class":316},[68,12559,12560],{"class":78},"s_a ",[68,12562,2670],{"class":316},[68,12564,10329],{"class":78},[68,12566,12567,12569,12571,12574,12576,12578,12580,12582,12584,12587,12589],{"class":70,"line":3255},[68,12568,8018],{"class":78},[68,12570,2670],{"class":316},[68,12572,12573],{"class":1742}," \"静态变量s_b地址为： \"",[68,12575,2937],{"class":316},[68,12577,3149],{"class":78},[68,12579,1643],{"class":316},[68,12581,2058],{"class":78},[68,12583,1982],{"class":316},[68,12585,12586],{"class":78},"s_b ",[68,12588,2670],{"class":316},[68,12590,10329],{"class":78},[68,12592,12593],{"class":70,"line":3269},[68,12594,3890],{"emptyLinePlaceholder":1567},[68,12596,12597,12599,12601,12604,12606,12608,12610,12612,12614,12616,12618],{"class":70,"line":3274},[68,12598,8018],{"class":78},[68,12600,2670],{"class":316},[68,12602,12603],{"class":1742}," \"字符串常量地址为： \"",[68,12605,2937],{"class":316},[68,12607,3149],{"class":78},[68,12609,1643],{"class":316},[68,12611,2058],{"class":78},[68,12613,1982],{"class":316},[68,12615,2687],{"class":1742},[68,12617,2937],{"class":316},[68,12619,10329],{"class":78},[68,12621,12622,12624,12626,12628,12630,12632,12634,12636,12638,12641,12643],{"class":70,"line":4067},[68,12623,8018],{"class":78},[68,12625,2670],{"class":316},[68,12627,12603],{"class":1742},[68,12629,2937],{"class":316},[68,12631,3149],{"class":78},[68,12633,1643],{"class":316},[68,12635,2058],{"class":78},[68,12637,1982],{"class":316},[68,12639,12640],{"class":1742},"\"hello world1\"",[68,12642,2937],{"class":316},[68,12644,10329],{"class":78},[68,12646,12647],{"class":70,"line":4081},[68,12648,3890],{"emptyLinePlaceholder":1567},[68,12650,12651,12653,12655,12658,12660,12662,12664,12666,12668,12671,12673],{"class":70,"line":4089},[68,12652,8018],{"class":78},[68,12654,2670],{"class":316},[68,12656,12657],{"class":1742}," \"全局常量c_g_a地址为： \"",[68,12659,2937],{"class":316},[68,12661,3149],{"class":78},[68,12663,1643],{"class":316},[68,12665,2058],{"class":78},[68,12667,1982],{"class":316},[68,12669,12670],{"class":78},"c_g_a ",[68,12672,2670],{"class":316},[68,12674,10329],{"class":78},[68,12676,12677,12679,12681,12684,12686,12688,12690,12692,12694,12697,12699],{"class":70,"line":4094},[68,12678,8018],{"class":78},[68,12680,2670],{"class":316},[68,12682,12683],{"class":1742}," \"全局常量c_g_b地址为： \"",[68,12685,2937],{"class":316},[68,12687,3149],{"class":78},[68,12689,1643],{"class":316},[68,12691,2058],{"class":78},[68,12693,1982],{"class":316},[68,12695,12696],{"class":78},"c_g_b ",[68,12698,2670],{"class":316},[68,12700,10329],{"class":78},[68,12702,12703],{"class":70,"line":4100},[68,12704,3890],{"emptyLinePlaceholder":1567},[68,12706,12707,12710,12712,12715,12717,12719],{"class":70,"line":4106},[68,12708,12709],{"class":316},"    const",[68,12711,3872],{"class":316},[68,12713,12714],{"class":78}," c_l_a ",[68,12716,1685],{"class":316},[68,12718,3528],{"class":85},[68,12720,95],{"class":78},[68,12722,12723,12725,12727,12730,12732,12734],{"class":70,"line":4111},[68,12724,12709],{"class":316},[68,12726,3872],{"class":316},[68,12728,12729],{"class":78}," c_l_b ",[68,12731,1685],{"class":316},[68,12733,3528],{"class":85},[68,12735,95],{"class":78},[68,12737,12738,12740,12742,12745,12747,12749,12751,12753,12755,12758,12760],{"class":70,"line":9437},[68,12739,8018],{"class":78},[68,12741,2670],{"class":316},[68,12743,12744],{"class":1742}," \"局部常量c_l_a地址为： \"",[68,12746,2937],{"class":316},[68,12748,3149],{"class":78},[68,12750,1643],{"class":316},[68,12752,2058],{"class":78},[68,12754,1982],{"class":316},[68,12756,12757],{"class":78},"c_l_a ",[68,12759,2670],{"class":316},[68,12761,10329],{"class":78},[68,12763,12764,12766,12768,12771,12773,12775,12777,12779,12781,12784,12786],{"class":70,"line":9461},[68,12765,8018],{"class":78},[68,12767,2670],{"class":316},[68,12769,12770],{"class":1742}," \"局部常量c_l_b地址为： \"",[68,12772,2937],{"class":316},[68,12774,3149],{"class":78},[68,12776,1643],{"class":316},[68,12778,2058],{"class":78},[68,12780,1982],{"class":316},[68,12782,12783],{"class":78},"c_l_b ",[68,12785,2670],{"class":316},[68,12787,10329],{"class":78},[68,12789,12790],{"class":70,"line":9466},[68,12791,3890],{"emptyLinePlaceholder":1567},[68,12793,12794,12796,12798,12800],{"class":70,"line":9472},[68,12795,3793],{"class":74},[68,12797,1640],{"class":78},[68,12799,3798],{"class":1742},[68,12801,4209],{"class":78},[68,12803,12804],{"class":70,"line":9499},[68,12805,3890],{"emptyLinePlaceholder":1567},[68,12807,12808,12810,12812],{"class":70,"line":9504},[68,12809,5580],{"class":316},[68,12811,5583],{"class":85},[68,12813,95],{"class":78},[68,12815,12816],{"class":70,"line":9510},[68,12817,101],{"class":78},[170,12819,12820],{},"总结：",[24,12822,12823,12826,12829,12832],{},[27,12824,12825],{},"c++中程序运行前分为全局区和代码区",[27,12827,12828],{},"代码区特点是共享和只读",[27,12830,12831],{},"全局区中存放全局变量、静态变量、常量",[27,12833,12834],{},"常量区中存放const修饰的全局常量和字符串常量",[19,12836,12838],{"id":12837},"_512程序运行后","5.1.2程序运行后",[263,12840,12841],{},[27,12842,12843],{},"栈区：",[24,12845,12846,12853],{},[27,12847,12848,12849,12852],{},"由编译器自动分配释放, 存放",[268,12850,12851],{},"函数的参数值,局部变量","等",[27,12854,12855,12856,12859],{},"注意事项：",[268,12857,12858],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[58,12861,12863],{"className":1628,"code":12862,"language":1630,"meta":63,"style":63},"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",[65,12864,12865,12876,12880,12895,12907,12911,12915,12923,12928,12943,12961,12978,12988,12996],{"__ignoreMap":63},[68,12866,12867,12869,12871,12874],{"class":70,"line":71},[68,12868,1643],{"class":316},[68,12870,8007],{"class":316},[68,12872,12873],{"class":74}," func",[68,12875,3466],{"class":78},[68,12877,12878],{"class":70,"line":82},[68,12879,3038],{"class":78},[68,12881,12882,12884,12886,12888,12890,12892],{"class":70,"line":98},[68,12883,3475],{"class":316},[68,12885,12357],{"class":78},[68,12887,1685],{"class":316},[68,12889,3528],{"class":85},[68,12891,1694],{"class":78},[68,12893,12894],{"class":302}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[68,12896,12897,12899,12901,12904],{"class":70,"line":104},[68,12898,5580],{"class":316},[68,12900,12072],{"class":316},[68,12902,12903],{"class":78},"a;",[68,12905,12906],{"class":302}," \u002F\u002F放回局部变量的地址\n",[68,12908,12909],{"class":70,"line":112},[68,12910,101],{"class":78},[68,12912,12913],{"class":70,"line":124},[68,12914,3890],{"emptyLinePlaceholder":1567},[68,12916,12917,12919,12921],{"class":70,"line":1496},[68,12918,1643],{"class":316},[68,12920,3463],{"class":74},[68,12922,12341],{"class":78},[68,12924,12925],{"class":70,"line":1502},[68,12926,12927],{"class":302},"    \u002F\u002F接受func的返回值\n",[68,12929,12930,12932,12934,12937,12939,12941],{"class":70,"line":1510},[68,12931,3475],{"class":316},[68,12933,8007],{"class":316},[68,12935,12936],{"class":78},"p ",[68,12938,1685],{"class":316},[68,12940,12873],{"class":74},[68,12942,7125],{"class":78},[68,12944,12945,12947,12949,12951,12953,12955,12958],{"class":70,"line":1521},[68,12946,8018],{"class":78},[68,12948,2670],{"class":316},[68,12950,8007],{"class":316},[68,12952,12936],{"class":78},[68,12954,2670],{"class":316},[68,12956,12957],{"class":78}," endl;",[68,12959,12960],{"class":302}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[68,12962,12963,12965,12967,12969,12971,12973,12975],{"class":70,"line":3103},[68,12964,8018],{"class":78},[68,12966,2670],{"class":316},[68,12968,8007],{"class":316},[68,12970,12936],{"class":78},[68,12972,2670],{"class":316},[68,12974,12957],{"class":78},[68,12976,12977],{"class":302}," \u002F\u002F第二次这个数据不再保留\n",[68,12979,12980,12982,12984,12986],{"class":70,"line":3108},[68,12981,3793],{"class":74},[68,12983,1640],{"class":78},[68,12985,3798],{"class":1742},[68,12987,4209],{"class":78},[68,12989,12990,12992,12994],{"class":70,"line":3114},[68,12991,5580],{"class":316},[68,12993,5583],{"class":85},[68,12995,95],{"class":78},[68,12997,12998],{"class":70,"line":3119},[68,12999,101],{"class":78},[170,13001,13002],{},"输出结果：",[170,13004,13005],{},[801,13006],{"alt":13007,"src":13008},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[170,13010,13011],{},"总结：不要返回局部变量的地址",[263,13013,13014],{"start":82},[27,13015,13016],{},"堆区",[24,13018,13019,13022],{},[27,13020,13021],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[27,13023,13024],{},"在c++中主要利用new在堆区开辟内存",[58,13026,13028],{"className":1628,"code":13027,"language":1630,"meta":63,"style":63},"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",[65,13029,13030,13045,13049,13054,13075,13082,13086,13094,13098,13103,13117,13129],{"__ignoreMap":63},[68,13031,13032,13034,13037,13040,13042],{"class":70,"line":71},[68,13033,1643],{"class":316},[68,13035,13036],{"class":316},"  *",[68,13038,13039],{"class":74},"func",[68,13041,3917],{"class":78},[68,13043,13044],{"class":302},"  \u002F\u002F函数返回指针\n",[68,13046,13047],{"class":70,"line":82},[68,13048,3038],{"class":78},[68,13050,13051],{"class":70,"line":98},[68,13052,13053],{"class":302},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[68,13055,13056,13058,13060,13062,13064,13067,13069,13071,13073],{"class":70,"line":104},[68,13057,5637],{"class":316},[68,13059,8007],{"class":316},[68,13061,170],{"class":78},[68,13063,1685],{"class":316},[68,13065,13066],{"class":316}," new",[68,13068,3872],{"class":316},[68,13070,1640],{"class":78},[68,13072,313],{"class":85},[68,13074,4209],{"class":78},[68,13076,13077,13079],{"class":70,"line":112},[68,13078,5871],{"class":316},[68,13080,13081],{"class":78}," p;\n",[68,13083,13084],{"class":70,"line":124},[68,13085,101],{"class":78},[68,13087,13088,13090,13092],{"class":70,"line":1496},[68,13089,1643],{"class":316},[68,13091,3463],{"class":74},[68,13093,3466],{"class":78},[68,13095,13096],{"class":70,"line":1502},[68,13097,3038],{"class":78},[68,13099,13100],{"class":70,"line":1510},[68,13101,13102],{"class":302},"    \u002F\u002F在堆区开辟数据\n",[68,13104,13105,13107,13109,13111,13113,13115],{"class":70,"line":1521},[68,13106,3475],{"class":316},[68,13108,8007],{"class":316},[68,13110,170],{"class":78},[68,13112,1685],{"class":316},[68,13114,13039],{"class":74},[68,13116,7125],{"class":78},[68,13118,13119,13121,13123,13125,13127],{"class":70,"line":3103},[68,13120,3043],{"class":78},[68,13122,7908],{"class":316},[68,13124,170],{"class":78},[68,13126,2670],{"class":316},[68,13128,2692],{"class":78},[68,13130,13131],{"class":70,"line":3108},[68,13132,101],{"class":78},[170,13134,13135],{},"图片展示：",[170,13137,13138],{},[801,13139],{"alt":13007,"src":13140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[170,13142,13143],{},"堆区内存由程序员管生死！！！",[263,13145,13146],{"start":98},[27,13147,13148],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[170,13150,13151],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[170,13153,13154,13155],{},"​语法：",[65,13156,13157],{}," new 数据类型",[170,13159,13160],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[58,13162,13164],{"className":1628,"code":13163,"language":1630,"meta":63,"style":63},"\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",[65,13165,13166,13171,13181,13185,13190,13195,13217,13221,13229,13233,13247,13259,13271,13283,13288,13293,13304,13308,13313,13321,13325,13330,13352,13378,13382,13400,13404,13430,13434,13446,13450,13455,13460,13468,13472,13476,13484,13488,13494,13500],{"__ignoreMap":63},[68,13167,13168],{"class":70,"line":71},[68,13169,13170],{"class":302},"\u002F\u002F1.new的基本语法\n",[68,13172,13173,13175,13177,13179],{"class":70,"line":82},[68,13174,1643],{"class":316},[68,13176,8007],{"class":316},[68,13178,13039],{"class":74},[68,13180,3466],{"class":78},[68,13182,13183],{"class":70,"line":98},[68,13184,3038],{"class":78},[68,13186,13187],{"class":70,"line":104},[68,13188,13189],{"class":302},"    \u002F\u002F在堆区创建整型数据\n",[68,13191,13192],{"class":70,"line":112},[68,13193,13194],{"class":302},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[68,13196,13197,13199,13201,13203,13206,13208,13210,13212,13214],{"class":70,"line":124},[68,13198,3475],{"class":316},[68,13200,8007],{"class":316},[68,13202,170],{"class":78},[68,13204,13205],{"class":316},"=new",[68,13207,3872],{"class":316},[68,13209,1640],{"class":78},[68,13211,313],{"class":85},[68,13213,7455],{"class":78},[68,13215,13216],{"class":302},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[68,13218,13219],{"class":70,"line":1496},[68,13220,101],{"class":78},[68,13222,13223,13225,13227],{"class":70,"line":1502},[68,13224,6853],{"class":316},[68,13226,7077],{"class":74},[68,13228,3466],{"class":78},[68,13230,13231],{"class":70,"line":1510},[68,13232,3038],{"class":78},[68,13234,13235,13237,13239,13241,13243,13245],{"class":70,"line":1521},[68,13236,3475],{"class":316},[68,13238,8007],{"class":316},[68,13240,170],{"class":78},[68,13242,1685],{"class":316},[68,13244,13039],{"class":74},[68,13246,7125],{"class":78},[68,13248,13249,13251,13253,13255,13257],{"class":70,"line":3103},[68,13250,3043],{"class":78},[68,13252,7908],{"class":316},[68,13254,170],{"class":78},[68,13256,2670],{"class":316},[68,13258,2692],{"class":78},[68,13260,13261,13263,13265,13267,13269],{"class":70,"line":3108},[68,13262,3043],{"class":78},[68,13264,7908],{"class":316},[68,13266,170],{"class":78},[68,13268,2670],{"class":316},[68,13270,2692],{"class":78},[68,13272,13273,13275,13277,13279,13281],{"class":70,"line":3114},[68,13274,3043],{"class":78},[68,13276,7908],{"class":316},[68,13278,170],{"class":78},[68,13280,2670],{"class":316},[68,13282,2692],{"class":78},[68,13284,13285],{"class":70,"line":3119},[68,13286,13287],{"class":302},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[68,13289,13290],{"class":70,"line":3133},[68,13291,13292],{"class":302},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[68,13294,13295,13298,13301],{"class":70,"line":3138},[68,13296,13297],{"class":316},"    delete",[68,13299,13300],{"class":78}," p;",[68,13302,13303],{"class":302},"\u002F\u002F删除这块地址\n",[68,13305,13306],{"class":70,"line":3144},[68,13307,101],{"class":78},[68,13309,13310],{"class":70,"line":3165},[68,13311,13312],{"class":302},"\u002F\u002F2.在堆区利用new开辟数组\n",[68,13314,13315,13317,13319],{"class":70,"line":3170},[68,13316,6853],{"class":316},[68,13318,7146],{"class":74},[68,13320,3466],{"class":78},[68,13322,13323],{"class":70,"line":3184},[68,13324,3038],{"class":78},[68,13326,13327],{"class":70,"line":3189},[68,13328,13329],{"class":302},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[68,13331,13332,13334,13336,13338,13340,13342,13344,13346,13349],{"class":70,"line":3218},[68,13333,3475],{"class":316},[68,13335,8007],{"class":316},[68,13337,5370],{"class":78},[68,13339,13205],{"class":316},[68,13341,3872],{"class":316},[68,13343,2517],{"class":78},[68,13345,313],{"class":85},[68,13347,13348],{"class":78},"];",[68,13350,13351],{"class":302},"\u002F\u002F10代表数组有10个元素\n",[68,13353,13354,13356,13358,13360,13362,13364,13366,13368,13370,13372,13374,13376],{"class":70,"line":3223},[68,13355,4691],{"class":316},[68,13357,3149],{"class":78},[68,13359,1643],{"class":316},[68,13361,4522],{"class":78},[68,13363,1685],{"class":316},[68,13365,1248],{"class":85},[68,13367,4529],{"class":78},[68,13369,2537],{"class":316},[68,13371,313],{"class":85},[68,13373,4529],{"class":78},[68,13375,3782],{"class":316},[68,13377,1646],{"class":78},[68,13379,13380],{"class":70,"line":3240},[68,13381,3520],{"class":78},[68,13383,13384,13387,13389,13391,13393,13395,13397],{"class":70,"line":3245},[68,13385,13386],{"class":78},"        arr[i]",[68,13388,1685],{"class":316},[68,13390,2070],{"class":78},[68,13392,2109],{"class":316},[68,13394,1940],{"class":85},[68,13396,1694],{"class":78},[68,13398,13399],{"class":302},"\u002F\u002F给10个元素赋值100～109\n",[68,13401,13402],{"class":70,"line":3250},[68,13403,3677],{"class":78},[68,13405,13406,13408,13410,13412,13414,13416,13418,13420,13422,13424,13426,13428],{"class":70,"line":3255},[68,13407,4691],{"class":316},[68,13409,3149],{"class":78},[68,13411,1643],{"class":316},[68,13413,4522],{"class":78},[68,13415,1685],{"class":316},[68,13417,1248],{"class":85},[68,13419,4529],{"class":78},[68,13421,2537],{"class":316},[68,13423,313],{"class":85},[68,13425,4529],{"class":78},[68,13427,3782],{"class":316},[68,13429,1646],{"class":78},[68,13431,13432],{"class":70,"line":3269},[68,13433,3520],{"class":78},[68,13435,13436,13438,13440,13442,13444],{"class":70,"line":3274},[68,13437,4941],{"class":78},[68,13439,2670],{"class":316},[68,13441,5844],{"class":78},[68,13443,2670],{"class":316},[68,13445,2692],{"class":78},[68,13447,13448],{"class":70,"line":4067},[68,13449,3677],{"class":78},[68,13451,13452],{"class":70,"line":4081},[68,13453,13454],{"class":302},"    \u002F\u002F释放堆区数组\n",[68,13456,13457],{"class":70,"line":4089},[68,13458,13459],{"class":302},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[68,13461,13462,13465],{"class":70,"line":4094},[68,13463,13464],{"class":316},"    delete[]",[68,13466,13467],{"class":78}," arr;\n",[68,13469,13470],{"class":70,"line":4100},[68,13471,101],{"class":78},[68,13473,13474],{"class":70,"line":4106},[68,13475,3890],{"emptyLinePlaceholder":1567},[68,13477,13478,13480,13482],{"class":70,"line":4111},[68,13479,1643],{"class":316},[68,13481,3463],{"class":74},[68,13483,3466],{"class":78},[68,13485,13486],{"class":70,"line":9437},[68,13487,3038],{"class":78},[68,13489,13490,13492],{"class":70,"line":9461},[68,13491,7122],{"class":74},[68,13493,7125],{"class":78},[68,13495,13496,13498],{"class":70,"line":9466},[68,13497,7191],{"class":74},[68,13499,7125],{"class":78},[68,13501,13502],{"class":70,"line":9472},[68,13503,101],{"class":78},[1553,13505,13506],{},"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":63,"searchDepth":82,"depth":82,"links":13508},[13509],{"id":12177,"depth":82,"text":12178,"children":13510},[13511,13512],{"id":12209,"depth":98,"text":12210},{"id":12837,"depth":98,"text":12838},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12169,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13519,"title":13520,"body":13521,"description":63,"extension":1565,"meta":15002,"navigation":1567,"path":15003,"seo":15004,"stem":15005,"__hash__":15006},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13522,"toc":14994},[13523,13526,13530,13533,13536,13705,13709,13714,13731,13736,13888,13892,13895,13898,14292,14296,14299,14304,14307,14619,14623,14629,14789,14791,14799,14803,14806,14813,14991],[10,13524,13520],{"id":13525},"_6引用",[14,13527,13529],{"id":13528},"_61引用基本用法","6.1引用基本用法",[170,13531,13532],{},"引用的本质：给变量起别名",[170,13534,13535],{},"语法：数据类型 &别名=原名",[58,13537,13539],{"className":1628,"code":13538,"language":1630,"meta":63,"style":63},"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",[65,13540,13541,13549,13553,13565,13577,13581,13600,13619,13623,13634,13638,13657,13675,13679,13689,13693,13701],{"__ignoreMap":63},[68,13542,13543,13545,13547],{"class":70,"line":71},[68,13544,1643],{"class":316},[68,13546,3463],{"class":74},[68,13548,12341],{"class":78},[68,13550,13551],{"class":70,"line":82},[68,13552,3890],{"emptyLinePlaceholder":1567},[68,13554,13555,13557,13559,13561,13563],{"class":70,"line":98},[68,13556,3475],{"class":316},[68,13558,12357],{"class":78},[68,13560,1685],{"class":316},[68,13562,3528],{"class":85},[68,13564,95],{"class":78},[68,13566,13567,13569,13571,13573,13575],{"class":70,"line":104},[68,13568,3475],{"class":316},[68,13570,12072],{"class":316},[68,13572,12433],{"class":78},[68,13574,1685],{"class":316},[68,13576,2925],{"class":78},[68,13578,13579],{"class":70,"line":112},[68,13580,3890],{"emptyLinePlaceholder":1567},[68,13582,13583,13585,13587,13590,13592,13594,13596,13598],{"class":70,"line":124},[68,13584,8018],{"class":78},[68,13586,2670],{"class":316},[68,13588,13589],{"class":1742}," \"a = \"",[68,13591,2937],{"class":316},[68,13593,12357],{"class":78},[68,13595,2670],{"class":316},[68,13597,12957],{"class":78},[68,13599,8757],{"class":302},[68,13601,13602,13604,13606,13609,13611,13613,13615,13617],{"class":70,"line":1496},[68,13603,8018],{"class":78},[68,13605,2670],{"class":316},[68,13607,13608],{"class":1742}," \"b = \"",[68,13610,2937],{"class":316},[68,13612,12370],{"class":78},[68,13614,2670],{"class":316},[68,13616,12957],{"class":78},[68,13618,8757],{"class":302},[68,13620,13621],{"class":70,"line":1502},[68,13622,3890],{"emptyLinePlaceholder":1567},[68,13624,13625,13628,13630,13632],{"class":70,"line":1510},[68,13626,13627],{"class":78},"    b ",[68,13629,1685],{"class":316},[68,13631,7243],{"class":85},[68,13633,95],{"class":78},[68,13635,13636],{"class":70,"line":1521},[68,13637,3890],{"emptyLinePlaceholder":1567},[68,13639,13640,13642,13644,13646,13648,13650,13652,13654],{"class":70,"line":3103},[68,13641,8018],{"class":78},[68,13643,2670],{"class":316},[68,13645,13589],{"class":1742},[68,13647,2937],{"class":316},[68,13649,12357],{"class":78},[68,13651,2670],{"class":316},[68,13653,12957],{"class":78},[68,13655,13656],{"class":302},"\u002F\u002F100\n",[68,13658,13659,13661,13663,13665,13667,13669,13671,13673],{"class":70,"line":3108},[68,13660,8018],{"class":78},[68,13662,2670],{"class":316},[68,13664,13608],{"class":1742},[68,13666,2937],{"class":316},[68,13668,12370],{"class":78},[68,13670,2670],{"class":316},[68,13672,12957],{"class":78},[68,13674,13656],{"class":302},[68,13676,13677],{"class":70,"line":3114},[68,13678,3890],{"emptyLinePlaceholder":1567},[68,13680,13681,13683,13685,13687],{"class":70,"line":3119},[68,13682,3793],{"class":74},[68,13684,1640],{"class":78},[68,13686,3798],{"class":1742},[68,13688,4209],{"class":78},[68,13690,13691],{"class":70,"line":3133},[68,13692,3890],{"emptyLinePlaceholder":1567},[68,13694,13695,13697,13699],{"class":70,"line":3138},[68,13696,5580],{"class":316},[68,13698,5583],{"class":85},[68,13700,95],{"class":78},[68,13702,13703],{"class":70,"line":3144},[68,13704,101],{"class":78},[14,13706,13708],{"id":13707},"_62引用的注意事项","6.2引用的注意事项",[263,13710,13711],{},[27,13712,13713],{},"引用必须要初始化",[58,13715,13717],{"className":1628,"code":13716,"language":1630,"meta":63,"style":63},"int &b;\u002F\u002F非常错误！\n",[65,13718,13719],{"__ignoreMap":63},[68,13720,13721,13723,13725,13728],{"class":70,"line":71},[68,13722,1643],{"class":316},[68,13724,12072],{"class":316},[68,13726,13727],{"class":78},"b;",[68,13729,13730],{"class":302},"\u002F\u002F非常错误！\n",[263,13732,13733],{"start":82},[27,13734,13735],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[58,13737,13739],{"className":1628,"code":13738,"language":1630,"meta":63,"style":63},"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",[65,13740,13741,13749,13761,13773,13781,13797,13810,13828,13846,13866,13876,13884],{"__ignoreMap":63},[68,13742,13743,13745,13747],{"class":70,"line":71},[68,13744,1643],{"class":316},[68,13746,3463],{"class":74},[68,13748,12341],{"class":78},[68,13750,13751,13753,13755,13757,13759],{"class":70,"line":82},[68,13752,3475],{"class":316},[68,13754,12357],{"class":78},[68,13756,1685],{"class":316},[68,13758,3528],{"class":85},[68,13760,95],{"class":78},[68,13762,13763,13765,13767,13769,13771],{"class":70,"line":98},[68,13764,3475],{"class":316},[68,13766,12370],{"class":78},[68,13768,1685],{"class":316},[68,13770,10439],{"class":85},[68,13772,95],{"class":78},[68,13774,13775,13778],{"class":70,"line":104},[68,13776,13777],{"class":302},"    \u002F\u002Fint &c;",[68,13779,13780],{"class":302}," \u002F\u002F错误，引用必须初始化\n",[68,13782,13783,13785,13787,13789,13791,13794],{"class":70,"line":112},[68,13784,3475],{"class":316},[68,13786,12072],{"class":316},[68,13788,4436],{"class":78},[68,13790,1685],{"class":316},[68,13792,13793],{"class":78}," a;",[68,13795,13796],{"class":302}," \u002F\u002F一旦初始化后，就不可以更改\n",[68,13798,13799,13802,13804,13807],{"class":70,"line":124},[68,13800,13801],{"class":78},"    c ",[68,13803,1685],{"class":316},[68,13805,13806],{"class":78}," b;",[68,13808,13809],{"class":302}," \u002F\u002F这是赋值操作，不是更改引用\n",[68,13811,13812,13814,13816,13818,13820,13822,13824,13826],{"class":70,"line":1496},[68,13813,8018],{"class":78},[68,13815,2670],{"class":316},[68,13817,13589],{"class":1742},[68,13819,2937],{"class":316},[68,13821,12357],{"class":78},[68,13823,2670],{"class":316},[68,13825,12957],{"class":78},[68,13827,8742],{"class":302},[68,13829,13830,13832,13834,13836,13838,13840,13842,13844],{"class":70,"line":1502},[68,13831,8018],{"class":78},[68,13833,2670],{"class":316},[68,13835,13608],{"class":1742},[68,13837,2937],{"class":316},[68,13839,12370],{"class":78},[68,13841,2670],{"class":316},[68,13843,12957],{"class":78},[68,13845,8742],{"class":302},[68,13847,13848,13850,13852,13855,13857,13860,13862,13864],{"class":70,"line":1510},[68,13849,8018],{"class":78},[68,13851,2670],{"class":316},[68,13853,13854],{"class":1742}," \"c = \"",[68,13856,2937],{"class":316},[68,13858,13859],{"class":78}," c ",[68,13861,2670],{"class":316},[68,13863,12957],{"class":78},[68,13865,8742],{"class":302},[68,13867,13868,13870,13872,13874],{"class":70,"line":1521},[68,13869,3793],{"class":74},[68,13871,1640],{"class":78},[68,13873,3798],{"class":1742},[68,13875,4209],{"class":78},[68,13877,13878,13880,13882],{"class":70,"line":3103},[68,13879,5580],{"class":316},[68,13881,5583],{"class":85},[68,13883,95],{"class":78},[68,13885,13886],{"class":70,"line":3108},[68,13887,101],{"class":78},[14,13889,13891],{"id":13890},"_63引用做函数参数","6.3引用做函数参数",[170,13893,13894],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[170,13896,13897],{},"优点：可以简化指针修改实参",[58,13899,13901],{"className":1628,"code":13900,"language":1630,"meta":63,"style":63},"\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",[65,13902,13903,13908,13931,13942,13952,13961,13965,13969,13974,13996,14008,14020,14030,14034,14038,14043,14065,14075,14083,14091,14095,14099,14107,14111,14123,14135,14139,14150,14176,14180,14200,14224,14228,14238,14262,14266,14276,14280,14288],{"__ignoreMap":63},[68,13904,13905],{"class":70,"line":71},[68,13906,13907],{"class":302},"\u002F\u002F1. 值传递\n",[68,13909,13910,13912,13915,13917,13919,13921,13924,13926,13928],{"class":70,"line":82},[68,13911,6853],{"class":316},[68,13913,13914],{"class":74}," mySwap01",[68,13916,1640],{"class":78},[68,13918,1643],{"class":316},[68,13920,2891],{"class":6705},[68,13922,13923],{"class":78},", ",[68,13925,1643],{"class":316},[68,13927,4323],{"class":6705},[68,13929,13930],{"class":78},") {\n",[68,13932,13933,13935,13938,13940],{"class":70,"line":98},[68,13934,3475],{"class":316},[68,13936,13937],{"class":78}," temp ",[68,13939,1685],{"class":316},[68,13941,2925],{"class":78},[68,13943,13944,13947,13949],{"class":70,"line":104},[68,13945,13946],{"class":78},"    a ",[68,13948,1685],{"class":316},[68,13950,13951],{"class":78}," b;\n",[68,13953,13954,13956,13958],{"class":70,"line":112},[68,13955,13627],{"class":78},[68,13957,1685],{"class":316},[68,13959,13960],{"class":78}," temp;\n",[68,13962,13963],{"class":70,"line":124},[68,13964,101],{"class":78},[68,13966,13967],{"class":70,"line":1496},[68,13968,3890],{"emptyLinePlaceholder":1567},[68,13970,13971],{"class":70,"line":1502},[68,13972,13973],{"class":302},"\u002F\u002F2. 地址传递\n",[68,13975,13976,13978,13981,13983,13986,13988,13990,13992,13994],{"class":70,"line":1510},[68,13977,6853],{"class":316},[68,13979,13980],{"class":74}," mySwap02",[68,13982,1640],{"class":78},[68,13984,13985],{"class":316},"int*",[68,13987,2891],{"class":6705},[68,13989,13923],{"class":78},[68,13991,13985],{"class":316},[68,13993,4323],{"class":6705},[68,13995,13930],{"class":78},[68,13997,13998,14000,14002,14004,14006],{"class":70,"line":1521},[68,13999,3475],{"class":316},[68,14001,13937],{"class":78},[68,14003,1685],{"class":316},[68,14005,8007],{"class":316},[68,14007,7686],{"class":78},[68,14009,14010,14012,14014,14016,14018],{"class":70,"line":3103},[68,14011,7892],{"class":316},[68,14013,12407],{"class":78},[68,14015,1685],{"class":316},[68,14017,8007],{"class":316},[68,14019,7558],{"class":78},[68,14021,14022,14024,14026,14028],{"class":70,"line":3108},[68,14023,7892],{"class":316},[68,14025,12433],{"class":78},[68,14027,1685],{"class":316},[68,14029,13960],{"class":78},[68,14031,14032],{"class":70,"line":3114},[68,14033,101],{"class":78},[68,14035,14036],{"class":70,"line":3119},[68,14037,3890],{"emptyLinePlaceholder":1567},[68,14039,14040],{"class":70,"line":3133},[68,14041,14042],{"class":302},"\u002F\u002F3. 引用传递\n",[68,14044,14045,14047,14050,14052,14055,14057,14059,14061,14063],{"class":70,"line":3138},[68,14046,6853],{"class":316},[68,14048,14049],{"class":74}," mySwap03",[68,14051,1640],{"class":78},[68,14053,14054],{"class":316},"int&",[68,14056,2891],{"class":6705},[68,14058,13923],{"class":78},[68,14060,14054],{"class":316},[68,14062,4323],{"class":6705},[68,14064,13930],{"class":78},[68,14066,14067,14069,14071,14073],{"class":70,"line":3144},[68,14068,3475],{"class":316},[68,14070,13937],{"class":78},[68,14072,1685],{"class":316},[68,14074,2925],{"class":78},[68,14076,14077,14079,14081],{"class":70,"line":3165},[68,14078,13946],{"class":78},[68,14080,1685],{"class":316},[68,14082,13951],{"class":78},[68,14084,14085,14087,14089],{"class":70,"line":3170},[68,14086,13627],{"class":78},[68,14088,1685],{"class":316},[68,14090,13960],{"class":78},[68,14092,14093],{"class":70,"line":3184},[68,14094,101],{"class":78},[68,14096,14097],{"class":70,"line":3189},[68,14098,3890],{"emptyLinePlaceholder":1567},[68,14100,14101,14103,14105],{"class":70,"line":3218},[68,14102,1643],{"class":316},[68,14104,3463],{"class":74},[68,14106,12341],{"class":78},[68,14108,14109],{"class":70,"line":3223},[68,14110,3890],{"emptyLinePlaceholder":1567},[68,14112,14113,14115,14117,14119,14121],{"class":70,"line":3240},[68,14114,3475],{"class":316},[68,14116,12357],{"class":78},[68,14118,1685],{"class":316},[68,14120,3528],{"class":85},[68,14122,95],{"class":78},[68,14124,14125,14127,14129,14131,14133],{"class":70,"line":3245},[68,14126,3475],{"class":316},[68,14128,12370],{"class":78},[68,14130,1685],{"class":316},[68,14132,10439],{"class":85},[68,14134,95],{"class":78},[68,14136,14137],{"class":70,"line":3250},[68,14138,3890],{"emptyLinePlaceholder":1567},[68,14140,14141,14144,14147],{"class":70,"line":3255},[68,14142,14143],{"class":74},"    mySwap01",[68,14145,14146],{"class":78},"(a, b);",[68,14148,14149],{"class":302},"\u002F\u002F值传递，形参不会修饰实参\n",[68,14151,14152,14154,14156,14159,14161,14163,14165,14168,14170,14172,14174],{"class":70,"line":3269},[68,14153,8018],{"class":78},[68,14155,2670],{"class":316},[68,14157,14158],{"class":1742}," \"a:\"",[68,14160,2937],{"class":316},[68,14162,12357],{"class":78},[68,14164,2670],{"class":316},[68,14166,14167],{"class":1742}," \" b:\"",[68,14169,2937],{"class":316},[68,14171,12370],{"class":78},[68,14173,2670],{"class":316},[68,14175,10329],{"class":78},[68,14177,14178],{"class":70,"line":3274},[68,14179,3890],{"emptyLinePlaceholder":1567},[68,14181,14182,14185,14187,14189,14192,14194,14197],{"class":70,"line":4067},[68,14183,14184],{"class":74},"    mySwap02",[68,14186,1640],{"class":78},[68,14188,1982],{"class":316},[68,14190,14191],{"class":78},"a, ",[68,14193,1982],{"class":316},[68,14195,14196],{"class":78},"b);",[68,14198,14199],{"class":302},"\u002F\u002F地址传递，形参会修饰实参\n",[68,14201,14202,14204,14206,14208,14210,14212,14214,14216,14218,14220,14222],{"class":70,"line":4081},[68,14203,8018],{"class":78},[68,14205,2670],{"class":316},[68,14207,14158],{"class":1742},[68,14209,2937],{"class":316},[68,14211,12357],{"class":78},[68,14213,2670],{"class":316},[68,14215,14167],{"class":1742},[68,14217,2937],{"class":316},[68,14219,12370],{"class":78},[68,14221,2670],{"class":316},[68,14223,10329],{"class":78},[68,14225,14226],{"class":70,"line":4089},[68,14227,3890],{"emptyLinePlaceholder":1567},[68,14229,14230,14233,14235],{"class":70,"line":4094},[68,14231,14232],{"class":74},"    mySwap03",[68,14234,14146],{"class":78},[68,14236,14237],{"class":302},"\u002F\u002F引用传递，形参会修饰实参\n",[68,14239,14240,14242,14244,14246,14248,14250,14252,14254,14256,14258,14260],{"class":70,"line":4100},[68,14241,8018],{"class":78},[68,14243,2670],{"class":316},[68,14245,14158],{"class":1742},[68,14247,2937],{"class":316},[68,14249,12357],{"class":78},[68,14251,2670],{"class":316},[68,14253,14167],{"class":1742},[68,14255,2937],{"class":316},[68,14257,12370],{"class":78},[68,14259,2670],{"class":316},[68,14261,10329],{"class":78},[68,14263,14264],{"class":70,"line":4106},[68,14265,3890],{"emptyLinePlaceholder":1567},[68,14267,14268,14270,14272,14274],{"class":70,"line":4111},[68,14269,3793],{"class":74},[68,14271,1640],{"class":78},[68,14273,3798],{"class":1742},[68,14275,4209],{"class":78},[68,14277,14278],{"class":70,"line":9437},[68,14279,3890],{"emptyLinePlaceholder":1567},[68,14281,14282,14284,14286],{"class":70,"line":9461},[68,14283,5580],{"class":316},[68,14285,5583],{"class":85},[68,14287,95],{"class":78},[68,14289,14290],{"class":70,"line":9466},[68,14291,101],{"class":78},[14,14293,14295],{"id":14294},"_64引用做函数的返回值","6.4引用做函数的返回值",[170,14297,14298],{},"作用：引用是可以作为函数的返回值存在的",[170,14300,1106,14301],{},[268,14302,14303],{},"不要返回局部变量引用",[170,14305,14306],{},"用法：函数调用作为左值",[58,14308,14310],{"className":11429,"code":14309,"language":11431,"meta":63,"style":63},"\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",[65,14311,14312,14317,14325,14340,14346,14350,14354,14359,14367,14384,14390,14394,14398,14406,14410,14415,14429,14449,14468,14472,14477,14490,14510,14528,14532,14548,14552,14571,14589,14593,14603,14607,14615],{"__ignoreMap":63},[68,14313,14314],{"class":70,"line":71},[68,14315,14316],{"class":302},"\u002F\u002F返回局部变量引用\n",[68,14318,14319,14321,14323],{"class":70,"line":82},[68,14320,14054],{"class":316},[68,14322,7077],{"class":74},[68,14324,12341],{"class":78},[68,14326,14327,14329,14331,14333,14335,14337],{"class":70,"line":98},[68,14328,3475],{"class":316},[68,14330,12357],{"class":78},[68,14332,1685],{"class":316},[68,14334,3528],{"class":85},[68,14336,1694],{"class":78},[68,14338,14339],{"class":302}," \u002F\u002F局部变量\n",[68,14341,14342,14344],{"class":70,"line":104},[68,14343,5580],{"class":316},[68,14345,2925],{"class":78},[68,14347,14348],{"class":70,"line":112},[68,14349,101],{"class":78},[68,14351,14352],{"class":70,"line":124},[68,14353,3890],{"emptyLinePlaceholder":1567},[68,14355,14356],{"class":70,"line":1496},[68,14357,14358],{"class":302},"\u002F\u002F返回静态变量引用\n",[68,14360,14361,14363,14365],{"class":70,"line":1502},[68,14362,14054],{"class":316},[68,14364,7146],{"class":74},[68,14366,12341],{"class":78},[68,14368,14369,14371,14373,14375,14377,14379,14381],{"class":70,"line":1510},[68,14370,12508],{"class":316},[68,14372,3872],{"class":316},[68,14374,12357],{"class":78},[68,14376,1685],{"class":316},[68,14378,10439],{"class":85},[68,14380,1694],{"class":78},[68,14382,14383],{"class":302},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[68,14385,14386,14388],{"class":70,"line":1521},[68,14387,5580],{"class":316},[68,14389,2925],{"class":78},[68,14391,14392],{"class":70,"line":3103},[68,14393,101],{"class":78},[68,14395,14396],{"class":70,"line":3108},[68,14397,3890],{"emptyLinePlaceholder":1567},[68,14399,14400,14402,14404],{"class":70,"line":3114},[68,14401,1643],{"class":316},[68,14403,3463],{"class":74},[68,14405,12341],{"class":78},[68,14407,14408],{"class":70,"line":3119},[68,14409,3890],{"emptyLinePlaceholder":1567},[68,14411,14412],{"class":70,"line":3133},[68,14413,14414],{"class":302},"    \u002F\u002F不能返回局部变量的引用\n",[68,14416,14417,14420,14423,14425,14427],{"class":70,"line":3138},[68,14418,14419],{"class":316},"    int&",[68,14421,14422],{"class":78}," ref ",[68,14424,1685],{"class":316},[68,14426,7077],{"class":74},[68,14428,7125],{"class":78},[68,14430,14431,14433,14435,14438,14440,14442,14444,14446],{"class":70,"line":3144},[68,14432,8018],{"class":78},[68,14434,2670],{"class":316},[68,14436,14437],{"class":1742}," \"ref = \"",[68,14439,2937],{"class":316},[68,14441,14422],{"class":78},[68,14443,2670],{"class":316},[68,14445,12957],{"class":78},[68,14447,14448],{"class":302},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[68,14450,14451,14453,14455,14457,14459,14461,14463,14465],{"class":70,"line":3165},[68,14452,8018],{"class":78},[68,14454,2670],{"class":316},[68,14456,14437],{"class":1742},[68,14458,2937],{"class":316},[68,14460,14422],{"class":78},[68,14462,2670],{"class":316},[68,14464,12957],{"class":78},[68,14466,14467],{"class":302},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[68,14469,14470],{"class":70,"line":3170},[68,14471,3890],{"emptyLinePlaceholder":1567},[68,14473,14474],{"class":70,"line":3184},[68,14475,14476],{"class":302},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[68,14478,14479,14481,14484,14486,14488],{"class":70,"line":3189},[68,14480,14419],{"class":316},[68,14482,14483],{"class":78}," ref2 ",[68,14485,1685],{"class":316},[68,14487,7146],{"class":74},[68,14489,7125],{"class":78},[68,14491,14492,14494,14496,14499,14501,14503,14505,14507],{"class":70,"line":3218},[68,14493,8018],{"class":78},[68,14495,2670],{"class":316},[68,14497,14498],{"class":1742}," \"ref2 = \"",[68,14500,2937],{"class":316},[68,14502,14483],{"class":78},[68,14504,2670],{"class":316},[68,14506,12957],{"class":78},[68,14508,14509],{"class":302}," \u002F\u002F20\n",[68,14511,14512,14514,14516,14518,14520,14522,14524,14526],{"class":70,"line":3223},[68,14513,8018],{"class":78},[68,14515,2670],{"class":316},[68,14517,14498],{"class":1742},[68,14519,2937],{"class":316},[68,14521,14483],{"class":78},[68,14523,2670],{"class":316},[68,14525,12957],{"class":78},[68,14527,14509],{"class":302},[68,14529,14530],{"class":70,"line":3240},[68,14531,3890],{"emptyLinePlaceholder":1567},[68,14533,14534,14536,14539,14541,14543,14545],{"class":70,"line":3245},[68,14535,7191],{"class":74},[68,14537,14538],{"class":78},"() ",[68,14540,1685],{"class":316},[68,14542,4489],{"class":85},[68,14544,1694],{"class":78},[68,14546,14547],{"class":302},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[68,14549,14550],{"class":70,"line":3250},[68,14551,3890],{"emptyLinePlaceholder":1567},[68,14553,14554,14556,14558,14560,14562,14564,14566,14568],{"class":70,"line":3255},[68,14555,8018],{"class":78},[68,14557,2670],{"class":316},[68,14559,14498],{"class":1742},[68,14561,2937],{"class":316},[68,14563,14483],{"class":78},[68,14565,2670],{"class":316},[68,14567,12957],{"class":78},[68,14569,14570],{"class":302}," \u002F\u002F1000\n",[68,14572,14573,14575,14577,14579,14581,14583,14585,14587],{"class":70,"line":3269},[68,14574,8018],{"class":78},[68,14576,2670],{"class":316},[68,14578,14498],{"class":1742},[68,14580,2937],{"class":316},[68,14582,14483],{"class":78},[68,14584,2670],{"class":316},[68,14586,12957],{"class":78},[68,14588,14570],{"class":302},[68,14590,14591],{"class":70,"line":3274},[68,14592,3890],{"emptyLinePlaceholder":1567},[68,14594,14595,14597,14599,14601],{"class":70,"line":4067},[68,14596,3793],{"class":74},[68,14598,1640],{"class":78},[68,14600,3798],{"class":1742},[68,14602,4209],{"class":78},[68,14604,14605],{"class":70,"line":4081},[68,14606,3890],{"emptyLinePlaceholder":1567},[68,14608,14609,14611,14613],{"class":70,"line":4089},[68,14610,5580],{"class":316},[68,14612,5583],{"class":85},[68,14614,95],{"class":78},[68,14616,14617],{"class":70,"line":4094},[68,14618,101],{"class":78},[14,14620,14622],{"id":14621},"_65引用的本质","6.5引用的本质",[170,14624,14625,14626],{},"本质：",[268,14627,14628],{},"引用的本质在c++内部实现是一个指针常量.",[58,14630,14632],{"className":1628,"code":14631,"language":1630,"meta":63,"style":63},"\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",[65,14633,14634,14639,14655,14669,14673,14682,14694,14699,14704,14715,14728,14732,14748,14765,14769,14777,14785],{"__ignoreMap":63},[68,14635,14636],{"class":70,"line":71},[68,14637,14638],{"class":302},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[68,14640,14641,14643,14645,14647,14649,14652],{"class":70,"line":82},[68,14642,6853],{"class":316},[68,14644,12873],{"class":74},[68,14646,1640],{"class":78},[68,14648,14054],{"class":316},[68,14650,14651],{"class":6705}," ref",[68,14653,14654],{"class":78},"){\n",[68,14656,14657,14660,14662,14664,14666],{"class":70,"line":98},[68,14658,14659],{"class":78},"    ref ",[68,14661,1685],{"class":316},[68,14663,7243],{"class":85},[68,14665,1694],{"class":78},[68,14667,14668],{"class":302}," \u002F\u002F ref是引用，转换为*ref = 100\n",[68,14670,14671],{"class":70,"line":104},[68,14672,101],{"class":78},[68,14674,14675,14677,14679],{"class":70,"line":112},[68,14676,1643],{"class":316},[68,14678,3463],{"class":74},[68,14680,14681],{"class":78},"(){\n",[68,14683,14684,14686,14688,14690,14692],{"class":70,"line":124},[68,14685,3475],{"class":316},[68,14687,12357],{"class":78},[68,14689,1685],{"class":316},[68,14691,3528],{"class":85},[68,14693,95],{"class":78},[68,14695,14696],{"class":70,"line":1496},[68,14697,14698],{"class":78},"    \n",[68,14700,14701],{"class":70,"line":1502},[68,14702,14703],{"class":302},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[68,14705,14706,14708,14710,14712],{"class":70,"line":1510},[68,14707,14419],{"class":316},[68,14709,14422],{"class":78},[68,14711,1685],{"class":316},[68,14713,14714],{"class":78}," a; \n",[68,14716,14717,14719,14721,14723,14725],{"class":70,"line":1521},[68,14718,14659],{"class":78},[68,14720,1685],{"class":316},[68,14722,10439],{"class":85},[68,14724,1694],{"class":78},[68,14726,14727],{"class":302}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[68,14729,14730],{"class":70,"line":3103},[68,14731,14698],{"class":78},[68,14733,14734,14736,14738,14740,14742,14744,14746],{"class":70,"line":3108},[68,14735,8018],{"class":78},[68,14737,2670],{"class":316},[68,14739,14158],{"class":1742},[68,14741,2937],{"class":316},[68,14743,12357],{"class":78},[68,14745,2670],{"class":316},[68,14747,10329],{"class":78},[68,14749,14750,14752,14754,14757,14759,14761,14763],{"class":70,"line":3114},[68,14751,8018],{"class":78},[68,14753,2670],{"class":316},[68,14755,14756],{"class":1742}," \"ref:\"",[68,14758,2937],{"class":316},[68,14760,14422],{"class":78},[68,14762,2670],{"class":316},[68,14764,10329],{"class":78},[68,14766,14767],{"class":70,"line":3119},[68,14768,14698],{"class":78},[68,14770,14771,14774],{"class":70,"line":3133},[68,14772,14773],{"class":74},"    func",[68,14775,14776],{"class":78},"(a);\n",[68,14778,14779,14781,14783],{"class":70,"line":3138},[68,14780,5580],{"class":316},[68,14782,5583],{"class":85},[68,14784,95],{"class":78},[68,14786,14787],{"class":70,"line":3144},[68,14788,101],{"class":78},[170,14790,12820],{},[263,14792,14793,14796],{},[27,14794,14795],{},"引用的本质，就是一个指针常量",[27,14797,14798],{},"引用一旦初始化，就不可以发生改变",[14,14800,14802],{"id":14801},"_66常量引用","6.6常量引用",[170,14804,14805],{},"作用：常量引用主要用来修饰形参",[170,14807,14808,14809,14812],{},"在函数形参列表中，可以加",[268,14810,14811],{},"const修饰形参","，防止形参改变实参",[58,14814,14816],{"className":1628,"code":14815,"language":1630,"meta":63,"style":63},"\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",[65,14817,14818,14823,14828,14847,14852,14865,14869,14873,14881,14885,14890,14895,14909,14913,14921,14933,14937,14942,14954,14961,14965,14975,14979,14987],{"__ignoreMap":63},[68,14819,14820],{"class":70,"line":71},[68,14821,14822],{"class":302},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[68,14824,14825],{"class":70,"line":82},[68,14826,14827],{"class":302},"\u002F\u002F加上const就不能修改实参的\n",[68,14829,14830,14832,14835,14837,14839,14842,14845],{"class":70,"line":98},[68,14831,6853],{"class":316},[68,14833,14834],{"class":74}," showValue",[68,14836,1640],{"class":78},[68,14838,8281],{"class":316},[68,14840,14841],{"class":316}," int&",[68,14843,14844],{"class":6705}," v",[68,14846,13930],{"class":78},[68,14848,14849],{"class":70,"line":104},[68,14850,14851],{"class":302},"    \u002F\u002Fv += 100;\n",[68,14853,14854,14856,14858,14861,14863],{"class":70,"line":112},[68,14855,8018],{"class":78},[68,14857,2670],{"class":316},[68,14859,14860],{"class":78}," v ",[68,14862,2670],{"class":316},[68,14864,10329],{"class":78},[68,14866,14867],{"class":70,"line":124},[68,14868,101],{"class":78},[68,14870,14871],{"class":70,"line":1496},[68,14872,3890],{"emptyLinePlaceholder":1567},[68,14874,14875,14877,14879],{"class":70,"line":1502},[68,14876,1643],{"class":316},[68,14878,3463],{"class":74},[68,14880,12341],{"class":78},[68,14882,14883],{"class":70,"line":1510},[68,14884,3890],{"emptyLinePlaceholder":1567},[68,14886,14887],{"class":70,"line":1521},[68,14888,14889],{"class":302},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[68,14891,14892],{"class":70,"line":3103},[68,14893,14894],{"class":302},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[68,14896,14897,14899,14901,14903,14905,14907],{"class":70,"line":3108},[68,14898,12709],{"class":316},[68,14900,14841],{"class":316},[68,14902,14422],{"class":78},[68,14904,1685],{"class":316},[68,14906,3528],{"class":85},[68,14908,95],{"class":78},[68,14910,14911],{"class":70,"line":3114},[68,14912,3890],{"emptyLinePlaceholder":1567},[68,14914,14915,14918],{"class":70,"line":3119},[68,14916,14917],{"class":302},"    \u002F\u002Fref = 100;",[68,14919,14920],{"class":302},"  \u002F\u002F加入const后不可以修改变量\n",[68,14922,14923,14925,14927,14929,14931],{"class":70,"line":3133},[68,14924,8018],{"class":78},[68,14926,2670],{"class":316},[68,14928,14422],{"class":78},[68,14930,2670],{"class":316},[68,14932,10329],{"class":78},[68,14934,14935],{"class":70,"line":3138},[68,14936,3890],{"emptyLinePlaceholder":1567},[68,14938,14939],{"class":70,"line":3144},[68,14940,14941],{"class":302},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[68,14943,14944,14946,14948,14950,14952],{"class":70,"line":3165},[68,14945,3475],{"class":316},[68,14947,12357],{"class":78},[68,14949,1685],{"class":316},[68,14951,3528],{"class":85},[68,14953,95],{"class":78},[68,14955,14956,14959],{"class":70,"line":3170},[68,14957,14958],{"class":74},"    showValue",[68,14960,14776],{"class":78},[68,14962,14963],{"class":70,"line":3184},[68,14964,3890],{"emptyLinePlaceholder":1567},[68,14966,14967,14969,14971,14973],{"class":70,"line":3189},[68,14968,3793],{"class":74},[68,14970,1640],{"class":78},[68,14972,3798],{"class":1742},[68,14974,4209],{"class":78},[68,14976,14977],{"class":70,"line":3218},[68,14978,3890],{"emptyLinePlaceholder":1567},[68,14980,14981,14983,14985],{"class":70,"line":3223},[68,14982,5580],{"class":316},[68,14984,5583],{"class":85},[68,14986,95],{"class":78},[68,14988,14989],{"class":70,"line":3240},[68,14990,101],{"class":78},[1553,14992,14993],{},"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":63,"searchDepth":82,"depth":82,"links":14995},[14996,14997,14998,14999,15000,15001],{"id":13528,"depth":82,"text":13529},{"id":13707,"depth":82,"text":13708},{"id":13890,"depth":82,"text":13891},{"id":14294,"depth":82,"text":14295},{"id":14621,"depth":82,"text":14622},{"id":14801,"depth":82,"text":14802},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13520,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15008,"title":15009,"body":15010,"description":63,"extension":1565,"meta":16091,"navigation":1567,"path":16092,"seo":16093,"stem":16094,"__hash__":16095},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15011,"toc":16083},[15012,15015,15019,15022,15027,15259,15261,15272,15276,15279,15287,15391,15394,15398,15401,15405,15408,15413,15435,15441,15768,15771,15775,15783,16080],[10,15013,15009],{"id":15014},"_7函数高级部分",[14,15016,15018],{"id":15017},"_71函数默认参数","7.1函数默认参数",[170,15020,15021],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[170,15023,409,15024],{},[65,15025,15026],{}," 返回值类型  函数名 （参数= 默认值）{}",[58,15028,15030],{"className":1628,"code":15029,"language":1630,"meta":63,"style":63},"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",[65,15031,15032,15067,15082,15086,15090,15095,15100,15129,15149,15159,15163,15167,15175,15179,15207,15229,15233,15243,15247,15255],{"__ignoreMap":63},[68,15033,15034,15036,15038,15040,15042,15044,15046,15048,15050,15053,15055,15057,15059,15061,15063,15065],{"class":70,"line":71},[68,15035,1643],{"class":316},[68,15037,12873],{"class":74},[68,15039,1640],{"class":78},[68,15041,1643],{"class":316},[68,15043,2891],{"class":6705},[68,15045,13923],{"class":78},[68,15047,1643],{"class":316},[68,15049,4323],{"class":6705},[68,15051,15052],{"class":316}," =",[68,15054,3528],{"class":85},[68,15056,13923],{"class":78},[68,15058,1643],{"class":316},[68,15060,4339],{"class":6705},[68,15062,15052],{"class":316},[68,15064,3528],{"class":85},[68,15066,13930],{"class":78},[68,15068,15069,15071,15073,15075,15077,15079],{"class":70,"line":82},[68,15070,5580],{"class":316},[68,15072,12357],{"class":78},[68,15074,2109],{"class":316},[68,15076,12370],{"class":78},[68,15078,2109],{"class":316},[68,15080,15081],{"class":78}," c;\n",[68,15083,15084],{"class":70,"line":98},[68,15085,101],{"class":78},[68,15087,15088],{"class":70,"line":104},[68,15089,3890],{"emptyLinePlaceholder":1567},[68,15091,15092],{"class":70,"line":112},[68,15093,15094],{"class":302},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[68,15096,15097],{"class":70,"line":124},[68,15098,15099],{"class":302},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[68,15101,15102,15104,15107,15109,15111,15113,15115,15117,15119,15121,15123,15125,15127],{"class":70,"line":1496},[68,15103,1643],{"class":316},[68,15105,15106],{"class":74}," func2",[68,15108,1640],{"class":78},[68,15110,1643],{"class":316},[68,15112,2891],{"class":6705},[68,15114,15052],{"class":316},[68,15116,3528],{"class":85},[68,15118,13923],{"class":78},[68,15120,1643],{"class":316},[68,15122,4323],{"class":6705},[68,15124,15052],{"class":316},[68,15126,3528],{"class":85},[68,15128,4209],{"class":78},[68,15130,15131,15133,15135,15137,15139,15141,15143,15145,15147],{"class":70,"line":1502},[68,15132,1643],{"class":316},[68,15134,15106],{"class":74},[68,15136,1640],{"class":78},[68,15138,1643],{"class":316},[68,15140,2891],{"class":6705},[68,15142,13923],{"class":78},[68,15144,1643],{"class":316},[68,15146,4323],{"class":6705},[68,15148,13930],{"class":78},[68,15150,15151,15153,15155,15157],{"class":70,"line":1510},[68,15152,5580],{"class":316},[68,15154,12357],{"class":78},[68,15156,2109],{"class":316},[68,15158,13951],{"class":78},[68,15160,15161],{"class":70,"line":1521},[68,15162,101],{"class":78},[68,15164,15165],{"class":70,"line":3103},[68,15166,3890],{"emptyLinePlaceholder":1567},[68,15168,15169,15171,15173],{"class":70,"line":3108},[68,15170,1643],{"class":316},[68,15172,3463],{"class":74},[68,15174,12341],{"class":78},[68,15176,15177],{"class":70,"line":3114},[68,15178,3890],{"emptyLinePlaceholder":1567},[68,15180,15181,15183,15185,15188,15190,15192,15194,15196,15198,15200,15203,15205],{"class":70,"line":3119},[68,15182,8018],{"class":78},[68,15184,2670],{"class":316},[68,15186,15187],{"class":1742}," \"ret = \"",[68,15189,2937],{"class":316},[68,15191,12873],{"class":74},[68,15193,1640],{"class":78},[68,15195,333],{"class":85},[68,15197,13923],{"class":78},[68,15199,333],{"class":85},[68,15201,15202],{"class":78},") ",[68,15204,2670],{"class":316},[68,15206,10329],{"class":78},[68,15208,15209,15211,15213,15215,15217,15219,15221,15223,15225,15227],{"class":70,"line":3133},[68,15210,8018],{"class":78},[68,15212,2670],{"class":316},[68,15214,15187],{"class":1742},[68,15216,2937],{"class":316},[68,15218,12873],{"class":74},[68,15220,1640],{"class":78},[68,15222,1940],{"class":85},[68,15224,15202],{"class":78},[68,15226,2670],{"class":316},[68,15228,10329],{"class":78},[68,15230,15231],{"class":70,"line":3138},[68,15232,3890],{"emptyLinePlaceholder":1567},[68,15234,15235,15237,15239,15241],{"class":70,"line":3144},[68,15236,3793],{"class":74},[68,15238,1640],{"class":78},[68,15240,3798],{"class":1742},[68,15242,4209],{"class":78},[68,15244,15245],{"class":70,"line":3165},[68,15246,3890],{"emptyLinePlaceholder":1567},[68,15248,15249,15251,15253],{"class":70,"line":3170},[68,15250,5580],{"class":316},[68,15252,5583],{"class":85},[68,15254,95],{"class":78},[68,15256,15257],{"class":70,"line":3184},[68,15258,101],{"class":78},[170,15260,12820],{},[263,15262,15263,15266,15269],{},[27,15264,15265],{},"我传就用我；没传就用你",[27,15267,15268],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[27,15270,15271],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15273,15275],{"id":15274},"_72函数的占位参数","7.2函数的占位参数",[170,15277,15278],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[170,15280,15281,15283,15284],{},[268,15282,409],{}," ",[65,15285,15286],{},"返回值类型 函数名 (数据类型){}",[58,15288,15290],{"className":1628,"code":15289,"language":1630,"meta":63,"style":63},"\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",[65,15291,15292,15297,15315,15328,15332,15340,15344,15361,15365,15375,15379,15387],{"__ignoreMap":63},[68,15293,15294],{"class":70,"line":71},[68,15295,15296],{"class":302},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[68,15298,15299,15301,15303,15305,15307,15309,15311,15313],{"class":70,"line":82},[68,15300,6853],{"class":316},[68,15302,12873],{"class":74},[68,15304,1640],{"class":78},[68,15306,1643],{"class":316},[68,15308,2891],{"class":6705},[68,15310,13923],{"class":78},[68,15312,1643],{"class":316},[68,15314,13930],{"class":78},[68,15316,15317,15319,15321,15324,15326],{"class":70,"line":98},[68,15318,8018],{"class":78},[68,15320,2670],{"class":316},[68,15322,15323],{"class":1742}," \"this is func\"",[68,15325,2937],{"class":316},[68,15327,10329],{"class":78},[68,15329,15330],{"class":70,"line":104},[68,15331,101],{"class":78},[68,15333,15334,15336,15338],{"class":70,"line":112},[68,15335,1643],{"class":316},[68,15337,3463],{"class":74},[68,15339,12341],{"class":78},[68,15341,15342],{"class":70,"line":124},[68,15343,3890],{"emptyLinePlaceholder":1567},[68,15345,15346,15348,15350,15352,15354,15356,15358],{"class":70,"line":1496},[68,15347,14773],{"class":74},[68,15349,1640],{"class":78},[68,15351,313],{"class":85},[68,15353,2007],{"class":78},[68,15355,313],{"class":85},[68,15357,7455],{"class":78},[68,15359,15360],{"class":302}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[68,15362,15363],{"class":70,"line":1502},[68,15364,3890],{"emptyLinePlaceholder":1567},[68,15366,15367,15369,15371,15373],{"class":70,"line":1510},[68,15368,3793],{"class":74},[68,15370,1640],{"class":78},[68,15372,3798],{"class":1742},[68,15374,4209],{"class":78},[68,15376,15377],{"class":70,"line":1521},[68,15378,3890],{"emptyLinePlaceholder":1567},[68,15380,15381,15383,15385],{"class":70,"line":3103},[68,15382,5580],{"class":316},[68,15384,5583],{"class":85},[68,15386,95],{"class":78},[68,15388,15389],{"class":70,"line":3108},[68,15390,101],{"class":78},[170,15392,15393],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15395,15397],{"id":15396},"_73函数重载","7.3函数重载",[170,15399,15400],{},"意思是函数名是可以相同的",[19,15402,15404],{"id":15403},"_731基本语法","7.3.1基本语法",[170,15406,15407],{},"作用：函数名可以相同，提高复用性",[170,15409,15410],{},[268,15411,15412],{},"函数重载满足条件：",[24,15414,15415,15418,15421],{},[27,15416,15417],{},"同一个作用域下",[27,15419,15420],{},"函数名称相同",[27,15422,15423,15424,15427,15428,15431,15432],{},"函数参数",[268,15425,15426],{},"类型不同","  或者 ",[268,15429,15430],{},"个数不同"," 或者 ",[268,15433,15434],{},"顺序不同",[170,15436,15437,15440],{},[268,15438,15439],{},"注意:","  函数的返回值不可以作为函数重载的条件",[58,15442,15444],{"className":11429,"code":15443,"language":11431,"meta":63,"style":63},"\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",[65,15445,15446,15451,15459,15463,15476,15480,15494,15498,15511,15515,15530,15534,15547,15551,15572,15576,15589,15593,15613,15617,15630,15634,15638,15643,15648,15653,15658,15663,15667,15671,15679,15683,15689,15699,15709,15723,15738,15742,15752,15756,15764],{"__ignoreMap":63},[68,15447,15448],{"class":70,"line":71},[68,15449,15450],{"class":302},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[68,15452,15453,15455,15457],{"class":70,"line":82},[68,15454,6853],{"class":316},[68,15456,12873],{"class":74},[68,15458,3466],{"class":78},[68,15460,15461],{"class":70,"line":98},[68,15462,3038],{"class":78},[68,15464,15465,15467,15469,15472,15474],{"class":70,"line":104},[68,15466,8018],{"class":78},[68,15468,2670],{"class":316},[68,15470,15471],{"class":1742}," \"func 的调用！\"",[68,15473,2937],{"class":316},[68,15475,10329],{"class":78},[68,15477,15478],{"class":70,"line":112},[68,15479,101],{"class":78},[68,15481,15482,15484,15486,15488,15490,15492],{"class":70,"line":124},[68,15483,6853],{"class":316},[68,15485,12873],{"class":74},[68,15487,1640],{"class":78},[68,15489,1643],{"class":316},[68,15491,2891],{"class":6705},[68,15493,1646],{"class":78},[68,15495,15496],{"class":70,"line":1496},[68,15497,3038],{"class":78},[68,15499,15500,15502,15504,15507,15509],{"class":70,"line":1502},[68,15501,8018],{"class":78},[68,15503,2670],{"class":316},[68,15505,15506],{"class":1742}," \"func (int a) 的调用！\"",[68,15508,2937],{"class":316},[68,15510,10329],{"class":78},[68,15512,15513],{"class":70,"line":1510},[68,15514,101],{"class":78},[68,15516,15517,15519,15521,15523,15526,15528],{"class":70,"line":1521},[68,15518,6853],{"class":316},[68,15520,12873],{"class":74},[68,15522,1640],{"class":78},[68,15524,15525],{"class":316},"double",[68,15527,2891],{"class":6705},[68,15529,1646],{"class":78},[68,15531,15532],{"class":70,"line":3103},[68,15533,3038],{"class":78},[68,15535,15536,15538,15540,15543,15545],{"class":70,"line":3108},[68,15537,8018],{"class":78},[68,15539,2670],{"class":316},[68,15541,15542],{"class":1742}," \"func (double a)的调用！\"",[68,15544,2937],{"class":316},[68,15546,10329],{"class":78},[68,15548,15549],{"class":70,"line":3114},[68,15550,101],{"class":78},[68,15552,15553,15555,15557,15559,15561,15563,15566,15568,15570],{"class":70,"line":3119},[68,15554,6853],{"class":316},[68,15556,12873],{"class":74},[68,15558,1640],{"class":78},[68,15560,1643],{"class":316},[68,15562,2891],{"class":6705},[68,15564,15565],{"class":78}," ,",[68,15567,15525],{"class":316},[68,15569,4323],{"class":6705},[68,15571,1646],{"class":78},[68,15573,15574],{"class":70,"line":3133},[68,15575,3038],{"class":78},[68,15577,15578,15580,15582,15585,15587],{"class":70,"line":3138},[68,15579,8018],{"class":78},[68,15581,2670],{"class":316},[68,15583,15584],{"class":1742}," \"func (int a ,double b) 的调用！\"",[68,15586,2937],{"class":316},[68,15588,10329],{"class":78},[68,15590,15591],{"class":70,"line":3144},[68,15592,101],{"class":78},[68,15594,15595,15597,15599,15601,15603,15605,15607,15609,15611],{"class":70,"line":3165},[68,15596,6853],{"class":316},[68,15598,12873],{"class":74},[68,15600,1640],{"class":78},[68,15602,15525],{"class":316},[68,15604,2891],{"class":6705},[68,15606,15565],{"class":78},[68,15608,1643],{"class":316},[68,15610,4323],{"class":6705},[68,15612,1646],{"class":78},[68,15614,15615],{"class":70,"line":3170},[68,15616,3038],{"class":78},[68,15618,15619,15621,15623,15626,15628],{"class":70,"line":3184},[68,15620,8018],{"class":78},[68,15622,2670],{"class":316},[68,15624,15625],{"class":1742}," \"func (double a ,int b)的调用！\"",[68,15627,2937],{"class":316},[68,15629,10329],{"class":78},[68,15631,15632],{"class":70,"line":3189},[68,15633,101],{"class":78},[68,15635,15636],{"class":70,"line":3218},[68,15637,3890],{"emptyLinePlaceholder":1567},[68,15639,15640],{"class":70,"line":3223},[68,15641,15642],{"class":302},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[68,15644,15645],{"class":70,"line":3240},[68,15646,15647],{"class":302},"\u002F\u002Fint func(double a, int b)\n",[68,15649,15650],{"class":70,"line":3245},[68,15651,15652],{"class":302},"\u002F\u002F{\n",[68,15654,15655],{"class":70,"line":3250},[68,15656,15657],{"class":302},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[68,15659,15660],{"class":70,"line":3255},[68,15661,15662],{"class":302},"\u002F\u002F}\n",[68,15664,15665],{"class":70,"line":3269},[68,15666,3890],{"emptyLinePlaceholder":1567},[68,15668,15669],{"class":70,"line":3274},[68,15670,3890],{"emptyLinePlaceholder":1567},[68,15672,15673,15675,15677],{"class":70,"line":4067},[68,15674,1643],{"class":316},[68,15676,3463],{"class":74},[68,15678,12341],{"class":78},[68,15680,15681],{"class":70,"line":4081},[68,15682,3890],{"emptyLinePlaceholder":1567},[68,15684,15685,15687],{"class":70,"line":4089},[68,15686,14773],{"class":74},[68,15688,7125],{"class":78},[68,15690,15691,15693,15695,15697],{"class":70,"line":4094},[68,15692,14773],{"class":74},[68,15694,1640],{"class":78},[68,15696,313],{"class":85},[68,15698,4209],{"class":78},[68,15700,15701,15703,15705,15707],{"class":70,"line":4100},[68,15702,14773],{"class":74},[68,15704,1640],{"class":78},[68,15706,1688],{"class":85},[68,15708,4209],{"class":78},[68,15710,15711,15713,15715,15717,15719,15721],{"class":70,"line":4106},[68,15712,14773],{"class":74},[68,15714,1640],{"class":78},[68,15716,313],{"class":85},[68,15718,2007],{"class":78},[68,15720,1688],{"class":85},[68,15722,4209],{"class":78},[68,15724,15725,15727,15729,15731,15734,15736],{"class":70,"line":4111},[68,15726,14773],{"class":74},[68,15728,1640],{"class":78},[68,15730,1688],{"class":85},[68,15732,15733],{"class":78}," , ",[68,15735,313],{"class":85},[68,15737,4209],{"class":78},[68,15739,15740],{"class":70,"line":9437},[68,15741,14698],{"class":78},[68,15743,15744,15746,15748,15750],{"class":70,"line":9461},[68,15745,3793],{"class":74},[68,15747,1640],{"class":78},[68,15749,3798],{"class":1742},[68,15751,4209],{"class":78},[68,15753,15754],{"class":70,"line":9466},[68,15755,3890],{"emptyLinePlaceholder":1567},[68,15757,15758,15760,15762],{"class":70,"line":9472},[68,15759,5580],{"class":316},[68,15761,5583],{"class":85},[68,15763,95],{"class":78},[68,15765,15766],{"class":70,"line":9499},[68,15767,101],{"class":78},[170,15769,15770],{},"重点：函数返回值不可以作为函数重载条件！",[19,15772,15774],{"id":15773},"_732注意事项","7.3.2注意事项",[24,15776,15777,15780],{},[27,15778,15779],{},"引用作为重载条件!!!",[27,15781,15782],{},"函数重载碰到函数默认参数",[58,15784,15786],{"className":1628,"code":15785,"language":1630,"meta":63,"style":63},"\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",[65,15787,15788,15793,15798,15802,15818,15822,15835,15839,15843,15861,15865,15878,15882,15886,15890,15895,15899,15923,15927,15940,15944,15948,15962,15966,15979,15983,15987,15995,15999,16011,16021,16034,16038,16042,16050,16054,16064,16068,16076],{"__ignoreMap":63},[68,15789,15790],{"class":70,"line":71},[68,15791,15792],{"class":302},"\u002F\u002F函数重载注意事项\n",[68,15794,15795],{"class":70,"line":82},[68,15796,15797],{"class":302},"\u002F\u002F1、引用作为重载条件\n",[68,15799,15800],{"class":70,"line":98},[68,15801,3890],{"emptyLinePlaceholder":1567},[68,15803,15804,15806,15808,15810,15812,15814,15816],{"class":70,"line":104},[68,15805,6853],{"class":316},[68,15807,12873],{"class":74},[68,15809,1640],{"class":78},[68,15811,1643],{"class":316},[68,15813,12072],{"class":316},[68,15815,1867],{"class":6705},[68,15817,1646],{"class":78},[68,15819,15820],{"class":70,"line":112},[68,15821,3038],{"class":78},[68,15823,15824,15826,15828,15831,15833],{"class":70,"line":124},[68,15825,8018],{"class":78},[68,15827,2670],{"class":316},[68,15829,15830],{"class":1742}," \"func (int &a) 调用 \"",[68,15832,2937],{"class":316},[68,15834,10329],{"class":78},[68,15836,15837],{"class":70,"line":1496},[68,15838,101],{"class":78},[68,15840,15841],{"class":70,"line":1502},[68,15842,3890],{"emptyLinePlaceholder":1567},[68,15844,15845,15847,15849,15851,15853,15855,15857,15859],{"class":70,"line":1510},[68,15846,6853],{"class":316},[68,15848,12873],{"class":74},[68,15850,1640],{"class":78},[68,15852,8281],{"class":316},[68,15854,3872],{"class":316},[68,15856,12072],{"class":316},[68,15858,1867],{"class":6705},[68,15860,1646],{"class":78},[68,15862,15863],{"class":70,"line":1521},[68,15864,3038],{"class":78},[68,15866,15867,15869,15871,15874,15876],{"class":70,"line":3103},[68,15868,8018],{"class":78},[68,15870,2670],{"class":316},[68,15872,15873],{"class":1742}," \"func (const int &a) 调用 \"",[68,15875,2937],{"class":316},[68,15877,10329],{"class":78},[68,15879,15880],{"class":70,"line":3108},[68,15881,101],{"class":78},[68,15883,15884],{"class":70,"line":3114},[68,15885,3890],{"emptyLinePlaceholder":1567},[68,15887,15888],{"class":70,"line":3119},[68,15889,3890],{"emptyLinePlaceholder":1567},[68,15891,15892],{"class":70,"line":3133},[68,15893,15894],{"class":302},"\u002F\u002F2、函数重载碰到函数默认参数\n",[68,15896,15897],{"class":70,"line":3138},[68,15898,3890],{"emptyLinePlaceholder":1567},[68,15900,15901,15903,15905,15907,15909,15911,15913,15915,15917,15919,15921],{"class":70,"line":3144},[68,15902,6853],{"class":316},[68,15904,15106],{"class":74},[68,15906,1640],{"class":78},[68,15908,1643],{"class":316},[68,15910,2891],{"class":6705},[68,15912,13923],{"class":78},[68,15914,1643],{"class":316},[68,15916,4323],{"class":6705},[68,15918,15052],{"class":316},[68,15920,3528],{"class":85},[68,15922,1646],{"class":78},[68,15924,15925],{"class":70,"line":3165},[68,15926,3038],{"class":78},[68,15928,15929,15931,15933,15936,15938],{"class":70,"line":3170},[68,15930,8018],{"class":78},[68,15932,2670],{"class":316},[68,15934,15935],{"class":1742}," \"func2(int a, int b = 10) 调用\"",[68,15937,2937],{"class":316},[68,15939,10329],{"class":78},[68,15941,15942],{"class":70,"line":3184},[68,15943,101],{"class":78},[68,15945,15946],{"class":70,"line":3189},[68,15947,3890],{"emptyLinePlaceholder":1567},[68,15949,15950,15952,15954,15956,15958,15960],{"class":70,"line":3218},[68,15951,6853],{"class":316},[68,15953,15106],{"class":74},[68,15955,1640],{"class":78},[68,15957,1643],{"class":316},[68,15959,2891],{"class":6705},[68,15961,1646],{"class":78},[68,15963,15964],{"class":70,"line":3223},[68,15965,3038],{"class":78},[68,15967,15968,15970,15972,15975,15977],{"class":70,"line":3240},[68,15969,8018],{"class":78},[68,15971,2670],{"class":316},[68,15973,15974],{"class":1742}," \"func2(int a) 调用\"",[68,15976,2937],{"class":316},[68,15978,10329],{"class":78},[68,15980,15981],{"class":70,"line":3245},[68,15982,101],{"class":78},[68,15984,15985],{"class":70,"line":3250},[68,15986,3890],{"emptyLinePlaceholder":1567},[68,15988,15989,15991,15993],{"class":70,"line":3255},[68,15990,1643],{"class":316},[68,15992,3463],{"class":74},[68,15994,12341],{"class":78},[68,15996,15997],{"class":70,"line":3269},[68,15998,14698],{"class":78},[68,16000,16001,16003,16005,16007,16009],{"class":70,"line":3274},[68,16002,3475],{"class":316},[68,16004,12357],{"class":78},[68,16006,1685],{"class":316},[68,16008,3528],{"class":85},[68,16010,95],{"class":78},[68,16012,16013,16015,16018],{"class":70,"line":4067},[68,16014,14773],{"class":74},[68,16016,16017],{"class":78},"(a);",[68,16019,16020],{"class":302}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[68,16022,16023,16025,16027,16029,16031],{"class":70,"line":4081},[68,16024,14773],{"class":74},[68,16026,1640],{"class":78},[68,16028,313],{"class":85},[68,16030,7455],{"class":78},[68,16032,16033],{"class":302},"\u002F\u002F调用有const   10是个常量\n",[68,16035,16036],{"class":70,"line":4089},[68,16037,3890],{"emptyLinePlaceholder":1567},[68,16039,16040],{"class":70,"line":4094},[68,16041,3890],{"emptyLinePlaceholder":1567},[68,16043,16044,16047],{"class":70,"line":4100},[68,16045,16046],{"class":302},"    \u002F\u002Ffunc2(10);",[68,16048,16049],{"class":302}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[68,16051,16052],{"class":70,"line":4106},[68,16053,3890],{"emptyLinePlaceholder":1567},[68,16055,16056,16058,16060,16062],{"class":70,"line":4111},[68,16057,3793],{"class":74},[68,16059,1640],{"class":78},[68,16061,3798],{"class":1742},[68,16063,4209],{"class":78},[68,16065,16066],{"class":70,"line":9437},[68,16067,3890],{"emptyLinePlaceholder":1567},[68,16069,16070,16072,16074],{"class":70,"line":9461},[68,16071,5580],{"class":316},[68,16073,5583],{"class":85},[68,16075,95],{"class":78},[68,16077,16078],{"class":70,"line":9466},[68,16079,101],{"class":78},[1553,16081,16082],{},"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":63,"searchDepth":82,"depth":82,"links":16084},[16085,16086,16087],{"id":15017,"depth":82,"text":15018},{"id":15274,"depth":82,"text":15275},{"id":15396,"depth":82,"text":15397,"children":16088},[16089,16090],{"id":15403,"depth":98,"text":15404},{"id":15773,"depth":98,"text":15774},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15009,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16097,"title":16098,"body":16099,"description":24851,"extension":1565,"meta":24852,"navigation":1567,"path":24853,"seo":24854,"stem":24855,"__hash__":24856},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16100,"toc":24832},[16101,16104,16110,16117,16122,16125,16128,16131,16135,16139,16142,16145,16153,16158,16161,16168,16173,16332,16335,16588,16591,16594,16597,16602,16605,16608,16619,16624,16860,16864,16874,16877,16885,17032,17036,17039,17042,17046,17490,17494,17502,17510,18422,18429,18434,19062,19065,19068,19071,19190,19193,19280,19283,19409,19412,19506,19509,19862,19866,19874,19878,19885,19888,19891,19902,19908,19913,19925,19933,19953,19961,19978,20164,20167,20171,20174,20177,20180,20183,20186,20189,20192,20652,20658,20662,20665,20676,21263,21266,21755,21759,21762,21765,21768,21771,21774,21782,22178,22182,22185,22188,22635,22638,22641,22646,22649,22654,22657,22661,22664,22666,22672,22675,22981,22991,23032,23036,23039,23041,23074,23077,23384,23386,23401,23404,23427,23436,23442,23445,23449,23452,23455,23460,23471,23476,23484,23488,23618,23621,23624,23799,23804,24016,24020,24023,24137,24142,24381,24385,24389,24392,24395,24400,24505,24508,24511,24514,24518,24629,24632,24635,24640,24692,24695,24698,24703,24749,24752,24757,24825,24827,24830],[10,16102,16098],{"id":16103},"_8类和对象",[170,16105,16106,16107],{},"C++面向对象的三大特性为",[268,16108,16109],{},"封装、继承、多态",[170,16111,16112,16113,16116],{},"C++认为",[268,16114,16115],{},"万事万物都皆为对象","，对象上有其属性和行为",[170,16118,16119],{},[268,16120,16121],{},"例如：",[170,16123,16124],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[170,16126,16127],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[170,16129,16130],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16132,16134],{"id":16133},"_81封装","8.1封装",[19,16136,16138],{"id":16137},"_811封装的意义","8.1.1封装的意义",[170,16140,16141],{},"封装是C++面向对象三大特性之一",[170,16143,16144],{},"封装的意义：",[24,16146,16147,16150],{},[27,16148,16149],{},"将属性和行为作为一个整体，表现生活中的事物",[27,16151,16152],{},"将属性和行为加以权限控制",[170,16154,16155],{},[268,16156,16157],{},"封装意义一：",[170,16159,16160],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[170,16162,16163,15283,16165],{},[268,16164,409],{},[65,16166,16167],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[263,16169,16170],{},[27,16171,16172],{},"**示例1：**设计一个圆类，求圆的周长",[58,16174,16176],{"className":1628,"code":16175,"language":1630,"meta":63,"style":63},"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",[65,16177,16178,16186,16190,16195,16200,16205,16210,16217,16222,16232,16236,16254,16258,16262,16270,16274,16279,16284,16289,16294,16305,16328],{"__ignoreMap":63},[68,16179,16180,16183],{"class":70,"line":71},[68,16181,16182],{"class":316},"class",[68,16184,16185],{"class":74}," Circle\n",[68,16187,16188],{"class":70,"line":82},[68,16189,3038],{"class":78},[68,16191,16192],{"class":70,"line":98},[68,16193,16194],{"class":302},"    \u002F\u002F访问权限\n",[68,16196,16197],{"class":70,"line":104},[68,16198,16199],{"class":302},"    \u002F\u002F公共权限\n",[68,16201,16202],{"class":70,"line":112},[68,16203,16204],{"class":316},"public:\n",[68,16206,16207],{"class":70,"line":124},[68,16208,16209],{"class":302},"    \u002F\u002F属性\n",[68,16211,16212,16214],{"class":70,"line":1496},[68,16213,3475],{"class":316},[68,16215,16216],{"class":78}," m_r;\n",[68,16218,16219],{"class":70,"line":1502},[68,16220,16221],{"class":302},"    \u002F\u002F行为\n",[68,16223,16224,16227,16230],{"class":70,"line":1510},[68,16225,16226],{"class":316},"    double",[68,16228,16229],{"class":74}," calculateZC",[68,16231,3466],{"class":78},[68,16233,16234],{"class":70,"line":1521},[68,16235,3520],{"class":78},[68,16237,16238,16241,16244,16246,16249,16251],{"class":70,"line":3103},[68,16239,16240],{"class":316},"        return",[68,16242,16243],{"class":85}," 2",[68,16245,2083],{"class":316},[68,16247,16248],{"class":78},"PI",[68,16250,2083],{"class":316},[68,16252,16253],{"class":78},"m_r;\n",[68,16255,16256],{"class":70,"line":3108},[68,16257,3677],{"class":78},[68,16259,16260],{"class":70,"line":3114},[68,16261,5485],{"class":78},[68,16263,16264,16266,16268],{"class":70,"line":3119},[68,16265,1643],{"class":316},[68,16267,3463],{"class":74},[68,16269,3466],{"class":78},[68,16271,16272],{"class":70,"line":3133},[68,16273,3038],{"class":78},[68,16275,16276],{"class":70,"line":3138},[68,16277,16278],{"class":302},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[68,16280,16281],{"class":70,"line":3144},[68,16282,16283],{"class":302},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[68,16285,16286],{"class":70,"line":3165},[68,16287,16288],{"class":78},"    Circle c1;\n",[68,16290,16291],{"class":70,"line":3170},[68,16292,16293],{"class":302},"    \u002F\u002F给圆对象 的属性进行赋值\n",[68,16295,16296,16299,16301,16303],{"class":70,"line":3184},[68,16297,16298],{"class":78},"    c1.m_r",[68,16300,1685],{"class":316},[68,16302,313],{"class":85},[68,16304,95],{"class":78},[68,16306,16307,16309,16311,16314,16316,16319,16322,16324,16326],{"class":70,"line":3189},[68,16308,3043],{"class":78},[68,16310,2670],{"class":316},[68,16312,16313],{"class":1742},"\"圆的周长\"",[68,16315,2670],{"class":316},[68,16317,16318],{"class":78},"c1.",[68,16320,16321],{"class":74},"calculateZC",[68,16323,3917],{"class":78},[68,16325,2670],{"class":316},[68,16327,2692],{"class":78},[68,16329,16330],{"class":70,"line":3218},[68,16331,101],{"class":78},[170,16333,16334],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[58,16336,16338],{"className":1628,"code":16337,"language":1630,"meta":63,"style":63},"#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",[65,16339,16340,16346,16356,16362,16368,16372,16376,16381,16388,16393,16411,16415,16425,16429,16434,16450,16454,16464,16468,16473,16481,16485,16517,16521,16525,16533,16537,16542,16547,16561,16575,16584],{"__ignoreMap":63},[68,16341,16342,16344],{"class":70,"line":71},[68,16343,3440],{"class":316},[68,16345,3443],{"class":1742},[68,16347,16348,16350,16352,16354],{"class":70,"line":82},[68,16349,3448],{"class":316},[68,16351,3451],{"class":316},[68,16353,3454],{"class":74},[68,16355,95],{"class":78},[68,16357,16358,16360],{"class":70,"line":98},[68,16359,3440],{"class":316},[68,16361,9238],{"class":1742},[68,16363,16364,16366],{"class":70,"line":104},[68,16365,16182],{"class":316},[68,16367,9251],{"class":74},[68,16369,16370],{"class":70,"line":112},[68,16371,3038],{"class":78},[68,16373,16374],{"class":70,"line":124},[68,16375,16204],{"class":316},[68,16377,16378],{"class":70,"line":1496},[68,16379,16380],{"class":78},"    string m_name;\n",[68,16382,16383,16385],{"class":70,"line":1502},[68,16384,3475],{"class":316},[68,16386,16387],{"class":78}," m_id;\n",[68,16389,16390],{"class":70,"line":1510},[68,16391,16392],{"class":302},"    \u002F\u002F赋值姓名\n",[68,16394,16395,16398,16401,16403,16406,16409],{"class":70,"line":1521},[68,16396,16397],{"class":316},"    void",[68,16399,16400],{"class":74}," setName",[68,16402,1640],{"class":78},[68,16404,16405],{"class":74},"string",[68,16407,16408],{"class":6705}," name",[68,16410,1646],{"class":78},[68,16412,16413],{"class":70,"line":3103},[68,16414,3520],{"class":78},[68,16416,16417,16420,16422],{"class":70,"line":3108},[68,16418,16419],{"class":78},"        m_name",[68,16421,1685],{"class":316},[68,16423,16424],{"class":78},"name;\n",[68,16426,16427],{"class":70,"line":3114},[68,16428,3677],{"class":78},[68,16430,16431],{"class":70,"line":3119},[68,16432,16433],{"class":302},"    \u002F\u002F赋值学号\n",[68,16435,16436,16438,16441,16443,16445,16448],{"class":70,"line":3133},[68,16437,16397],{"class":316},[68,16439,16440],{"class":74}," setId",[68,16442,1640],{"class":78},[68,16444,1643],{"class":316},[68,16446,16447],{"class":6705}," id",[68,16449,1646],{"class":78},[68,16451,16452],{"class":70,"line":3138},[68,16453,3520],{"class":78},[68,16455,16456,16459,16461],{"class":70,"line":3144},[68,16457,16458],{"class":78},"        m_id",[68,16460,1685],{"class":316},[68,16462,16463],{"class":78},"id;\n",[68,16465,16466],{"class":70,"line":3165},[68,16467,3677],{"class":78},[68,16469,16470],{"class":70,"line":3170},[68,16471,16472],{"class":302},"    \u002F\u002F打印学生信息\n",[68,16474,16475,16477,16479],{"class":70,"line":3184},[68,16476,16397],{"class":316},[68,16478,11103],{"class":74},[68,16480,3466],{"class":78},[68,16482,16483],{"class":70,"line":3189},[68,16484,3520],{"class":78},[68,16486,16487,16489,16491,16494,16496,16499,16501,16503,16505,16508,16510,16513,16515],{"class":70,"line":3218},[68,16488,4941],{"class":78},[68,16490,2670],{"class":316},[68,16492,16493],{"class":1742},"\"姓名：\"",[68,16495,2670],{"class":316},[68,16497,16498],{"class":78},"m_name",[68,16500,2670],{"class":316},[68,16502,5849],{"class":1742},[68,16504,2670],{"class":316},[68,16506,16507],{"class":1742},"\"学号：\"",[68,16509,2670],{"class":316},[68,16511,16512],{"class":78},"m_id",[68,16514,2670],{"class":316},[68,16516,2692],{"class":78},[68,16518,16519],{"class":70,"line":3223},[68,16520,3677],{"class":78},[68,16522,16523],{"class":70,"line":3240},[68,16524,5485],{"class":78},[68,16526,16527,16529,16531],{"class":70,"line":3245},[68,16528,1643],{"class":316},[68,16530,3463],{"class":74},[68,16532,3466],{"class":78},[68,16534,16535],{"class":70,"line":3250},[68,16536,3038],{"class":78},[68,16538,16539],{"class":70,"line":3255},[68,16540,16541],{"class":302},"    \u002F\u002F实例化\n",[68,16543,16544],{"class":70,"line":3269},[68,16545,16546],{"class":78},"    Student s1;\n",[68,16548,16549,16552,16555,16557,16559],{"class":70,"line":3274},[68,16550,16551],{"class":78},"    s1.",[68,16553,16554],{"class":74},"setName",[68,16556,1640],{"class":78},[68,16558,9405],{"class":1742},[68,16560,4209],{"class":78},[68,16562,16563,16565,16568,16570,16573],{"class":70,"line":4067},[68,16564,16551],{"class":78},[68,16566,16567],{"class":74},"setId",[68,16569,1640],{"class":78},[68,16571,16572],{"class":85},"123456",[68,16574,4209],{"class":78},[68,16576,16577,16579,16582],{"class":70,"line":4081},[68,16578,16551],{"class":78},[68,16580,16581],{"class":74},"printInfo",[68,16583,7125],{"class":78},[68,16585,16586],{"class":70,"line":4089},[68,16587,101],{"class":78},[170,16589,16590],{},"类中的属性和行为统称为成员",[170,16592,16593],{},"属性：成员属性(成员变量)",[170,16595,16596],{},"方法：成员函数(成员方法)",[170,16598,16599],{},[268,16600,16601],{},"封装意义二：",[170,16603,16604],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[170,16606,16607],{},"访问权限有三种：",[263,16609,16610,16613,16616],{},[27,16611,16612],{},"public        公共权限",[27,16614,16615],{},"protected 保护权限",[27,16617,16618],{},"private      私有权限",[170,16620,16621],{},[268,16622,16623],{},"示例：",[58,16625,16627],{"className":11429,"code":16626,"language":11431,"meta":63,"style":63},"\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",[65,16628,16629,16634,16639,16644,16649,16653,16660,16664,16669,16673,16678,16682,16687,16692,16697,16701,16706,16711,16718,16722,16726,16734,16738,16749,16761,16773,16777,16781,16785,16793,16797,16802,16814,16822,16830,16834,16844,16848,16856],{"__ignoreMap":63},[68,16630,16631],{"class":70,"line":71},[68,16632,16633],{"class":302},"\u002F\u002F三种权限\n",[68,16635,16636],{"class":70,"line":82},[68,16637,16638],{"class":302},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[68,16640,16641],{"class":70,"line":98},[68,16642,16643],{"class":302},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[68,16645,16646],{"class":70,"line":104},[68,16647,16648],{"class":302},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[68,16650,16651],{"class":70,"line":112},[68,16652,3890],{"emptyLinePlaceholder":1567},[68,16654,16655,16657],{"class":70,"line":124},[68,16656,16182],{"class":316},[68,16658,16659],{"class":74}," Person\n",[68,16661,16662],{"class":70,"line":1496},[68,16663,3038],{"class":78},[68,16665,16666],{"class":70,"line":1502},[68,16667,16668],{"class":302},"    \u002F\u002F姓名  公共权限\n",[68,16670,16671],{"class":70,"line":1510},[68,16672,16204],{"class":316},[68,16674,16675],{"class":70,"line":1521},[68,16676,16677],{"class":78},"    string m_Name;\n",[68,16679,16680],{"class":70,"line":3103},[68,16681,3890],{"emptyLinePlaceholder":1567},[68,16683,16684],{"class":70,"line":3108},[68,16685,16686],{"class":302},"    \u002F\u002F汽车  保护权限\n",[68,16688,16689],{"class":70,"line":3114},[68,16690,16691],{"class":316},"protected:\n",[68,16693,16694],{"class":70,"line":3119},[68,16695,16696],{"class":78},"    string m_Car;\n",[68,16698,16699],{"class":70,"line":3133},[68,16700,3890],{"emptyLinePlaceholder":1567},[68,16702,16703],{"class":70,"line":3138},[68,16704,16705],{"class":302},"    \u002F\u002F银行卡密码  私有权限\n",[68,16707,16708],{"class":70,"line":3144},[68,16709,16710],{"class":316},"private:\n",[68,16712,16713,16715],{"class":70,"line":3165},[68,16714,3475],{"class":316},[68,16716,16717],{"class":78}," m_Password;\n",[68,16719,16720],{"class":70,"line":3170},[68,16721,3890],{"emptyLinePlaceholder":1567},[68,16723,16724],{"class":70,"line":3184},[68,16725,16204],{"class":316},[68,16727,16728,16730,16732],{"class":70,"line":3189},[68,16729,16397],{"class":316},[68,16731,12873],{"class":74},[68,16733,3466],{"class":78},[68,16735,16736],{"class":70,"line":3218},[68,16737,3520],{"class":78},[68,16739,16740,16743,16745,16747],{"class":70,"line":3223},[68,16741,16742],{"class":78},"        m_Name ",[68,16744,1685],{"class":316},[68,16746,10427],{"class":1742},[68,16748,95],{"class":78},[68,16750,16751,16754,16756,16759],{"class":70,"line":3240},[68,16752,16753],{"class":78},"        m_Car ",[68,16755,1685],{"class":316},[68,16757,16758],{"class":1742}," \"拖拉机\"",[68,16760,95],{"class":78},[68,16762,16763,16766,16768,16771],{"class":70,"line":3245},[68,16764,16765],{"class":78},"        m_Password ",[68,16767,1685],{"class":316},[68,16769,16770],{"class":85}," 123456",[68,16772,95],{"class":78},[68,16774,16775],{"class":70,"line":3250},[68,16776,3677],{"class":78},[68,16778,16779],{"class":70,"line":3255},[68,16780,5485],{"class":78},[68,16782,16783],{"class":70,"line":3269},[68,16784,3890],{"emptyLinePlaceholder":1567},[68,16786,16787,16789,16791],{"class":70,"line":3274},[68,16788,1643],{"class":316},[68,16790,3463],{"class":74},[68,16792,12341],{"class":78},[68,16794,16795],{"class":70,"line":4067},[68,16796,3890],{"emptyLinePlaceholder":1567},[68,16798,16799],{"class":70,"line":4081},[68,16800,16801],{"class":78},"    Person p;\n",[68,16803,16804,16807,16809,16812],{"class":70,"line":4089},[68,16805,16806],{"class":78},"    p.m_Name ",[68,16808,1685],{"class":316},[68,16810,16811],{"class":1742}," \"李四\"",[68,16813,95],{"class":78},[68,16815,16816,16819],{"class":70,"line":4094},[68,16817,16818],{"class":302},"    \u002F\u002Fp.m_Car = \"奔驰\";",[68,16820,16821],{"class":302},"  \u002F\u002F保护权限类外访问不到\n",[68,16823,16824,16827],{"class":70,"line":4100},[68,16825,16826],{"class":302},"    \u002F\u002Fp.m_Password = 123;",[68,16828,16829],{"class":302}," \u002F\u002F私有权限类外访问不到\n",[68,16831,16832],{"class":70,"line":4106},[68,16833,3890],{"emptyLinePlaceholder":1567},[68,16835,16836,16838,16840,16842],{"class":70,"line":4111},[68,16837,3793],{"class":74},[68,16839,1640],{"class":78},[68,16841,3798],{"class":1742},[68,16843,4209],{"class":78},[68,16845,16846],{"class":70,"line":9437},[68,16847,3890],{"emptyLinePlaceholder":1567},[68,16849,16850,16852,16854],{"class":70,"line":9461},[68,16851,5580],{"class":316},[68,16853,5583],{"class":85},[68,16855,95],{"class":78},[68,16857,16858],{"class":70,"line":9466},[68,16859,101],{"class":78},[19,16861,16863],{"id":16862},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[170,16865,16866,16867,16870,16871],{},"在C++中 struct和class唯一的",[268,16868,16869],{},"区别","就在于 ",[268,16872,16873],{},"默认的访问权限不同",[170,16875,16876],{},"区别：",[24,16878,16879,16882],{},[27,16880,16881],{},"struct 默认权限为公共",[27,16883,16884],{},"class   默认权限为私有",[58,16886,16888],{"className":11429,"code":16887,"language":11431,"meta":63,"style":63},"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",[65,16889,16890,16897,16901,16911,16915,16919,16926,16930,16940,16944,16948,16956,16960,16965,16979,16983,16988,17002,17006,17016,17020,17028],{"__ignoreMap":63},[68,16891,16892,16894],{"class":70,"line":71},[68,16893,16182],{"class":316},[68,16895,16896],{"class":74}," C1\n",[68,16898,16899],{"class":70,"line":82},[68,16900,3038],{"class":78},[68,16902,16903,16905,16908],{"class":70,"line":98},[68,16904,3475],{"class":316},[68,16906,16907],{"class":78},"  m_A;",[68,16909,16910],{"class":302}," \u002F\u002F默认是私有权限\n",[68,16912,16913],{"class":70,"line":104},[68,16914,5485],{"class":78},[68,16916,16917],{"class":70,"line":112},[68,16918,3890],{"emptyLinePlaceholder":1567},[68,16920,16921,16923],{"class":70,"line":124},[68,16922,9248],{"class":316},[68,16924,16925],{"class":74}," C2\n",[68,16927,16928],{"class":70,"line":1496},[68,16929,3038],{"class":78},[68,16931,16932,16934,16937],{"class":70,"line":1502},[68,16933,3475],{"class":316},[68,16935,16936],{"class":78}," m_A;",[68,16938,16939],{"class":302},"  \u002F\u002F默认是公共权限\n",[68,16941,16942],{"class":70,"line":1510},[68,16943,5485],{"class":78},[68,16945,16946],{"class":70,"line":1521},[68,16947,3890],{"emptyLinePlaceholder":1567},[68,16949,16950,16952,16954],{"class":70,"line":3103},[68,16951,1643],{"class":316},[68,16953,3463],{"class":74},[68,16955,12341],{"class":78},[68,16957,16958],{"class":70,"line":3108},[68,16959,3890],{"emptyLinePlaceholder":1567},[68,16961,16962],{"class":70,"line":3114},[68,16963,16964],{"class":78},"    C1 c1;\n",[68,16966,16967,16970,16972,16974,16976],{"class":70,"line":3119},[68,16968,16969],{"class":78},"    c1.m_A ",[68,16971,1685],{"class":316},[68,16973,3528],{"class":85},[68,16975,1694],{"class":78},[68,16977,16978],{"class":302}," \u002F\u002F错误，访问权限是私有\n",[68,16980,16981],{"class":70,"line":3133},[68,16982,3890],{"emptyLinePlaceholder":1567},[68,16984,16985],{"class":70,"line":3138},[68,16986,16987],{"class":78},"    C2 c2;\n",[68,16989,16990,16993,16995,16997,16999],{"class":70,"line":3144},[68,16991,16992],{"class":78},"    c2.m_A ",[68,16994,1685],{"class":316},[68,16996,3528],{"class":85},[68,16998,1694],{"class":78},[68,17000,17001],{"class":302}," \u002F\u002F正确，访问权限是公共\n",[68,17003,17004],{"class":70,"line":3165},[68,17005,3890],{"emptyLinePlaceholder":1567},[68,17007,17008,17010,17012,17014],{"class":70,"line":3170},[68,17009,3793],{"class":74},[68,17011,1640],{"class":78},[68,17013,3798],{"class":1742},[68,17015,4209],{"class":78},[68,17017,17018],{"class":70,"line":3184},[68,17019,3890],{"emptyLinePlaceholder":1567},[68,17021,17022,17024,17026],{"class":70,"line":3189},[68,17023,5580],{"class":316},[68,17025,5583],{"class":85},[68,17027,95],{"class":78},[68,17029,17030],{"class":70,"line":3218},[68,17031,101],{"class":78},[19,17033,17035],{"id":17034},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[170,17037,17038],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[170,17040,17041],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[170,17043,17044],{},[268,17045,16623],{},[58,17047,17049],{"className":11429,"code":17048,"language":11431,"meta":63,"style":63},"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",[65,17050,17051,17060,17064,17068,17073,17087,17096,17100,17110,17114,17121,17125,17129,17133,17138,17147,17154,17158,17163,17179,17202,17215,17222,17226,17235,17239,17243,17248,17264,17274,17278,17282,17286,17294,17298,17308,17312,17320,17324,17328,17336,17340,17344,17349,17362,17385,17389,17394,17407,17429,17433,17438,17452,17460,17464,17474,17478,17486],{"__ignoreMap":63},[68,17052,17053,17055,17058],{"class":70,"line":71},[68,17054,16182],{"class":316},[68,17056,17057],{"class":74}," Person",[68,17059,79],{"class":78},[68,17061,17062],{"class":70,"line":82},[68,17063,16204],{"class":316},[68,17065,17066],{"class":70,"line":98},[68,17067,3890],{"emptyLinePlaceholder":1567},[68,17069,17070],{"class":70,"line":104},[68,17071,17072],{"class":302},"    \u002F\u002F姓名设置可读可写\n",[68,17074,17075,17077,17079,17081,17083,17085],{"class":70,"line":112},[68,17076,16397],{"class":316},[68,17078,16400],{"class":74},[68,17080,1640],{"class":78},[68,17082,16405],{"class":74},[68,17084,16408],{"class":6705},[68,17086,13930],{"class":78},[68,17088,17089,17091,17093],{"class":70,"line":124},[68,17090,16742],{"class":78},[68,17092,1685],{"class":316},[68,17094,17095],{"class":78}," name;\n",[68,17097,17098],{"class":70,"line":1496},[68,17099,3677],{"class":78},[68,17101,17102,17105,17108],{"class":70,"line":1502},[68,17103,17104],{"class":74},"    string",[68,17106,17107],{"class":74}," getName",[68,17109,3466],{"class":78},[68,17111,17112],{"class":70,"line":1510},[68,17113,3520],{"class":78},[68,17115,17116,17118],{"class":70,"line":1521},[68,17117,16240],{"class":316},[68,17119,17120],{"class":78}," m_Name;\n",[68,17122,17123],{"class":70,"line":3103},[68,17124,3677],{"class":78},[68,17126,17127],{"class":70,"line":3108},[68,17128,3890],{"emptyLinePlaceholder":1567},[68,17130,17131],{"class":70,"line":3114},[68,17132,3890],{"emptyLinePlaceholder":1567},[68,17134,17135],{"class":70,"line":3119},[68,17136,17137],{"class":302},"    \u002F\u002F获取年龄 \n",[68,17139,17140,17142,17145],{"class":70,"line":3133},[68,17141,3475],{"class":316},[68,17143,17144],{"class":74}," getAge",[68,17146,12341],{"class":78},[68,17148,17149,17151],{"class":70,"line":3138},[68,17150,16240],{"class":316},[68,17152,17153],{"class":78}," m_Age;\n",[68,17155,17156],{"class":70,"line":3144},[68,17157,3677],{"class":78},[68,17159,17160],{"class":70,"line":3165},[68,17161,17162],{"class":302},"    \u002F\u002F设置年龄\n",[68,17164,17165,17167,17170,17172,17174,17177],{"class":70,"line":3170},[68,17166,16397],{"class":316},[68,17168,17169],{"class":74}," setAge",[68,17171,1640],{"class":78},[68,17173,1643],{"class":316},[68,17175,17176],{"class":6705}," age",[68,17178,13930],{"class":78},[68,17180,17181,17183,17186,17188,17190,17192,17195,17197,17200],{"class":70,"line":3184},[68,17182,3987],{"class":316},[68,17184,17185],{"class":78}," (age ",[68,17187,2537],{"class":316},[68,17189,5583],{"class":85},[68,17191,4745],{"class":316},[68,17193,17194],{"class":78}," age ",[68,17196,2587],{"class":316},[68,17198,17199],{"class":85}," 150",[68,17201,13930],{"class":78},[68,17203,17204,17206,17208,17211,17213],{"class":70,"line":3189},[68,17205,11207],{"class":78},[68,17207,2670],{"class":316},[68,17209,17210],{"class":1742}," \"你个老妖精!\"",[68,17212,2937],{"class":316},[68,17214,10329],{"class":78},[68,17216,17217,17220],{"class":70,"line":3218},[68,17218,17219],{"class":316},"            return",[68,17221,95],{"class":78},[68,17223,17224],{"class":70,"line":3223},[68,17225,4019],{"class":78},[68,17227,17228,17231,17233],{"class":70,"line":3240},[68,17229,17230],{"class":78},"        m_Age ",[68,17232,1685],{"class":316},[68,17234,9286],{"class":78},[68,17236,17237],{"class":70,"line":3245},[68,17238,3677],{"class":78},[68,17240,17241],{"class":70,"line":3250},[68,17242,3890],{"emptyLinePlaceholder":1567},[68,17244,17245],{"class":70,"line":3255},[68,17246,17247],{"class":302},"    \u002F\u002F情人设置为只写\n",[68,17249,17250,17252,17255,17257,17259,17262],{"class":70,"line":3269},[68,17251,16397],{"class":316},[68,17253,17254],{"class":74}," setLover",[68,17256,1640],{"class":78},[68,17258,16405],{"class":74},[68,17260,17261],{"class":6705}," lover",[68,17263,13930],{"class":78},[68,17265,17266,17269,17271],{"class":70,"line":3274},[68,17267,17268],{"class":78},"        m_Lover ",[68,17270,1685],{"class":316},[68,17272,17273],{"class":78}," lover;\n",[68,17275,17276],{"class":70,"line":4067},[68,17277,3677],{"class":78},[68,17279,17280],{"class":70,"line":4081},[68,17281,3890],{"emptyLinePlaceholder":1567},[68,17283,17284],{"class":70,"line":4089},[68,17285,16710],{"class":316},[68,17287,17288,17291],{"class":70,"line":4094},[68,17289,17290],{"class":78},"    string m_Name;",[68,17292,17293],{"class":302}," \u002F\u002F可读可写  姓名\n",[68,17295,17296],{"class":70,"line":4100},[68,17297,14698],{"class":78},[68,17299,17300,17302,17305],{"class":70,"line":4106},[68,17301,3475],{"class":316},[68,17303,17304],{"class":78}," m_Age;",[68,17306,17307],{"class":302}," \u002F\u002F只读  年龄\n",[68,17309,17310],{"class":70,"line":4111},[68,17311,3890],{"emptyLinePlaceholder":1567},[68,17313,17314,17317],{"class":70,"line":9437},[68,17315,17316],{"class":78},"    string m_Lover;",[68,17318,17319],{"class":302}," \u002F\u002F只写  情人\n",[68,17321,17322],{"class":70,"line":9461},[68,17323,5485],{"class":78},[68,17325,17326],{"class":70,"line":9466},[68,17327,3890],{"emptyLinePlaceholder":1567},[68,17329,17330,17332,17334],{"class":70,"line":9472},[68,17331,1643],{"class":316},[68,17333,3463],{"class":74},[68,17335,12341],{"class":78},[68,17337,17338],{"class":70,"line":9499},[68,17339,3890],{"emptyLinePlaceholder":1567},[68,17341,17342],{"class":70,"line":9504},[68,17343,16801],{"class":78},[68,17345,17346],{"class":70,"line":9510},[68,17347,17348],{"class":302},"    \u002F\u002F姓名设置\n",[68,17350,17351,17354,17356,17358,17360],{"class":70,"line":9522},[68,17352,17353],{"class":78},"    p.",[68,17355,16554],{"class":74},[68,17357,1640],{"class":78},[68,17359,9405],{"class":1742},[68,17361,4209],{"class":78},[68,17363,17364,17366,17368,17371,17373,17376,17379,17381,17383],{"class":70,"line":9534},[68,17365,8018],{"class":78},[68,17367,2670],{"class":316},[68,17369,17370],{"class":1742}," \"姓名： \"",[68,17372,2937],{"class":316},[68,17374,17375],{"class":78}," p.",[68,17377,17378],{"class":74},"getName",[68,17380,14538],{"class":78},[68,17382,2670],{"class":316},[68,17384,10329],{"class":78},[68,17386,17387],{"class":70,"line":9546},[68,17388,3890],{"emptyLinePlaceholder":1567},[68,17390,17391],{"class":70,"line":11204},[68,17392,17393],{"class":302},"    \u002F\u002F年龄设置\n",[68,17395,17396,17398,17401,17403,17405],{"class":70,"line":11229},[68,17397,17353],{"class":78},[68,17399,17400],{"class":74},"setAge",[68,17402,1640],{"class":78},[68,17404,2284],{"class":85},[68,17406,4209],{"class":78},[68,17408,17409,17411,17413,17416,17418,17420,17423,17425,17427],{"class":70,"line":11252},[68,17410,8018],{"class":78},[68,17412,2670],{"class":316},[68,17414,17415],{"class":1742}," \"年龄： \"",[68,17417,2937],{"class":316},[68,17419,17375],{"class":78},[68,17421,17422],{"class":74},"getAge",[68,17424,14538],{"class":78},[68,17426,2670],{"class":316},[68,17428,10329],{"class":78},[68,17430,17431],{"class":70,"line":11276},[68,17432,3890],{"emptyLinePlaceholder":1567},[68,17434,17435],{"class":70,"line":11281},[68,17436,17437],{"class":302},"    \u002F\u002F情人设置\n",[68,17439,17440,17442,17445,17447,17450],{"class":70,"line":11286},[68,17441,17353],{"class":78},[68,17443,17444],{"class":74},"setLover",[68,17446,1640],{"class":78},[68,17448,17449],{"class":1742},"\"苍井\"",[68,17451,4209],{"class":78},[68,17453,17454,17457],{"class":70,"line":11291},[68,17455,17456],{"class":302},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[68,17458,17459],{"class":302},"  \u002F\u002F只写属性，不可以读取\n",[68,17461,17462],{"class":70,"line":11300},[68,17463,3890],{"emptyLinePlaceholder":1567},[68,17465,17466,17468,17470,17472],{"class":70,"line":11305},[68,17467,3793],{"class":74},[68,17469,1640],{"class":78},[68,17471,3798],{"class":1742},[68,17473,4209],{"class":78},[68,17475,17476],{"class":70,"line":11311},[68,17477,3890],{"emptyLinePlaceholder":1567},[68,17479,17480,17482,17484],{"class":70,"line":11332},[68,17481,5580],{"class":316},[68,17483,5583],{"class":85},[68,17485,95],{"class":78},[68,17487,17488],{"class":70,"line":11338},[68,17489,101],{"class":78},[19,17491,17493],{"id":17492},"_814封装案例","8.1.4封装案例",[263,17495,17496],{},[27,17497,17498,17501],{},[268,17499,17500],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[24,17503,17504,17507],{},[27,17505,17506],{},"求出立方体的面积和体积",[27,17508,17509],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[58,17511,17513],{"className":1628,"code":17512,"language":1630,"meta":63,"style":63},"#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",[65,17514,17515,17521,17531,17538,17542,17546,17551,17581,17585,17595,17605,17615,17619,17628,17632,17668,17672,17681,17685,17701,17705,17710,17719,17723,17730,17734,17743,17747,17754,17758,17767,17771,17778,17782,17787,17804,17808,17854,17858,17867,17871,17875,17879,17888,17892,17896,17901,17905,17911,17917,17923,17927,17931,17936,17958,17962,18016,18020,18028,18032,18037,18042,18055,18062,18078,18089,18095,18118,18124,18147,18161,18181,18187,18198,18221,18243,18248,18254,18268,18281,18286,18300,18305,18311,18316,18330,18335,18340,18354,18366,18371,18384,18389,18394,18399,18412,18417],{"__ignoreMap":63},[68,17516,17517,17519],{"class":70,"line":71},[68,17518,3440],{"class":316},[68,17520,3443],{"class":1742},[68,17522,17523,17525,17527,17529],{"class":70,"line":82},[68,17524,3448],{"class":316},[68,17526,3451],{"class":316},[68,17528,3454],{"class":74},[68,17530,95],{"class":78},[68,17532,17533,17535],{"class":70,"line":98},[68,17534,16182],{"class":316},[68,17536,17537],{"class":74}," Cube\n",[68,17539,17540],{"class":70,"line":104},[68,17541,3038],{"class":78},[68,17543,17544],{"class":70,"line":112},[68,17545,16204],{"class":316},[68,17547,17548],{"class":70,"line":124},[68,17549,17550],{"class":302},"    \u002F\u002F输入长宽高\n",[68,17552,17553,17555,17558,17560,17562,17565,17567,17569,17572,17574,17576,17579],{"class":70,"line":1496},[68,17554,16397],{"class":316},[68,17556,17557],{"class":74}," setLwh",[68,17559,1640],{"class":78},[68,17561,1643],{"class":316},[68,17563,17564],{"class":6705}," l",[68,17566,2007],{"class":78},[68,17568,1643],{"class":316},[68,17570,17571],{"class":6705}," w",[68,17573,2007],{"class":78},[68,17575,1643],{"class":316},[68,17577,17578],{"class":6705}," h",[68,17580,1646],{"class":78},[68,17582,17583],{"class":70,"line":1502},[68,17584,3520],{"class":78},[68,17586,17587,17590,17592],{"class":70,"line":1510},[68,17588,17589],{"class":78},"        m_L",[68,17591,1685],{"class":316},[68,17593,17594],{"class":78},"l;\n",[68,17596,17597,17600,17602],{"class":70,"line":1521},[68,17598,17599],{"class":78},"        m_W",[68,17601,1685],{"class":316},[68,17603,17604],{"class":78},"w;\n",[68,17606,17607,17610,17612],{"class":70,"line":3103},[68,17608,17609],{"class":78},"        m_H",[68,17611,1685],{"class":316},[68,17613,17614],{"class":78},"h;\n",[68,17616,17617],{"class":70,"line":3108},[68,17618,3677],{"class":78},[68,17620,17621,17623,17626],{"class":70,"line":3114},[68,17622,3475],{"class":316},[68,17624,17625],{"class":74}," mianji",[68,17627,3466],{"class":78},[68,17629,17630],{"class":70,"line":3119},[68,17631,3520],{"class":78},[68,17633,17634,17636,17638,17640,17643,17645,17648,17650,17653,17655,17658,17660,17663,17665],{"class":70,"line":3133},[68,17635,16240],{"class":316},[68,17637,16243],{"class":85},[68,17639,2083],{"class":316},[68,17641,17642],{"class":78},"(m_L",[68,17644,2083],{"class":316},[68,17646,17647],{"class":78},"m_W ",[68,17649,2109],{"class":316},[68,17651,17652],{"class":78}," m_L",[68,17654,2083],{"class":316},[68,17656,17657],{"class":78},"m_H ",[68,17659,2109],{"class":316},[68,17661,17662],{"class":78}," m_W",[68,17664,2083],{"class":316},[68,17666,17667],{"class":78},"m_H);\n",[68,17669,17670],{"class":70,"line":3138},[68,17671,3677],{"class":78},[68,17673,17674,17676,17679],{"class":70,"line":3144},[68,17675,3475],{"class":316},[68,17677,17678],{"class":74}," tiji",[68,17680,3466],{"class":78},[68,17682,17683],{"class":70,"line":3165},[68,17684,3520],{"class":78},[68,17686,17687,17689,17691,17693,17696,17698],{"class":70,"line":3170},[68,17688,16240],{"class":316},[68,17690,17652],{"class":78},[68,17692,2083],{"class":316},[68,17694,17695],{"class":78},"m_W",[68,17697,2083],{"class":316},[68,17699,17700],{"class":78},"m_H;\n",[68,17702,17703],{"class":70,"line":3184},[68,17704,3677],{"class":78},[68,17706,17707],{"class":70,"line":3189},[68,17708,17709],{"class":302},"    \u002F\u002F获取长宽高\n",[68,17711,17712,17714,17717],{"class":70,"line":3218},[68,17713,3475],{"class":316},[68,17715,17716],{"class":74}," getLength",[68,17718,3466],{"class":78},[68,17720,17721],{"class":70,"line":3223},[68,17722,3520],{"class":78},[68,17724,17725,17727],{"class":70,"line":3240},[68,17726,16240],{"class":316},[68,17728,17729],{"class":78}," m_L;\n",[68,17731,17732],{"class":70,"line":3245},[68,17733,3677],{"class":78},[68,17735,17736,17738,17741],{"class":70,"line":3250},[68,17737,3475],{"class":316},[68,17739,17740],{"class":74}," getWidth",[68,17742,3466],{"class":78},[68,17744,17745],{"class":70,"line":3255},[68,17746,3520],{"class":78},[68,17748,17749,17751],{"class":70,"line":3269},[68,17750,16240],{"class":316},[68,17752,17753],{"class":78}," m_W;\n",[68,17755,17756],{"class":70,"line":3274},[68,17757,3677],{"class":78},[68,17759,17760,17762,17765],{"class":70,"line":4067},[68,17761,3475],{"class":316},[68,17763,17764],{"class":74}," getHeight",[68,17766,3466],{"class":78},[68,17768,17769],{"class":70,"line":4081},[68,17770,3520],{"class":78},[68,17772,17773,17775],{"class":70,"line":4089},[68,17774,16240],{"class":316},[68,17776,17777],{"class":78}," m_H;\n",[68,17779,17780],{"class":70,"line":4094},[68,17781,3677],{"class":78},[68,17783,17784],{"class":70,"line":4100},[68,17785,17786],{"class":302},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[68,17788,17789,17792,17795,17797,17800,17802],{"class":70,"line":4106},[68,17790,17791],{"class":316},"    bool",[68,17793,17794],{"class":74}," isEqual",[68,17796,1640],{"class":78},[68,17798,17799],{"class":74},"Cube",[68,17801,4339],{"class":6705},[68,17803,1646],{"class":78},[68,17805,17806],{"class":70,"line":4111},[68,17807,3520],{"class":78},[68,17809,17810,17812,17815,17818,17820,17822,17825,17827,17830,17833,17835,17837,17840,17842,17844,17847,17849,17851],{"class":70,"line":9437},[68,17811,3987],{"class":316},[68,17813,17814],{"class":78}," (c.",[68,17816,17817],{"class":74},"getLength",[68,17819,14538],{"class":78},[68,17821,4439],{"class":316},[68,17823,17824],{"class":78}," m_L ",[68,17826,3206],{"class":316},[68,17828,17829],{"class":78}," c.",[68,17831,17832],{"class":74},"getWidth",[68,17834,14538],{"class":78},[68,17836,4439],{"class":316},[68,17838,17839],{"class":78}," m_W ",[68,17841,3206],{"class":316},[68,17843,17829],{"class":78},[68,17845,17846],{"class":74},"getHeight",[68,17848,14538],{"class":78},[68,17850,4439],{"class":316},[68,17852,17853],{"class":78}," m_H)\n",[68,17855,17856],{"class":70,"line":9461},[68,17857,4000],{"class":78},[68,17859,17860,17862,17865],{"class":70,"line":9466},[68,17861,17219],{"class":316},[68,17863,17864],{"class":85}," true",[68,17866,95],{"class":78},[68,17868,17869],{"class":70,"line":9472},[68,17870,4019],{"class":78},[68,17872,17873],{"class":70,"line":9499},[68,17874,4060],{"class":316},[68,17876,17877],{"class":70,"line":9504},[68,17878,4000],{"class":78},[68,17880,17881,17883,17886],{"class":70,"line":9510},[68,17882,17219],{"class":316},[68,17884,17885],{"class":85}," false",[68,17887,95],{"class":78},[68,17889,17890],{"class":70,"line":9522},[68,17891,4019],{"class":78},[68,17893,17894],{"class":70,"line":9534},[68,17895,3677],{"class":78},[68,17897,17898],{"class":70,"line":9546},[68,17899,17900],{"class":302},"    \u002F\u002F私有属性\n",[68,17902,17903],{"class":70,"line":11204},[68,17904,16710],{"class":316},[68,17906,17907,17909],{"class":70,"line":11229},[68,17908,3475],{"class":316},[68,17910,17729],{"class":78},[68,17912,17913,17915],{"class":70,"line":11252},[68,17914,3475],{"class":316},[68,17916,17753],{"class":78},[68,17918,17919,17921],{"class":70,"line":11276},[68,17920,3475],{"class":316},[68,17922,17777],{"class":78},[68,17924,17925],{"class":70,"line":11281},[68,17926,3890],{"emptyLinePlaceholder":1567},[68,17928,17929],{"class":70,"line":11286},[68,17930,5485],{"class":78},[68,17932,17933],{"class":70,"line":11291},[68,17934,17935],{"class":302},"\u002F\u002F全局函数判断两个立方体是否相等\n",[68,17937,17938,17940,17942,17944,17946,17949,17951,17953,17956],{"class":70,"line":11300},[68,17939,2847],{"class":316},[68,17941,17794],{"class":74},[68,17943,1640],{"class":78},[68,17945,17799],{"class":74},[68,17947,17948],{"class":6705}," c1",[68,17950,2007],{"class":78},[68,17952,17799],{"class":74},[68,17954,17955],{"class":6705}," c2",[68,17957,1646],{"class":78},[68,17959,17960],{"class":70,"line":11305},[68,17961,3038],{"class":78},[68,17963,17964,17966,17969,17971,17973,17975,17978,17980,17983,17985,17987,17989,17991,17993,17995,17997,17999,18001,18003,18005,18007,18009,18011,18013],{"class":70,"line":11311},[68,17965,5580],{"class":316},[68,17967,17968],{"class":78}," (c1.",[68,17970,17817],{"class":74},[68,17972,14538],{"class":78},[68,17974,4439],{"class":316},[68,17976,17977],{"class":78}," c2.",[68,17979,17817],{"class":74},[68,17981,17982],{"class":78},"()) ",[68,17984,3206],{"class":316},[68,17986,17968],{"class":78},[68,17988,17832],{"class":74},[68,17990,14538],{"class":78},[68,17992,4439],{"class":316},[68,17994,17977],{"class":78},[68,17996,17832],{"class":74},[68,17998,17982],{"class":78},[68,18000,3206],{"class":316},[68,18002,17968],{"class":78},[68,18004,17846],{"class":74},[68,18006,14538],{"class":78},[68,18008,4439],{"class":316},[68,18010,17977],{"class":78},[68,18012,17846],{"class":74},[68,18014,18015],{"class":78},"());\n",[68,18017,18018],{"class":70,"line":11332},[68,18019,101],{"class":78},[68,18021,18022,18024,18026],{"class":70,"line":11338},[68,18023,1643],{"class":316},[68,18025,3463],{"class":74},[68,18027,3466],{"class":78},[68,18029,18030],{"class":70,"line":11352},[68,18031,3038],{"class":78},[68,18033,18034],{"class":70,"line":11358},[68,18035,18036],{"class":78},"    Cube c1;\n",[68,18038,18039],{"class":70,"line":11385},[68,18040,18041],{"class":302},"    \u002F\u002F输入立方体的长宽高\n",[68,18043,18044,18046,18048,18051,18053],{"class":70,"line":11394},[68,18045,3043],{"class":78},[68,18047,2670],{"class":316},[68,18049,18050],{"class":1742},"\"请输入第一个立方体的长、宽、高：\"",[68,18052,2670],{"class":316},[68,18054,2692],{"class":78},[68,18056,18057,18059],{"class":70,"line":11400},[68,18058,3475],{"class":316},[68,18060,18061],{"class":78}," l,w,h,l1,w1,h1;\n",[68,18063,18064,18066,18068,18070,18072,18074,18076],{"class":70,"line":11408},[68,18065,3502],{"class":78},[68,18067,2922],{"class":316},[68,18069,2146],{"class":78},[68,18071,2922],{"class":316},[68,18073,2422],{"class":78},[68,18075,2922],{"class":316},[68,18077,17614],{"class":78},[68,18079,18080,18083,18086],{"class":70,"line":11413},[68,18081,18082],{"class":78},"    c1.",[68,18084,18085],{"class":74},"setLwh",[68,18087,18088],{"class":78},"(l,w,h);\n",[68,18090,18092],{"class":70,"line":18091},66,[68,18093,18094],{"class":302},"    \u002F\u002F面积\n",[68,18096,18098,18100,18102,18105,18107,18109,18112,18114,18116],{"class":70,"line":18097},67,[68,18099,3043],{"class":78},[68,18101,2670],{"class":316},[68,18103,18104],{"class":1742},"\"立方体的表面积为：\"",[68,18106,2670],{"class":316},[68,18108,16318],{"class":78},[68,18110,18111],{"class":74},"mianji",[68,18113,3917],{"class":78},[68,18115,2670],{"class":316},[68,18117,2692],{"class":78},[68,18119,18121],{"class":70,"line":18120},68,[68,18122,18123],{"class":302},"    \u002F\u002F体积\n",[68,18125,18127,18129,18131,18134,18136,18138,18141,18143,18145],{"class":70,"line":18126},69,[68,18128,3043],{"class":78},[68,18130,2670],{"class":316},[68,18132,18133],{"class":1742},"\"立方体的体积为：\"",[68,18135,2670],{"class":316},[68,18137,16318],{"class":78},[68,18139,18140],{"class":74},"tiji",[68,18142,3917],{"class":78},[68,18144,2670],{"class":316},[68,18146,2692],{"class":78},[68,18148,18150,18152,18154,18157,18159],{"class":70,"line":18149},70,[68,18151,3043],{"class":78},[68,18153,2670],{"class":316},[68,18155,18156],{"class":1742},"\"请输入第二个立方体的长、宽、高：\"",[68,18158,2670],{"class":316},[68,18160,2692],{"class":78},[68,18162,18164,18166,18168,18171,18173,18176,18178],{"class":70,"line":18163},71,[68,18165,3502],{"class":78},[68,18167,2922],{"class":316},[68,18169,18170],{"class":78},"l1",[68,18172,2922],{"class":316},[68,18174,18175],{"class":78},"w1",[68,18177,2922],{"class":316},[68,18179,18180],{"class":78},"h1;\n",[68,18182,18184],{"class":70,"line":18183},72,[68,18185,18186],{"class":78},"    Cube c2;\n",[68,18188,18190,18193,18195],{"class":70,"line":18189},73,[68,18191,18192],{"class":78},"    c2.",[68,18194,18085],{"class":74},[68,18196,18197],{"class":78},"(l1,w1,h1);\n",[68,18199,18201,18203,18205,18208,18210,18213,18215,18217,18219],{"class":70,"line":18200},74,[68,18202,3043],{"class":78},[68,18204,2670],{"class":316},[68,18206,18207],{"class":1742},"\"第二个立方体的表面积为：\"",[68,18209,2670],{"class":316},[68,18211,18212],{"class":78},"c2.",[68,18214,18111],{"class":74},[68,18216,3917],{"class":78},[68,18218,2670],{"class":316},[68,18220,2692],{"class":78},[68,18222,18224,18226,18228,18231,18233,18235,18237,18239,18241],{"class":70,"line":18223},75,[68,18225,3043],{"class":78},[68,18227,2670],{"class":316},[68,18229,18230],{"class":1742},"\"第二个立方体的体积为：\"",[68,18232,2670],{"class":316},[68,18234,18212],{"class":78},[68,18236,18140],{"class":74},[68,18238,3917],{"class":78},[68,18240,2670],{"class":316},[68,18242,2692],{"class":78},[68,18244,18246],{"class":70,"line":18245},76,[68,18247,3890],{"emptyLinePlaceholder":1567},[68,18249,18251],{"class":70,"line":18250},77,[68,18252,18253],{"class":302},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[68,18255,18257,18259,18261,18264,18266],{"class":70,"line":18256},78,[68,18258,3043],{"class":78},[68,18260,2670],{"class":316},[68,18262,18263],{"class":1742},"\"内部函数判断结果：\"",[68,18265,2670],{"class":316},[68,18267,2692],{"class":78},[68,18269,18271,18273,18275,18278],{"class":70,"line":18270},79,[68,18272,4591],{"class":316},[68,18274,17968],{"class":78},[68,18276,18277],{"class":74},"isEqual",[68,18279,18280],{"class":78},"(c2))\n",[68,18282,18284],{"class":70,"line":18283},80,[68,18285,3520],{"class":78},[68,18287,18289,18291,18293,18296,18298],{"class":70,"line":18288},81,[68,18290,4941],{"class":78},[68,18292,2670],{"class":316},[68,18294,18295],{"class":1742},"\"两个立方体相等\"",[68,18297,2670],{"class":316},[68,18299,2692],{"class":78},[68,18301,18303],{"class":70,"line":18302},82,[68,18304,3677],{"class":78},[68,18306,18308],{"class":70,"line":18307},83,[68,18309,18310],{"class":316},"    else\n",[68,18312,18314],{"class":70,"line":18313},84,[68,18315,3520],{"class":78},[68,18317,18319,18321,18323,18326,18328],{"class":70,"line":18318},85,[68,18320,4941],{"class":78},[68,18322,2670],{"class":316},[68,18324,18325],{"class":1742},"\"两个立方体不相等\"",[68,18327,2670],{"class":316},[68,18329,2692],{"class":78},[68,18331,18333],{"class":70,"line":18332},86,[68,18334,3677],{"class":78},[68,18336,18338],{"class":70,"line":18337},87,[68,18339,3890],{"emptyLinePlaceholder":1567},[68,18341,18343,18345,18347,18350,18352],{"class":70,"line":18342},88,[68,18344,3043],{"class":78},[68,18346,2670],{"class":316},[68,18348,18349],{"class":1742},"\"全局函数判断结果：\"",[68,18351,2670],{"class":316},[68,18353,2692],{"class":78},[68,18355,18357,18359,18361,18363],{"class":70,"line":18356},89,[68,18358,4591],{"class":316},[68,18360,3149],{"class":78},[68,18362,18277],{"class":74},[68,18364,18365],{"class":78},"(c1, c2))\n",[68,18367,18369],{"class":70,"line":18368},90,[68,18370,3520],{"class":78},[68,18372,18374,18376,18378,18380,18382],{"class":70,"line":18373},91,[68,18375,4941],{"class":78},[68,18377,2670],{"class":316},[68,18379,18295],{"class":1742},[68,18381,2670],{"class":316},[68,18383,2692],{"class":78},[68,18385,18387],{"class":70,"line":18386},92,[68,18388,3677],{"class":78},[68,18390,18392],{"class":70,"line":18391},93,[68,18393,18310],{"class":316},[68,18395,18397],{"class":70,"line":18396},94,[68,18398,3520],{"class":78},[68,18400,18402,18404,18406,18408,18410],{"class":70,"line":18401},95,[68,18403,4941],{"class":78},[68,18405,2670],{"class":316},[68,18407,18325],{"class":1742},[68,18409,2670],{"class":316},[68,18411,2692],{"class":78},[68,18413,18415],{"class":70,"line":18414},96,[68,18416,3677],{"class":78},[68,18418,18420],{"class":70,"line":18419},97,[68,18421,101],{"class":78},[263,18423,18424],{"start":82},[27,18425,18426],{},[268,18427,18428],{},"练习案例2：点和圆的关系",[24,18430,18431],{},[27,18432,18433],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[58,18435,18437],{"className":1628,"code":18436,"language":1630,"meta":63,"style":63},"#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",[65,18438,18439,18445,18455,18462,18469,18473,18477,18482,18516,18521,18537,18551,18555,18559,18566,18573,18577,18583,18587,18591,18595,18617,18640,18645,18659,18674,18678,18682,18688,18693,18698,18702,18728,18732,18762,18790,18818,18835,18839,18852,18856,18860,18864,18877,18881,18885,18893,18897,18901,18905,18910,18914,18925,18932,18941,18951,18962,18969,18982,18993,19003,19014,19021,19035,19040,19050,19058],{"__ignoreMap":63},[68,18440,18441,18443],{"class":70,"line":71},[68,18442,3440],{"class":316},[68,18444,3443],{"class":1742},[68,18446,18447,18449,18451,18453],{"class":70,"line":82},[68,18448,3448],{"class":316},[68,18450,3451],{"class":316},[68,18452,3454],{"class":74},[68,18454,95],{"class":78},[68,18456,18457,18459],{"class":70,"line":98},[68,18458,3440],{"class":316},[68,18460,18461],{"class":1742},"\u003Ccmath>\n",[68,18463,18464,18466],{"class":70,"line":104},[68,18465,16182],{"class":316},[68,18467,18468],{"class":74}," Point\n",[68,18470,18471],{"class":70,"line":112},[68,18472,3038],{"class":78},[68,18474,18475],{"class":70,"line":124},[68,18476,16204],{"class":316},[68,18478,18479],{"class":70,"line":1496},[68,18480,18481],{"class":302},"    \u002F\u002F赋值\n",[68,18483,18484,18486,18489,18491,18493,18496,18498,18500,18503,18506,18508,18511,18513],{"class":70,"line":1502},[68,18485,16397],{"class":316},[68,18487,18488],{"class":74}," setPoint",[68,18490,1640],{"class":78},[68,18492,15525],{"class":316},[68,18494,18495],{"class":6705}," x",[68,18497,13923],{"class":78},[68,18499,15525],{"class":316},[68,18501,18502],{"class":6705}," y",[68,18504,18505],{"class":78},") { m_x ",[68,18507,1685],{"class":316},[68,18509,18510],{"class":78}," x; m_y ",[68,18512,1685],{"class":316},[68,18514,18515],{"class":78}," y; }\n",[68,18517,18518],{"class":70,"line":1510},[68,18519,18520],{"class":302},"    \u002F\u002F获取坐标\n",[68,18522,18523,18525,18528,18531,18534],{"class":70,"line":1521},[68,18524,16226],{"class":316},[68,18526,18527],{"class":74}," getX",[68,18529,18530],{"class":78},"() { ",[68,18532,18533],{"class":316},"return",[68,18535,18536],{"class":78}," m_x; }\n",[68,18538,18539,18541,18544,18546,18548],{"class":70,"line":3103},[68,18540,16226],{"class":316},[68,18542,18543],{"class":74}," getY",[68,18545,18530],{"class":78},[68,18547,18533],{"class":316},[68,18549,18550],{"class":78}," m_y; }\n",[68,18552,18553],{"class":70,"line":3108},[68,18554,3890],{"emptyLinePlaceholder":1567},[68,18556,18557],{"class":70,"line":3114},[68,18558,16710],{"class":316},[68,18560,18561,18563],{"class":70,"line":3119},[68,18562,16226],{"class":316},[68,18564,18565],{"class":78}," m_x;\n",[68,18567,18568,18570],{"class":70,"line":3133},[68,18569,16226],{"class":316},[68,18571,18572],{"class":78}," m_y;\n",[68,18574,18575],{"class":70,"line":3138},[68,18576,5485],{"class":78},[68,18578,18579,18581],{"class":70,"line":3144},[68,18580,16182],{"class":316},[68,18582,16185],{"class":74},[68,18584,18585],{"class":70,"line":3165},[68,18586,3038],{"class":78},[68,18588,18589],{"class":70,"line":3170},[68,18590,16204],{"class":316},[68,18592,18593],{"class":70,"line":3184},[68,18594,18481],{"class":302},[68,18596,18597,18599,18602,18604,18606,18609,18612,18614],{"class":70,"line":3189},[68,18598,16397],{"class":316},[68,18600,18601],{"class":74}," setRadius",[68,18603,1640],{"class":78},[68,18605,15525],{"class":316},[68,18607,18608],{"class":6705}," r",[68,18610,18611],{"class":78},") { m_r ",[68,18613,1685],{"class":316},[68,18615,18616],{"class":78}," r; }\n",[68,18618,18619,18621,18624,18626,18629,18632,18635,18637],{"class":70,"line":3218},[68,18620,16397],{"class":316},[68,18622,18623],{"class":74}," setCenter",[68,18625,1640],{"class":78},[68,18627,18628],{"class":74},"Point",[68,18630,18631],{"class":6705}," center",[68,18633,18634],{"class":78},") { m_center ",[68,18636,1685],{"class":316},[68,18638,18639],{"class":78}," center; }\n",[68,18641,18642],{"class":70,"line":3223},[68,18643,18644],{"class":302},"    \u002F\u002F获取属性\n",[68,18646,18647,18649,18652,18654,18656],{"class":70,"line":3240},[68,18648,16226],{"class":316},[68,18650,18651],{"class":74}," getRadius",[68,18653,18530],{"class":78},[68,18655,18533],{"class":316},[68,18657,18658],{"class":78}," m_r; }\n",[68,18660,18661,18664,18667,18669,18671],{"class":70,"line":3245},[68,18662,18663],{"class":74},"    Point",[68,18665,18666],{"class":74}," getCenter",[68,18668,18530],{"class":78},[68,18670,18533],{"class":316},[68,18672,18673],{"class":78}," m_center; }\n",[68,18675,18676],{"class":70,"line":3250},[68,18677,3890],{"emptyLinePlaceholder":1567},[68,18679,18680],{"class":70,"line":3255},[68,18681,16710],{"class":316},[68,18683,18684,18686],{"class":70,"line":3269},[68,18685,16226],{"class":316},[68,18687,16216],{"class":78},[68,18689,18690],{"class":70,"line":3274},[68,18691,18692],{"class":302},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[68,18694,18695],{"class":70,"line":4067},[68,18696,18697],{"class":78},"    Point m_center;\n",[68,18699,18700],{"class":70,"line":4081},[68,18701,5485],{"class":78},[68,18703,18704,18706,18709,18711,18714,18716,18718,18720,18722,18724,18726],{"class":70,"line":4089},[68,18705,6853],{"class":316},[68,18707,18708],{"class":74}," isInCircle",[68,18710,1640],{"class":78},[68,18712,18713],{"class":74},"Circle",[68,18715,12072],{"class":316},[68,18717,1917],{"class":6705},[68,18719,2007],{"class":78},[68,18721,18628],{"class":74},[68,18723,12072],{"class":316},[68,18725,170],{"class":6705},[68,18727,1646],{"class":78},[68,18729,18730],{"class":70,"line":4094},[68,18731,3038],{"class":78},[68,18733,18734,18736,18739,18741,18743,18746,18749,18752,18754,18756,18758,18760],{"class":70,"line":4100},[68,18735,16226],{"class":316},[68,18737,18738],{"class":78}," dx ",[68,18740,1685],{"class":316},[68,18742,17829],{"class":78},[68,18744,18745],{"class":74},"getCenter",[68,18747,18748],{"class":78},"().",[68,18750,18751],{"class":74},"getX",[68,18753,14538],{"class":78},[68,18755,2160],{"class":316},[68,18757,17375],{"class":78},[68,18759,18751],{"class":74},[68,18761,7125],{"class":78},[68,18763,18764,18766,18769,18771,18773,18775,18777,18780,18782,18784,18786,18788],{"class":70,"line":4106},[68,18765,16226],{"class":316},[68,18767,18768],{"class":78}," dy ",[68,18770,1685],{"class":316},[68,18772,17829],{"class":78},[68,18774,18745],{"class":74},[68,18776,18748],{"class":78},[68,18778,18779],{"class":74},"getY",[68,18781,14538],{"class":78},[68,18783,2160],{"class":316},[68,18785,17375],{"class":78},[68,18787,18779],{"class":74},[68,18789,7125],{"class":78},[68,18791,18792,18794,18797,18799,18802,18805,18807,18809,18811,18813,18815],{"class":70,"line":4111},[68,18793,16226],{"class":316},[68,18795,18796],{"class":78}," distance ",[68,18798,1685],{"class":316},[68,18800,18801],{"class":74}," sqrt",[68,18803,18804],{"class":78},"(dx ",[68,18806,2083],{"class":316},[68,18808,18738],{"class":78},[68,18810,2109],{"class":316},[68,18812,18768],{"class":78},[68,18814,2083],{"class":316},[68,18816,18817],{"class":78}," dy);\n",[68,18819,18820,18822,18825,18827,18829,18832],{"class":70,"line":9437},[68,18821,4591],{"class":316},[68,18823,18824],{"class":78}," (distance ",[68,18826,2537],{"class":316},[68,18828,17829],{"class":78},[68,18830,18831],{"class":74},"getRadius",[68,18833,18834],{"class":78},"())\n",[68,18836,18837],{"class":70,"line":9461},[68,18838,3520],{"class":78},[68,18840,18841,18843,18845,18848,18850],{"class":70,"line":9466},[68,18842,11157],{"class":78},[68,18844,2670],{"class":316},[68,18846,18847],{"class":1742}," \"点在圆内\"",[68,18849,2937],{"class":316},[68,18851,10329],{"class":78},[68,18853,18854],{"class":70,"line":9472},[68,18855,3677],{"class":78},[68,18857,18858],{"class":70,"line":9499},[68,18859,18310],{"class":316},[68,18861,18862],{"class":70,"line":9504},[68,18863,3520],{"class":78},[68,18865,18866,18868,18870,18873,18875],{"class":70,"line":9510},[68,18867,11157],{"class":78},[68,18869,2670],{"class":316},[68,18871,18872],{"class":1742}," \"点在圆外\"",[68,18874,2937],{"class":316},[68,18876,10329],{"class":78},[68,18878,18879],{"class":70,"line":9522},[68,18880,3677],{"class":78},[68,18882,18883],{"class":70,"line":9534},[68,18884,101],{"class":78},[68,18886,18887,18889,18891],{"class":70,"line":9546},[68,18888,1643],{"class":316},[68,18890,3463],{"class":74},[68,18892,3466],{"class":78},[68,18894,18895],{"class":70,"line":11204},[68,18896,3038],{"class":78},[68,18898,18899],{"class":70,"line":11229},[68,18900,16541],{"class":302},[68,18902,18903],{"class":70,"line":11252},[68,18904,16288],{"class":78},[68,18906,18907],{"class":70,"line":11276},[68,18908,18909],{"class":78},"    Point p1;\n",[68,18911,18912],{"class":70,"line":11281},[68,18913,18481],{"class":302},[68,18915,18916,18918,18920,18923],{"class":70,"line":11286},[68,18917,3043],{"class":78},[68,18919,2670],{"class":316},[68,18921,18922],{"class":1742},"\"请输入圆的半径：\"",[68,18924,95],{"class":78},[68,18926,18927,18929],{"class":70,"line":11291},[68,18928,16226],{"class":316},[68,18930,18931],{"class":78}," r;\n",[68,18933,18934,18936,18938],{"class":70,"line":11300},[68,18935,3502],{"class":78},[68,18937,2922],{"class":316},[68,18939,18940],{"class":78},"r;\n",[68,18942,18943,18945,18948],{"class":70,"line":11305},[68,18944,18082],{"class":78},[68,18946,18947],{"class":74},"setRadius",[68,18949,18950],{"class":78},"(r);\n",[68,18952,18953,18955,18957,18960],{"class":70,"line":11311},[68,18954,3043],{"class":78},[68,18956,2670],{"class":316},[68,18958,18959],{"class":1742},"\"请输入圆心坐标：\"",[68,18961,95],{"class":78},[68,18963,18964,18966],{"class":70,"line":11332},[68,18965,16226],{"class":316},[68,18967,18968],{"class":78}," x, y;\n",[68,18970,18971,18973,18975,18977,18979],{"class":70,"line":11338},[68,18972,3502],{"class":78},[68,18974,2922],{"class":316},[68,18976,2447],{"class":78},[68,18978,2922],{"class":316},[68,18980,18981],{"class":78},"y;\n",[68,18983,18984,18987,18990],{"class":70,"line":11352},[68,18985,18986],{"class":78},"    p1.",[68,18988,18989],{"class":74},"setPoint",[68,18991,18992],{"class":78},"(x, y);\n",[68,18994,18995,18997,19000],{"class":70,"line":11358},[68,18996,18082],{"class":78},[68,18998,18999],{"class":74},"setCenter",[68,19001,19002],{"class":78},"(p1);\n",[68,19004,19005,19007,19009,19012],{"class":70,"line":11385},[68,19006,3043],{"class":78},[68,19008,2670],{"class":316},[68,19010,19011],{"class":1742},"\"请输入测试点坐标：\"",[68,19013,95],{"class":78},[68,19015,19016,19018],{"class":70,"line":11394},[68,19017,16226],{"class":316},[68,19019,19020],{"class":78}," x1, y1;\n",[68,19022,19023,19025,19027,19030,19032],{"class":70,"line":11400},[68,19024,3502],{"class":78},[68,19026,2922],{"class":316},[68,19028,19029],{"class":78},"x1",[68,19031,2922],{"class":316},[68,19033,19034],{"class":78},"y1;\n",[68,19036,19037],{"class":70,"line":11408},[68,19038,19039],{"class":78},"    Point p2;\n",[68,19041,19042,19045,19047],{"class":70,"line":11413},[68,19043,19044],{"class":78},"    p2.",[68,19046,18989],{"class":74},[68,19048,19049],{"class":78},"(x1, y1);\n",[68,19051,19052,19055],{"class":70,"line":18091},[68,19053,19054],{"class":74},"    isInCircle",[68,19056,19057],{"class":78},"(c1, p2);\n",[68,19059,19060],{"class":70,"line":18097},[68,19061,101],{"class":78},[170,19063,19064],{},"在类中可以让另一个类作为本来的成员",[170,19066,19067],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[170,19069,19070],{},"创建point.h",[58,19072,19074],{"className":1628,"code":19073,"language":1630,"meta":63,"style":63},"#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",[65,19075,19076,19087,19093,19103,19109,19113,19118,19122,19126,19146,19150,19158,19166,19170,19174,19180,19186],{"__ignoreMap":63},[68,19077,19078,19081,19084],{"class":70,"line":71},[68,19079,19080],{"class":316},"#pragma",[68,19082,19083],{"class":74}," once",[68,19085,19086],{"class":302}," \u002F\u002F防止头文件重复包含\n",[68,19088,19089,19091],{"class":70,"line":82},[68,19090,3440],{"class":316},[68,19092,3443],{"class":1742},[68,19094,19095,19097,19099,19101],{"class":70,"line":98},[68,19096,3448],{"class":316},[68,19098,3451],{"class":316},[68,19100,3454],{"class":74},[68,19102,95],{"class":78},[68,19104,19105,19107],{"class":70,"line":104},[68,19106,16182],{"class":316},[68,19108,18468],{"class":74},[68,19110,19111],{"class":70,"line":112},[68,19112,3038],{"class":78},[68,19114,19115],{"class":70,"line":124},[68,19116,19117],{"class":302},"\u002F\u002F做好声明与变量定义就可以\n",[68,19119,19120],{"class":70,"line":1496},[68,19121,16204],{"class":316},[68,19123,19124],{"class":70,"line":1502},[68,19125,18481],{"class":302},[68,19127,19128,19130,19132,19134,19136,19138,19140,19142,19144],{"class":70,"line":1510},[68,19129,16397],{"class":316},[68,19131,18488],{"class":74},[68,19133,1640],{"class":78},[68,19135,15525],{"class":316},[68,19137,18495],{"class":6705},[68,19139,13923],{"class":78},[68,19141,15525],{"class":316},[68,19143,18502],{"class":6705},[68,19145,4209],{"class":78},[68,19147,19148],{"class":70,"line":1521},[68,19149,18520],{"class":302},[68,19151,19152,19154,19156],{"class":70,"line":3103},[68,19153,16226],{"class":316},[68,19155,18527],{"class":74},[68,19157,7125],{"class":78},[68,19159,19160,19162,19164],{"class":70,"line":3108},[68,19161,16226],{"class":316},[68,19163,18543],{"class":74},[68,19165,7125],{"class":78},[68,19167,19168],{"class":70,"line":3114},[68,19169,3890],{"emptyLinePlaceholder":1567},[68,19171,19172],{"class":70,"line":3119},[68,19173,16710],{"class":316},[68,19175,19176,19178],{"class":70,"line":3133},[68,19177,16226],{"class":316},[68,19179,18565],{"class":78},[68,19181,19182,19184],{"class":70,"line":3138},[68,19183,16226],{"class":316},[68,19185,18572],{"class":78},[68,19187,19188],{"class":70,"line":3144},[68,19189,5485],{"class":78},[170,19191,19192],{},"创建point.cpp",[58,19194,19196],{"className":1628,"code":19195,"language":1630,"meta":63,"style":63},"#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",[65,19197,19198,19205,19210,19244,19248,19264],{"__ignoreMap":63},[68,19199,19200,19202],{"class":70,"line":71},[68,19201,3440],{"class":316},[68,19203,19204],{"class":1742},"\u003Cpoint.h>\n",[68,19206,19207],{"class":70,"line":82},[68,19208,19209],{"class":302},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[68,19211,19212,19214,19217,19220,19222,19224,19226,19228,19230,19232,19234,19236,19238,19240,19242],{"class":70,"line":98},[68,19213,16397],{"class":316},[68,19215,19216],{"class":74}," Point",[68,19218,19219],{"class":78},"::",[68,19221,18989],{"class":74},[68,19223,1640],{"class":78},[68,19225,15525],{"class":316},[68,19227,18495],{"class":6705},[68,19229,13923],{"class":78},[68,19231,15525],{"class":316},[68,19233,18502],{"class":6705},[68,19235,18505],{"class":78},[68,19237,1685],{"class":316},[68,19239,18510],{"class":78},[68,19241,1685],{"class":316},[68,19243,18515],{"class":78},[68,19245,19246],{"class":70,"line":104},[68,19247,18520],{"class":302},[68,19249,19250,19252,19254,19256,19258,19260,19262],{"class":70,"line":112},[68,19251,16226],{"class":316},[68,19253,19216],{"class":74},[68,19255,19219],{"class":78},[68,19257,18751],{"class":74},[68,19259,18530],{"class":78},[68,19261,18533],{"class":316},[68,19263,18536],{"class":78},[68,19265,19266,19268,19270,19272,19274,19276,19278],{"class":70,"line":124},[68,19267,16226],{"class":316},[68,19269,19216],{"class":74},[68,19271,19219],{"class":78},[68,19273,18779],{"class":74},[68,19275,18530],{"class":78},[68,19277,18533],{"class":316},[68,19279,18550],{"class":78},[170,19281,19282],{},"创建circle.h",[58,19284,19286],{"className":1628,"code":19285,"language":1630,"meta":63,"style":63},"#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",[65,19287,19288,19295,19301,19311,19317,19323,19327,19331,19335,19349,19363,19367,19375,19383,19387,19391,19397,19401,19405],{"__ignoreMap":63},[68,19289,19290,19292],{"class":70,"line":71},[68,19291,19080],{"class":316},[68,19293,19294],{"class":74}," once\n",[68,19296,19297,19299],{"class":70,"line":82},[68,19298,3440],{"class":316},[68,19300,3443],{"class":1742},[68,19302,19303,19305,19307,19309],{"class":70,"line":98},[68,19304,3448],{"class":316},[68,19306,3451],{"class":316},[68,19308,3454],{"class":74},[68,19310,95],{"class":78},[68,19312,19313,19315],{"class":70,"line":104},[68,19314,3440],{"class":316},[68,19316,19204],{"class":1742},[68,19318,19319,19321],{"class":70,"line":112},[68,19320,16182],{"class":316},[68,19322,16185],{"class":74},[68,19324,19325],{"class":70,"line":124},[68,19326,3038],{"class":78},[68,19328,19329],{"class":70,"line":1496},[68,19330,16204],{"class":316},[68,19332,19333],{"class":70,"line":1502},[68,19334,18481],{"class":302},[68,19336,19337,19339,19341,19343,19345,19347],{"class":70,"line":1510},[68,19338,16397],{"class":316},[68,19340,18601],{"class":74},[68,19342,1640],{"class":78},[68,19344,15525],{"class":316},[68,19346,18608],{"class":6705},[68,19348,4209],{"class":78},[68,19350,19351,19353,19355,19357,19359,19361],{"class":70,"line":1521},[68,19352,16397],{"class":316},[68,19354,18623],{"class":74},[68,19356,1640],{"class":78},[68,19358,18628],{"class":74},[68,19360,18631],{"class":6705},[68,19362,4209],{"class":78},[68,19364,19365],{"class":70,"line":3103},[68,19366,18644],{"class":302},[68,19368,19369,19371,19373],{"class":70,"line":3108},[68,19370,16226],{"class":316},[68,19372,18651],{"class":74},[68,19374,7125],{"class":78},[68,19376,19377,19379,19381],{"class":70,"line":3114},[68,19378,18663],{"class":74},[68,19380,18666],{"class":74},[68,19382,7125],{"class":78},[68,19384,19385],{"class":70,"line":3119},[68,19386,3890],{"emptyLinePlaceholder":1567},[68,19388,19389],{"class":70,"line":3133},[68,19390,16710],{"class":316},[68,19392,19393,19395],{"class":70,"line":3138},[68,19394,16226],{"class":316},[68,19396,16216],{"class":78},[68,19398,19399],{"class":70,"line":3144},[68,19400,18692],{"class":302},[68,19402,19403],{"class":70,"line":3165},[68,19404,18697],{"class":78},[68,19406,19407],{"class":70,"line":3170},[68,19408,5485],{"class":78},[170,19410,19411],{},"创建circle.cpp",[58,19413,19415],{"className":1628,"code":19414,"language":1630,"meta":63,"style":63},"#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",[65,19416,19417,19424,19447,19469,19474,19490],{"__ignoreMap":63},[68,19418,19419,19421],{"class":70,"line":71},[68,19420,3440],{"class":316},[68,19422,19423],{"class":1742},"\u003Ccircle.h>\n",[68,19425,19426,19428,19431,19433,19435,19437,19439,19441,19443,19445],{"class":70,"line":82},[68,19427,6853],{"class":316},[68,19429,19430],{"class":74}," Circle",[68,19432,19219],{"class":78},[68,19434,18947],{"class":74},[68,19436,1640],{"class":78},[68,19438,15525],{"class":316},[68,19440,18608],{"class":6705},[68,19442,18611],{"class":78},[68,19444,1685],{"class":316},[68,19446,18616],{"class":78},[68,19448,19449,19451,19453,19455,19457,19459,19461,19463,19465,19467],{"class":70,"line":98},[68,19450,6853],{"class":316},[68,19452,19430],{"class":74},[68,19454,19219],{"class":78},[68,19456,18999],{"class":74},[68,19458,1640],{"class":78},[68,19460,18628],{"class":74},[68,19462,18631],{"class":6705},[68,19464,18634],{"class":78},[68,19466,1685],{"class":316},[68,19468,18639],{"class":78},[68,19470,19471],{"class":70,"line":104},[68,19472,19473],{"class":302},"\u002F\u002F获取属性\n",[68,19475,19476,19478,19480,19482,19484,19486,19488],{"class":70,"line":112},[68,19477,15525],{"class":316},[68,19479,19430],{"class":74},[68,19481,19219],{"class":78},[68,19483,18831],{"class":74},[68,19485,18530],{"class":78},[68,19487,18533],{"class":316},[68,19489,18658],{"class":78},[68,19491,19492,19494,19496,19498,19500,19502,19504],{"class":70,"line":124},[68,19493,18628],{"class":74},[68,19495,19430],{"class":74},[68,19497,19219],{"class":78},[68,19499,18745],{"class":74},[68,19501,18530],{"class":78},[68,19503,18533],{"class":316},[68,19505,18673],{"class":78},[170,19507,19508],{},"使用封装的类",[58,19510,19512],{"className":1628,"code":19511,"language":1630,"meta":63,"style":63},"#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",[65,19513,19514,19520,19530,19536,19542,19566,19570,19596,19622,19646,19660,19664,19676,19680,19684,19688,19700,19704,19708,19716,19720,19724,19728,19732,19736,19746,19752,19760,19768,19778,19784,19796,19804,19812,19822,19828,19840,19844,19852,19858],{"__ignoreMap":63},[68,19515,19516,19518],{"class":70,"line":71},[68,19517,3440],{"class":316},[68,19519,3443],{"class":1742},[68,19521,19522,19524,19526,19528],{"class":70,"line":82},[68,19523,3448],{"class":316},[68,19525,3451],{"class":316},[68,19527,3454],{"class":74},[68,19529,95],{"class":78},[68,19531,19532,19534],{"class":70,"line":98},[68,19533,3440],{"class":316},[68,19535,19423],{"class":1742},[68,19537,19538,19540],{"class":70,"line":104},[68,19539,3440],{"class":316},[68,19541,19204],{"class":1742},[68,19543,19544,19546,19548,19550,19552,19554,19556,19558,19560,19562,19564],{"class":70,"line":112},[68,19545,6853],{"class":316},[68,19547,18708],{"class":74},[68,19549,1640],{"class":78},[68,19551,18713],{"class":74},[68,19553,12072],{"class":316},[68,19555,1917],{"class":6705},[68,19557,2007],{"class":78},[68,19559,18628],{"class":74},[68,19561,12072],{"class":316},[68,19563,170],{"class":6705},[68,19565,1646],{"class":78},[68,19567,19568],{"class":70,"line":124},[68,19569,3038],{"class":78},[68,19571,19572,19574,19576,19578,19580,19582,19584,19586,19588,19590,19592,19594],{"class":70,"line":1496},[68,19573,16226],{"class":316},[68,19575,18738],{"class":78},[68,19577,1685],{"class":316},[68,19579,17829],{"class":78},[68,19581,18745],{"class":74},[68,19583,18748],{"class":78},[68,19585,18751],{"class":74},[68,19587,14538],{"class":78},[68,19589,2160],{"class":316},[68,19591,17375],{"class":78},[68,19593,18751],{"class":74},[68,19595,7125],{"class":78},[68,19597,19598,19600,19602,19604,19606,19608,19610,19612,19614,19616,19618,19620],{"class":70,"line":1502},[68,19599,16226],{"class":316},[68,19601,18768],{"class":78},[68,19603,1685],{"class":316},[68,19605,17829],{"class":78},[68,19607,18745],{"class":74},[68,19609,18748],{"class":78},[68,19611,18779],{"class":74},[68,19613,14538],{"class":78},[68,19615,2160],{"class":316},[68,19617,17375],{"class":78},[68,19619,18779],{"class":74},[68,19621,7125],{"class":78},[68,19623,19624,19626,19628,19630,19632,19634,19636,19638,19640,19642,19644],{"class":70,"line":1510},[68,19625,16226],{"class":316},[68,19627,18796],{"class":78},[68,19629,1685],{"class":316},[68,19631,18801],{"class":74},[68,19633,18804],{"class":78},[68,19635,2083],{"class":316},[68,19637,18738],{"class":78},[68,19639,2109],{"class":316},[68,19641,18768],{"class":78},[68,19643,2083],{"class":316},[68,19645,18817],{"class":78},[68,19647,19648,19650,19652,19654,19656,19658],{"class":70,"line":1521},[68,19649,4591],{"class":316},[68,19651,18824],{"class":78},[68,19653,2537],{"class":316},[68,19655,17829],{"class":78},[68,19657,18831],{"class":74},[68,19659,18834],{"class":78},[68,19661,19662],{"class":70,"line":3103},[68,19663,3520],{"class":78},[68,19665,19666,19668,19670,19672,19674],{"class":70,"line":3108},[68,19667,11157],{"class":78},[68,19669,2670],{"class":316},[68,19671,18847],{"class":1742},[68,19673,2937],{"class":316},[68,19675,10329],{"class":78},[68,19677,19678],{"class":70,"line":3114},[68,19679,3677],{"class":78},[68,19681,19682],{"class":70,"line":3119},[68,19683,18310],{"class":316},[68,19685,19686],{"class":70,"line":3133},[68,19687,3520],{"class":78},[68,19689,19690,19692,19694,19696,19698],{"class":70,"line":3138},[68,19691,11157],{"class":78},[68,19693,2670],{"class":316},[68,19695,18872],{"class":1742},[68,19697,2937],{"class":316},[68,19699,10329],{"class":78},[68,19701,19702],{"class":70,"line":3144},[68,19703,3677],{"class":78},[68,19705,19706],{"class":70,"line":3165},[68,19707,101],{"class":78},[68,19709,19710,19712,19714],{"class":70,"line":3170},[68,19711,1643],{"class":316},[68,19713,3463],{"class":74},[68,19715,3466],{"class":78},[68,19717,19718],{"class":70,"line":3184},[68,19719,3038],{"class":78},[68,19721,19722],{"class":70,"line":3189},[68,19723,16541],{"class":302},[68,19725,19726],{"class":70,"line":3218},[68,19727,16288],{"class":78},[68,19729,19730],{"class":70,"line":3223},[68,19731,18909],{"class":78},[68,19733,19734],{"class":70,"line":3240},[68,19735,18481],{"class":302},[68,19737,19738,19740,19742,19744],{"class":70,"line":3245},[68,19739,3043],{"class":78},[68,19741,2670],{"class":316},[68,19743,18922],{"class":1742},[68,19745,95],{"class":78},[68,19747,19748,19750],{"class":70,"line":3250},[68,19749,16226],{"class":316},[68,19751,18931],{"class":78},[68,19753,19754,19756,19758],{"class":70,"line":3255},[68,19755,3502],{"class":78},[68,19757,2922],{"class":316},[68,19759,18940],{"class":78},[68,19761,19762,19764,19766],{"class":70,"line":3269},[68,19763,18082],{"class":78},[68,19765,18947],{"class":74},[68,19767,18950],{"class":78},[68,19769,19770,19772,19774,19776],{"class":70,"line":3274},[68,19771,3043],{"class":78},[68,19773,2670],{"class":316},[68,19775,18959],{"class":1742},[68,19777,95],{"class":78},[68,19779,19780,19782],{"class":70,"line":4067},[68,19781,16226],{"class":316},[68,19783,18968],{"class":78},[68,19785,19786,19788,19790,19792,19794],{"class":70,"line":4081},[68,19787,3502],{"class":78},[68,19789,2922],{"class":316},[68,19791,2447],{"class":78},[68,19793,2922],{"class":316},[68,19795,18981],{"class":78},[68,19797,19798,19800,19802],{"class":70,"line":4089},[68,19799,18986],{"class":78},[68,19801,18989],{"class":74},[68,19803,18992],{"class":78},[68,19805,19806,19808,19810],{"class":70,"line":4094},[68,19807,18082],{"class":78},[68,19809,18999],{"class":74},[68,19811,19002],{"class":78},[68,19813,19814,19816,19818,19820],{"class":70,"line":4100},[68,19815,3043],{"class":78},[68,19817,2670],{"class":316},[68,19819,19011],{"class":1742},[68,19821,95],{"class":78},[68,19823,19824,19826],{"class":70,"line":4106},[68,19825,16226],{"class":316},[68,19827,19020],{"class":78},[68,19829,19830,19832,19834,19836,19838],{"class":70,"line":4111},[68,19831,3502],{"class":78},[68,19833,2922],{"class":316},[68,19835,19029],{"class":78},[68,19837,2922],{"class":316},[68,19839,19034],{"class":78},[68,19841,19842],{"class":70,"line":9437},[68,19843,19039],{"class":78},[68,19845,19846,19848,19850],{"class":70,"line":9461},[68,19847,19044],{"class":78},[68,19849,18989],{"class":74},[68,19851,19049],{"class":78},[68,19853,19854,19856],{"class":70,"line":9466},[68,19855,19054],{"class":74},[68,19857,19057],{"class":78},[68,19859,19860],{"class":70,"line":9472},[68,19861,101],{"class":78},[14,19863,19865],{"id":19864},"_82对象的初始化清理","8.2对象的初始化清理",[24,19867,19868,19871],{},[27,19869,19870],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[27,19872,19873],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,19875,19877],{"id":19876},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[170,19879,19880,19881,19884],{},"对象的",[268,19882,19883],{},"初始化和清理","也是两个非常重要的安全问题",[170,19886,19887],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[170,19889,19890],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[170,19892,19893,19894,19897,19898,19901],{},"c++利用了",[268,19895,19896],{},"构造函数","和",[268,19899,19900],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[170,19903,19904,19905],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[268,19906,19907],{},"我们不提供构造和析构，编译器会提供",[170,19909,19910],{},[268,19911,19912],{},"编译器提供的构造函数和析构函数是空实现。",[24,19914,19915,19918],{},[27,19916,19917],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[27,19919,19920,19921,19924],{},"析构函数：主要作用在于对象",[268,19922,19923],{},"销毁前","系统自动调用，执行一些清理工作。",[170,19926,19927,19930],{},[268,19928,19929],{},"构造函数语法：",[65,19931,19932],{},"类名(){}",[263,19934,19935,19938,19941,19944,19947],{},[27,19936,19937],{},"构造函数，没有返回值也不写void",[27,19939,19940],{},"函数名称与类名相同",[27,19942,19943],{},"构造函数可以有参数，因此可以发生重载",[27,19945,19946],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[27,19948,19949,19950,2058],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[65,19951,19952],{},"Person(){}",[170,19954,19955,15283,19958],{},[268,19956,19957],{},"析构函数语法：",[65,19959,19960],{},"~类名(){}",[263,19962,19963,19966,19969,19975],{},[27,19964,19965],{},"析构函数，没有返回值也不写void",[27,19967,19968],{},"函数名称与类名相同,在名称前加上符号  ~",[27,19970,19971,19972],{},"析构函数不可以有参数，因此",[268,19973,19974],{},"不可以发生重载",[27,19976,19977],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[58,19979,19981],{"className":1628,"code":19980,"language":1630,"meta":63,"style":63},"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",[65,19982,19983,19989,19993,19997,20002,20009,20013,20026,20030,20035,20042,20046,20059,20063,20067,20071,20075,20083,20087,20095,20099,20103,20111,20115,20120,20124,20131,20135,20148,20152,20160],{"__ignoreMap":63},[68,19984,19985,19987],{"class":70,"line":71},[68,19986,16182],{"class":316},[68,19988,16659],{"class":74},[68,19990,19991],{"class":70,"line":82},[68,19992,3038],{"class":78},[68,19994,19995],{"class":70,"line":98},[68,19996,16204],{"class":316},[68,19998,19999],{"class":70,"line":104},[68,20000,20001],{"class":302},"    \u002F\u002F构造函数\n",[68,20003,20004,20007],{"class":70,"line":112},[68,20005,20006],{"class":74},"    Person",[68,20008,3466],{"class":78},[68,20010,20011],{"class":70,"line":124},[68,20012,3520],{"class":78},[68,20014,20015,20017,20019,20022,20024],{"class":70,"line":1496},[68,20016,11157],{"class":78},[68,20018,2670],{"class":316},[68,20020,20021],{"class":1742}," \"Person的构造函数调用\"",[68,20023,2937],{"class":316},[68,20025,10329],{"class":78},[68,20027,20028],{"class":70,"line":1502},[68,20029,3677],{"class":78},[68,20031,20032],{"class":70,"line":1510},[68,20033,20034],{"class":302},"    \u002F\u002F析构函数\n",[68,20036,20037,20040],{"class":70,"line":1521},[68,20038,20039],{"class":74},"    ~Person",[68,20041,3466],{"class":78},[68,20043,20044],{"class":70,"line":3103},[68,20045,3520],{"class":78},[68,20047,20048,20050,20052,20055,20057],{"class":70,"line":3108},[68,20049,11157],{"class":78},[68,20051,2670],{"class":316},[68,20053,20054],{"class":1742}," \"Person的析构函数调用\"",[68,20056,2937],{"class":316},[68,20058,10329],{"class":78},[68,20060,20061],{"class":70,"line":3114},[68,20062,3677],{"class":78},[68,20064,20065],{"class":70,"line":3119},[68,20066,3890],{"emptyLinePlaceholder":1567},[68,20068,20069],{"class":70,"line":3133},[68,20070,5485],{"class":78},[68,20072,20073],{"class":70,"line":3138},[68,20074,3890],{"emptyLinePlaceholder":1567},[68,20076,20077,20079,20081],{"class":70,"line":3144},[68,20078,6853],{"class":316},[68,20080,7077],{"class":74},[68,20082,3466],{"class":78},[68,20084,20085],{"class":70,"line":3165},[68,20086,3038],{"class":78},[68,20088,20089,20092],{"class":70,"line":3170},[68,20090,20091],{"class":78},"    Person p;",[68,20093,20094],{"class":302},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[68,20096,20097],{"class":70,"line":3184},[68,20098,101],{"class":78},[68,20100,20101],{"class":70,"line":3189},[68,20102,3890],{"emptyLinePlaceholder":1567},[68,20104,20105,20107,20109],{"class":70,"line":3218},[68,20106,1643],{"class":316},[68,20108,3463],{"class":74},[68,20110,12341],{"class":78},[68,20112,20113],{"class":70,"line":3223},[68,20114,14698],{"class":78},[68,20116,20117],{"class":70,"line":3240},[68,20118,20119],{"class":302},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[68,20121,20122],{"class":70,"line":3245},[68,20123,3890],{"emptyLinePlaceholder":1567},[68,20125,20126,20128],{"class":70,"line":3250},[68,20127,20091],{"class":78},[68,20129,20130],{"class":302},"\u002F\u002F只有构造函数\n",[68,20132,20133],{"class":70,"line":3255},[68,20134,3890],{"emptyLinePlaceholder":1567},[68,20136,20137,20139,20141,20143,20145],{"class":70,"line":3269},[68,20138,3793],{"class":74},[68,20140,1640],{"class":78},[68,20142,3798],{"class":1742},[68,20144,7455],{"class":78},[68,20146,20147],{"class":302},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[68,20149,20150],{"class":70,"line":3274},[68,20151,3890],{"emptyLinePlaceholder":1567},[68,20153,20154,20156,20158],{"class":70,"line":4067},[68,20155,5580],{"class":316},[68,20157,5583],{"class":85},[68,20159,95],{"class":78},[68,20161,20162],{"class":70,"line":4081},[68,20163,101],{"class":78},[170,20165,20166],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,20168,20170],{"id":20169},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[170,20172,20173],{},"两种分类方式：",[170,20175,20176],{},"​\t按参数分为： 有参构造和无参构造",[170,20178,20179],{},"​\t按类型分为： 普通构造和拷贝构造",[170,20181,20182],{},"三种调用方式：",[170,20184,20185],{},"​\t括号法",[170,20187,20188],{},"​\t显示法",[170,20190,20191],{},"​\t隐式转换法",[58,20193,20195],{"className":1628,"code":20194,"language":1630,"meta":63,"style":63},"#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",[65,20196,20197,20203,20213,20218,20223,20228,20233,20237,20245,20249,20253,20257,20263,20267,20280,20284,20296,20300,20309,20322,20326,20330,20336,20340,20353,20357,20362,20378,20382,20387,20396,20409,20413,20419,20423,20428,20436,20440,20445,20449,20457,20461,20466,20471,20476,20481,20486,20490,20495,20500,20505,20510,20514,20519,20524,20540,20552,20557,20561,20566,20571,20576,20580,20585,20599,20612,20616,20624,20628,20634,20640,20648],{"__ignoreMap":63},[68,20198,20199,20201],{"class":70,"line":71},[68,20200,3440],{"class":316},[68,20202,3443],{"class":1742},[68,20204,20205,20207,20209,20211],{"class":70,"line":82},[68,20206,3448],{"class":316},[68,20208,3451],{"class":316},[68,20210,3454],{"class":74},[68,20212,95],{"class":78},[68,20214,20215],{"class":70,"line":98},[68,20216,20217],{"class":302},"\u002F\u002F1.构造函数的分类及调用\n",[68,20219,20220],{"class":70,"line":104},[68,20221,20222],{"class":302},"\u002F\u002F分类\n",[68,20224,20225],{"class":70,"line":112},[68,20226,20227],{"class":302},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[68,20229,20230],{"class":70,"line":124},[68,20231,20232],{"class":302},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[68,20234,20235],{"class":70,"line":1496},[68,20236,3890],{"emptyLinePlaceholder":1567},[68,20238,20239,20241,20243],{"class":70,"line":1502},[68,20240,16182],{"class":316},[68,20242,17057],{"class":74},[68,20244,4164],{"class":78},[68,20246,20247],{"class":70,"line":1510},[68,20248,3038],{"class":78},[68,20250,20251],{"class":70,"line":1521},[68,20252,16204],{"class":316},[68,20254,20255],{"class":70,"line":3103},[68,20256,20001],{"class":302},[68,20258,20259,20261],{"class":70,"line":3108},[68,20260,20006],{"class":74},[68,20262,3466],{"class":78},[68,20264,20265],{"class":70,"line":3114},[68,20266,3520],{"class":78},[68,20268,20269,20271,20273,20276,20278],{"class":70,"line":3119},[68,20270,4941],{"class":78},[68,20272,2670],{"class":316},[68,20274,20275],{"class":1742},"\"Person构造函数无参构造\"",[68,20277,2670],{"class":316},[68,20279,2692],{"class":78},[68,20281,20282],{"class":70,"line":3133},[68,20283,3677],{"class":78},[68,20285,20286,20288,20290,20292,20294],{"class":70,"line":3138},[68,20287,20006],{"class":74},[68,20289,1640],{"class":78},[68,20291,1643],{"class":316},[68,20293,2891],{"class":6705},[68,20295,1646],{"class":78},[68,20297,20298],{"class":70,"line":3144},[68,20299,3520],{"class":78},[68,20301,20302,20305,20307],{"class":70,"line":3165},[68,20303,20304],{"class":78},"        age",[68,20306,1685],{"class":316},[68,20308,7686],{"class":78},[68,20310,20311,20313,20315,20318,20320],{"class":70,"line":3170},[68,20312,4941],{"class":78},[68,20314,2670],{"class":316},[68,20316,20317],{"class":1742},"\"Person构造函数有参构造\"",[68,20319,2670],{"class":316},[68,20321,2692],{"class":78},[68,20323,20324],{"class":70,"line":3184},[68,20325,3677],{"class":78},[68,20327,20328],{"class":70,"line":3189},[68,20329,20034],{"class":302},[68,20331,20332,20334],{"class":70,"line":3218},[68,20333,20039],{"class":74},[68,20335,3466],{"class":78},[68,20337,20338],{"class":70,"line":3223},[68,20339,3520],{"class":78},[68,20341,20342,20344,20346,20349,20351],{"class":70,"line":3240},[68,20343,4941],{"class":78},[68,20345,2670],{"class":316},[68,20347,20348],{"class":1742},"\"Person析构函数被调用\"",[68,20350,2670],{"class":316},[68,20352,2692],{"class":78},[68,20354,20355],{"class":70,"line":3245},[68,20356,3677],{"class":78},[68,20358,20359],{"class":70,"line":3250},[68,20360,20361],{"class":302},"    \u002F\u002F拷贝构造函数\n",[68,20363,20364,20366,20368,20370,20372,20374,20376],{"class":70,"line":3255},[68,20365,20006],{"class":74},[68,20367,1640],{"class":78},[68,20369,8281],{"class":316},[68,20371,17057],{"class":74},[68,20373,12072],{"class":316},[68,20375,170],{"class":6705},[68,20377,1646],{"class":78},[68,20379,20380],{"class":70,"line":3269},[68,20381,3520],{"class":78},[68,20383,20384],{"class":70,"line":3274},[68,20385,20386],{"class":302},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[68,20388,20389,20391,20393],{"class":70,"line":4067},[68,20390,20304],{"class":78},[68,20392,1685],{"class":316},[68,20394,20395],{"class":78},"p.age;\n",[68,20397,20398,20400,20402,20405,20407],{"class":70,"line":4081},[68,20399,4941],{"class":78},[68,20401,2670],{"class":316},[68,20403,20404],{"class":1742},"\"Person拷贝构造函数被调用\"",[68,20406,2670],{"class":316},[68,20408,2692],{"class":78},[68,20410,20411],{"class":70,"line":4089},[68,20412,3677],{"class":78},[68,20414,20415,20417],{"class":70,"line":4094},[68,20416,3475],{"class":316},[68,20418,9286],{"class":78},[68,20420,20421],{"class":70,"line":4100},[68,20422,5485],{"class":78},[68,20424,20425],{"class":70,"line":4106},[68,20426,20427],{"class":302},"\u002F\u002F调用\n",[68,20429,20430,20432,20434],{"class":70,"line":4111},[68,20431,6853],{"class":316},[68,20433,7077],{"class":74},[68,20435,3466],{"class":78},[68,20437,20438],{"class":70,"line":9437},[68,20439,3038],{"class":78},[68,20441,20442],{"class":70,"line":9461},[68,20443,20444],{"class":302},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[68,20446,20447],{"class":70,"line":9466},[68,20448,101],{"class":78},[68,20450,20451,20453,20455],{"class":70,"line":9472},[68,20452,6853],{"class":316},[68,20454,7146],{"class":74},[68,20456,3466],{"class":78},[68,20458,20459],{"class":70,"line":9499},[68,20460,3038],{"class":78},[68,20462,20463],{"class":70,"line":9504},[68,20464,20465],{"class":302},"    \u002F\u002F1.括号法\n",[68,20467,20468],{"class":70,"line":9510},[68,20469,20470],{"class":302},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[68,20472,20473],{"class":70,"line":9522},[68,20474,20475],{"class":302},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[68,20477,20478],{"class":70,"line":9534},[68,20479,20480],{"class":302},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[68,20482,20483],{"class":70,"line":9546},[68,20484,20485],{"class":302},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[68,20487,20488],{"class":70,"line":11204},[68,20489,3890],{"emptyLinePlaceholder":1567},[68,20491,20492],{"class":70,"line":11229},[68,20493,20494],{"class":302},"    \u002F\u002F注意事项\n",[68,20496,20497],{"class":70,"line":11252},[68,20498,20499],{"class":302},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[68,20501,20502],{"class":70,"line":11276},[68,20503,20504],{"class":302},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[68,20506,20507],{"class":70,"line":11281},[68,20508,20509],{"class":302},"    \u002F\u002F Person p4();\n",[68,20511,20512],{"class":70,"line":11286},[68,20513,3890],{"emptyLinePlaceholder":1567},[68,20515,20516],{"class":70,"line":11291},[68,20517,20518],{"class":302},"    \u002F\u002F2.显示法\n",[68,20520,20521],{"class":70,"line":11300},[68,20522,20523],{"class":78},"    Person p1;\n",[68,20525,20526,20529,20531,20534,20536,20538],{"class":70,"line":11305},[68,20527,20528],{"class":78},"    Person p2",[68,20530,1685],{"class":316},[68,20532,20533],{"class":74},"Person",[68,20535,1640],{"class":78},[68,20537,313],{"class":85},[68,20539,4209],{"class":78},[68,20541,20542,20545,20547,20549],{"class":70,"line":11311},[68,20543,20544],{"class":78},"    Person p3",[68,20546,1685],{"class":316},[68,20548,20533],{"class":74},[68,20550,20551],{"class":78},"(p2);\n",[68,20553,20554],{"class":70,"line":11332},[68,20555,20556],{"class":302},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[68,20558,20559],{"class":70,"line":11338},[68,20560,3890],{"emptyLinePlaceholder":1567},[68,20562,20563],{"class":70,"line":11352},[68,20564,20565],{"class":302},"    \u002F\u002F 注意事项2\n",[68,20567,20568],{"class":70,"line":11358},[68,20569,20570],{"class":302},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[68,20572,20573],{"class":70,"line":11385},[68,20574,20575],{"class":302},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[68,20577,20578],{"class":70,"line":11394},[68,20579,3890],{"emptyLinePlaceholder":1567},[68,20581,20582],{"class":70,"line":11400},[68,20583,20584],{"class":302},"    \u002F\u002F3.隐士转换法\n",[68,20586,20587,20590,20592,20594,20596],{"class":70,"line":11408},[68,20588,20589],{"class":78},"    Person p4",[68,20591,1685],{"class":316},[68,20593,313],{"class":85},[68,20595,1694],{"class":78},[68,20597,20598],{"class":302},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[68,20600,20601,20604,20606,20609],{"class":70,"line":11413},[68,20602,20603],{"class":78},"    Person p5",[68,20605,1685],{"class":316},[68,20607,20608],{"class":78},"p4;",[68,20610,20611],{"class":302}," \u002F\u002F 这里会调用拷贝构造函数\n",[68,20613,20614],{"class":70,"line":18091},[68,20615,101],{"class":78},[68,20617,20618,20620,20622],{"class":70,"line":18097},[68,20619,1643],{"class":316},[68,20621,3463],{"class":74},[68,20623,3466],{"class":78},[68,20625,20626],{"class":70,"line":18120},[68,20627,3038],{"class":78},[68,20629,20630,20632],{"class":70,"line":18126},[68,20631,7122],{"class":74},[68,20633,7125],{"class":78},[68,20635,20636,20638],{"class":70,"line":18149},[68,20637,7191],{"class":74},[68,20639,7125],{"class":78},[68,20641,20642,20644,20646],{"class":70,"line":18163},[68,20643,5580],{"class":316},[68,20645,5583],{"class":85},[68,20647,95],{"class":78},[68,20649,20650],{"class":70,"line":18183},[68,20651,101],{"class":78},[170,20653,20654,20657],{},[268,20655,20656],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,20659,20661],{"id":20660},"_823拷贝构造函数","8.2.3拷贝构造函数",[170,20663,20664],{},"C++中拷贝构造函数调用时机通常有三种情况",[24,20666,20667,20670,20673],{},[27,20668,20669],{},"使用一个已经创建完毕的对象来初始化一个新对象",[27,20671,20672],{},"值传递的方式给函数参数传值",[27,20674,20675],{},"以值方式返回局部对象",[58,20677,20679],{"className":1628,"code":20678,"language":1630,"meta":63,"style":63},"#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",[65,20680,20681,20687,20697,20701,20706,20710,20715,20720,20725,20731,20735,20739,20745,20749,20762,20766,20771,20783,20787,20795,20808,20812,20816,20832,20836,20845,20858,20862,20868,20872,20884,20888,20894,20898,20902,20910,20914,20927,20935,20953,20957,20962,20967,20982,20986,20999,21003,21011,21015,21019,21027,21031,21036,21045,21049,21053,21078,21088,21092,21100,21104,21115,21140,21144,21148,21152,21160,21164,21169,21174,21181,21186,21191,21196,21201,21205,21210,21214,21219,21223,21228,21233,21237,21241,21246,21251,21259],{"__ignoreMap":63},[68,20682,20683,20685],{"class":70,"line":71},[68,20684,3440],{"class":316},[68,20686,3443],{"class":1742},[68,20688,20689,20691,20693,20695],{"class":70,"line":82},[68,20690,3448],{"class":316},[68,20692,3451],{"class":316},[68,20694,3454],{"class":74},[68,20696,95],{"class":78},[68,20698,20699],{"class":70,"line":98},[68,20700,3890],{"emptyLinePlaceholder":1567},[68,20702,20703],{"class":70,"line":104},[68,20704,20705],{"class":302},"\u002F\u002F拷贝构造函数调用时机\n",[68,20707,20708],{"class":70,"line":112},[68,20709,3890],{"emptyLinePlaceholder":1567},[68,20711,20712],{"class":70,"line":124},[68,20713,20714],{"class":302},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[68,20716,20717],{"class":70,"line":1496},[68,20718,20719],{"class":302},"\u002F\u002F2.值传递的方式给函数参数传值\n",[68,20721,20722],{"class":70,"line":1502},[68,20723,20724],{"class":302},"\u002F\u002F3.以值方式返回局部对象\n",[68,20726,20727,20729],{"class":70,"line":1510},[68,20728,16182],{"class":316},[68,20730,16659],{"class":74},[68,20732,20733],{"class":70,"line":1521},[68,20734,3038],{"class":78},[68,20736,20737],{"class":70,"line":3103},[68,20738,16204],{"class":316},[68,20740,20741,20743],{"class":70,"line":3108},[68,20742,20006],{"class":74},[68,20744,3466],{"class":78},[68,20746,20747],{"class":70,"line":3114},[68,20748,3520],{"class":78},[68,20750,20751,20753,20755,20758,20760],{"class":70,"line":3119},[68,20752,11157],{"class":78},[68,20754,2670],{"class":316},[68,20756,20757],{"class":1742}," \"Person的默认构造函数调用\"",[68,20759,2937],{"class":316},[68,20761,10329],{"class":78},[68,20763,20764],{"class":70,"line":3133},[68,20765,3677],{"class":78},[68,20767,20768],{"class":70,"line":3138},[68,20769,20770],{"class":302},"    \u002F\u002F有参构造\n",[68,20772,20773,20775,20777,20779,20781],{"class":70,"line":3144},[68,20774,20006],{"class":74},[68,20776,1640],{"class":78},[68,20778,1643],{"class":316},[68,20780,17176],{"class":6705},[68,20782,1646],{"class":78},[68,20784,20785],{"class":70,"line":3165},[68,20786,3520],{"class":78},[68,20788,20789,20791,20793],{"class":70,"line":3170},[68,20790,17230],{"class":78},[68,20792,1685],{"class":316},[68,20794,9286],{"class":78},[68,20796,20797,20799,20801,20804,20806],{"class":70,"line":3184},[68,20798,11157],{"class":78},[68,20800,2670],{"class":316},[68,20802,20803],{"class":1742}," \"Person的有参构造函数调用\"",[68,20805,2937],{"class":316},[68,20807,10329],{"class":78},[68,20809,20810],{"class":70,"line":3189},[68,20811,3677],{"class":78},[68,20813,20814],{"class":70,"line":3218},[68,20815,20361],{"class":302},[68,20817,20818,20820,20822,20824,20826,20828,20830],{"class":70,"line":3223},[68,20819,20006],{"class":74},[68,20821,1640],{"class":78},[68,20823,8281],{"class":316},[68,20825,17057],{"class":74},[68,20827,12072],{"class":316},[68,20829,170],{"class":6705},[68,20831,1646],{"class":78},[68,20833,20834],{"class":70,"line":3240},[68,20835,3520],{"class":78},[68,20837,20838,20840,20842],{"class":70,"line":3245},[68,20839,17230],{"class":78},[68,20841,1685],{"class":316},[68,20843,20844],{"class":78}," p.m_Age;\n",[68,20846,20847,20849,20851,20854,20856],{"class":70,"line":3250},[68,20848,11157],{"class":78},[68,20850,2670],{"class":316},[68,20852,20853],{"class":1742}," \"Person的拷贝构造函数调用\"",[68,20855,2937],{"class":316},[68,20857,10329],{"class":78},[68,20859,20860],{"class":70,"line":3255},[68,20861,3677],{"class":78},[68,20863,20864,20866],{"class":70,"line":3269},[68,20865,20039],{"class":74},[68,20867,3466],{"class":78},[68,20869,20870],{"class":70,"line":3274},[68,20871,3520],{"class":78},[68,20873,20874,20876,20878,20880,20882],{"class":70,"line":4067},[68,20875,11157],{"class":78},[68,20877,2670],{"class":316},[68,20879,20054],{"class":1742},[68,20881,2937],{"class":316},[68,20883,10329],{"class":78},[68,20885,20886],{"class":70,"line":4081},[68,20887,3677],{"class":78},[68,20889,20890,20892],{"class":70,"line":4089},[68,20891,3475],{"class":316},[68,20893,17153],{"class":78},[68,20895,20896],{"class":70,"line":4094},[68,20897,5485],{"class":78},[68,20899,20900],{"class":70,"line":4100},[68,20901,20714],{"class":302},[68,20903,20904,20906,20908],{"class":70,"line":4106},[68,20905,6853],{"class":316},[68,20907,7077],{"class":74},[68,20909,3466],{"class":78},[68,20911,20912],{"class":70,"line":4111},[68,20913,3038],{"class":78},[68,20915,20916,20919,20921,20923,20925],{"class":70,"line":9437},[68,20917,20918],{"class":78},"    Person ",[68,20920,8619],{"class":74},[68,20922,1640],{"class":78},[68,20924,333],{"class":85},[68,20926,4209],{"class":78},[68,20928,20929,20931,20933],{"class":70,"line":9461},[68,20930,20918],{"class":78},[68,20932,8522],{"class":74},[68,20934,19002],{"class":78},[68,20936,20937,20939,20941,20944,20946,20949,20951],{"class":70,"line":9466},[68,20938,3043],{"class":78},[68,20940,2670],{"class":316},[68,20942,20943],{"class":1742},"\"P2的年龄为：\"",[68,20945,2670],{"class":316},[68,20947,20948],{"class":78},"p2.m_Age",[68,20950,2670],{"class":316},[68,20952,2692],{"class":78},[68,20954,20955],{"class":70,"line":9472},[68,20956,101],{"class":78},[68,20958,20959],{"class":70,"line":9499},[68,20960,20961],{"class":302},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[68,20963,20964],{"class":70,"line":9504},[68,20965,20966],{"class":302},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[68,20968,20969,20971,20974,20976,20978,20980],{"class":70,"line":9510},[68,20970,6853],{"class":316},[68,20972,20973],{"class":74}," doWork",[68,20975,1640],{"class":78},[68,20977,20533],{"class":74},[68,20979,8314],{"class":6705},[68,20981,1646],{"class":78},[68,20983,20984],{"class":70,"line":9522},[68,20985,3038],{"class":78},[68,20987,20988,20990,20992,20995,20997],{"class":70,"line":9534},[68,20989,8018],{"class":78},[68,20991,2670],{"class":316},[68,20993,20994],{"class":1742}," \"doWork函数调用\"",[68,20996,2937],{"class":316},[68,20998,10329],{"class":78},[68,21000,21001],{"class":70,"line":9546},[68,21002,101],{"class":78},[68,21004,21005,21007,21009],{"class":70,"line":11204},[68,21006,6853],{"class":316},[68,21008,7146],{"class":74},[68,21010,3466],{"class":78},[68,21012,21013],{"class":70,"line":11229},[68,21014,3038],{"class":78},[68,21016,21017],{"class":70,"line":11252},[68,21018,16801],{"class":78},[68,21020,21021,21024],{"class":70,"line":11276},[68,21022,21023],{"class":74},"    doWork",[68,21025,21026],{"class":78},"(p);\n",[68,21028,21029],{"class":70,"line":11281},[68,21030,101],{"class":78},[68,21032,21033],{"class":70,"line":11286},[68,21034,21035],{"class":302},"\u002F\u002F 3.以值方式返回局部对象\n",[68,21037,21038,21040,21043],{"class":70,"line":11291},[68,21039,20533],{"class":74},[68,21041,21042],{"class":74}," doWork2",[68,21044,3466],{"class":78},[68,21046,21047],{"class":70,"line":11300},[68,21048,3038],{"class":78},[68,21050,21051],{"class":70,"line":11305},[68,21052,20523],{"class":78},[68,21054,21055,21057,21059,21061,21063,21065,21067,21069,21071,21073,21075],{"class":70,"line":11311},[68,21056,3043],{"class":78},[68,21058,2670],{"class":316},[68,21060,1640],{"class":78},[68,21062,1643],{"class":316},[68,21064,8007],{"class":316},[68,21066,2058],{"class":78},[68,21068,1982],{"class":316},[68,21070,8619],{"class":78},[68,21072,2670],{"class":316},[68,21074,2735],{"class":78},[68,21076,21077],{"class":302},"\u002F\u002F打印p1的地址\n",[68,21079,21080,21082,21085],{"class":70,"line":11332},[68,21081,5580],{"class":316},[68,21083,21084],{"class":78}," p1;",[68,21086,21087],{"class":302},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[68,21089,21090],{"class":70,"line":11338},[68,21091,101],{"class":78},[68,21093,21094,21096,21098],{"class":70,"line":11352},[68,21095,6853],{"class":316},[68,21097,7218],{"class":74},[68,21099,3466],{"class":78},[68,21101,21102],{"class":70,"line":11358},[68,21103,3038],{"class":78},[68,21105,21106,21109,21111,21113],{"class":70,"line":11385},[68,21107,21108],{"class":78},"    Person p ",[68,21110,1685],{"class":316},[68,21112,21042],{"class":74},[68,21114,7125],{"class":78},[68,21116,21117,21119,21121,21123,21125,21127,21129,21131,21133,21135,21137],{"class":70,"line":11394},[68,21118,3043],{"class":78},[68,21120,2670],{"class":316},[68,21122,1640],{"class":78},[68,21124,1643],{"class":316},[68,21126,8007],{"class":316},[68,21128,2058],{"class":78},[68,21130,1982],{"class":316},[68,21132,170],{"class":78},[68,21134,2670],{"class":316},[68,21136,2735],{"class":78},[68,21138,21139],{"class":302},"\u002F\u002F打印p的地址\n",[68,21141,21142],{"class":70,"line":11400},[68,21143,101],{"class":78},[68,21145,21146],{"class":70,"line":11408},[68,21147,3890],{"emptyLinePlaceholder":1567},[68,21149,21150],{"class":70,"line":11413},[68,21151,3890],{"emptyLinePlaceholder":1567},[68,21153,21154,21156,21158],{"class":70,"line":18091},[68,21155,1643],{"class":316},[68,21157,3463],{"class":74},[68,21159,3466],{"class":78},[68,21161,21162],{"class":70,"line":18097},[68,21163,3038],{"class":78},[68,21165,21166],{"class":70,"line":18120},[68,21167,21168],{"class":302},"    \u002F\u002F test01();\n",[68,21170,21171],{"class":70,"line":18126},[68,21172,21173],{"class":302},"    \u002F\u002F test02();\n",[68,21175,21176,21179],{"class":70,"line":18149},[68,21177,21178],{"class":74},"    test03",[68,21180,7125],{"class":78},[68,21182,21183],{"class":70,"line":18163},[68,21184,21185],{"class":302},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[68,21187,21188],{"class":70,"line":18183},[68,21189,21190],{"class":302},"\u002F\u002F 输出结果如下：\n",[68,21192,21193],{"class":70,"line":18189},[68,21194,21195],{"class":302},"\u002F\u002F Person的默认构造函数调用\n",[68,21197,21198],{"class":70,"line":18200},[68,21199,21200],{"class":302},"\u002F\u002F 0x7fffffffceec\n",[68,21202,21203],{"class":70,"line":18223},[68,21204,21200],{"class":302},[68,21206,21207],{"class":70,"line":18245},[68,21208,21209],{"class":302},"\u002F\u002F Person的析构函数调用\n",[68,21211,21212],{"class":70,"line":18250},[68,21213,3890],{"emptyLinePlaceholder":1567},[68,21215,21216],{"class":70,"line":18256},[68,21217,21218],{"class":302},"\u002F\u002F 之前的输出结果如下：\n",[68,21220,21221],{"class":70,"line":18270},[68,21222,21195],{"class":302},[68,21224,21225],{"class":70,"line":18283},[68,21226,21227],{"class":302},"\u002F\u002F 地址\n",[68,21229,21230],{"class":70,"line":18288},[68,21231,21232],{"class":302},"\u002F\u002F Person的拷贝构造函数调用\n",[68,21234,21235],{"class":70,"line":18302},[68,21236,21209],{"class":302},[68,21238,21239],{"class":70,"line":18307},[68,21240,21227],{"class":302},[68,21242,21243],{"class":70,"line":18313},[68,21244,21245],{"class":302},"\u002F\u002F (这两次输出的地址也是不同的) \n",[68,21247,21248],{"class":70,"line":18318},[68,21249,21250],{"class":302},"\u002F\u002F Person的析构函数调用     \n",[68,21252,21253,21255,21257],{"class":70,"line":18332},[68,21254,5580],{"class":316},[68,21256,5583],{"class":85},[68,21258,95],{"class":78},[68,21260,21261],{"class":70,"line":18337},[68,21262,101],{"class":78},[170,21264,21265],{},"简化版理解",[58,21267,21269],{"className":1628,"code":21268,"language":1630,"meta":63,"style":63},"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",[65,21270,21271,21279,21283,21289,21302,21313,21317,21329,21342,21350,21354,21370,21383,21392,21396,21401,21407,21420,21424,21428,21435,21439,21443,21448,21456,21460,21476,21489,21502,21506,21511,21519,21523,21527,21532,21537,21553,21561,21568,21574,21578,21582,21587,21595,21599,21603,21626,21633,21637,21641,21649,21653,21663,21685,21689,21693,21697,21705,21709,21714,21719,21725,21729,21739,21743,21751],{"__ignoreMap":63},[68,21272,21273,21275,21277],{"class":70,"line":71},[68,21274,16182],{"class":316},[68,21276,17057],{"class":74},[68,21278,79],{"class":78},[68,21280,21281],{"class":70,"line":82},[68,21282,16204],{"class":316},[68,21284,21285,21287],{"class":70,"line":98},[68,21286,20006],{"class":74},[68,21288,12341],{"class":78},[68,21290,21291,21293,21295,21298,21300],{"class":70,"line":104},[68,21292,11157],{"class":78},[68,21294,2670],{"class":316},[68,21296,21297],{"class":1742}," \"无参构造函数!\"",[68,21299,2937],{"class":316},[68,21301,10329],{"class":78},[68,21303,21304,21307,21309,21311],{"class":70,"line":112},[68,21305,21306],{"class":78},"        mAge ",[68,21308,1685],{"class":316},[68,21310,5583],{"class":85},[68,21312,95],{"class":78},[68,21314,21315],{"class":70,"line":124},[68,21316,3677],{"class":78},[68,21318,21319,21321,21323,21325,21327],{"class":70,"line":1496},[68,21320,20006],{"class":74},[68,21322,1640],{"class":78},[68,21324,1643],{"class":316},[68,21326,17176],{"class":6705},[68,21328,13930],{"class":78},[68,21330,21331,21333,21335,21338,21340],{"class":70,"line":1502},[68,21332,11157],{"class":78},[68,21334,2670],{"class":316},[68,21336,21337],{"class":1742}," \"有参构造函数!\"",[68,21339,2937],{"class":316},[68,21341,10329],{"class":78},[68,21343,21344,21346,21348],{"class":70,"line":1510},[68,21345,21306],{"class":78},[68,21347,1685],{"class":316},[68,21349,9286],{"class":78},[68,21351,21352],{"class":70,"line":1521},[68,21353,3677],{"class":78},[68,21355,21356,21358,21360,21362,21364,21366,21368],{"class":70,"line":3103},[68,21357,20006],{"class":74},[68,21359,1640],{"class":78},[68,21361,8281],{"class":316},[68,21363,17057],{"class":74},[68,21365,1982],{"class":316},[68,21367,8314],{"class":6705},[68,21369,13930],{"class":78},[68,21371,21372,21374,21376,21379,21381],{"class":70,"line":3108},[68,21373,11157],{"class":78},[68,21375,2670],{"class":316},[68,21377,21378],{"class":1742}," \"拷贝构造函数!\"",[68,21380,2937],{"class":316},[68,21382,10329],{"class":78},[68,21384,21385,21387,21389],{"class":70,"line":3114},[68,21386,21306],{"class":78},[68,21388,1685],{"class":316},[68,21390,21391],{"class":78}," p.mAge;\n",[68,21393,21394],{"class":70,"line":3119},[68,21395,3677],{"class":78},[68,21397,21398],{"class":70,"line":3133},[68,21399,21400],{"class":302},"    \u002F\u002F析构函数在释放内存之前调用\n",[68,21402,21403,21405],{"class":70,"line":3138},[68,21404,20039],{"class":74},[68,21406,12341],{"class":78},[68,21408,21409,21411,21413,21416,21418],{"class":70,"line":3144},[68,21410,11157],{"class":78},[68,21412,2670],{"class":316},[68,21414,21415],{"class":1742}," \"析构函数!\"",[68,21417,2937],{"class":316},[68,21419,10329],{"class":78},[68,21421,21422],{"class":70,"line":3165},[68,21423,3677],{"class":78},[68,21425,21426],{"class":70,"line":3170},[68,21427,16204],{"class":316},[68,21429,21430,21432],{"class":70,"line":3184},[68,21431,3475],{"class":316},[68,21433,21434],{"class":78}," mAge;\n",[68,21436,21437],{"class":70,"line":3189},[68,21438,5485],{"class":78},[68,21440,21441],{"class":70,"line":3218},[68,21442,3890],{"emptyLinePlaceholder":1567},[68,21444,21445],{"class":70,"line":3223},[68,21446,21447],{"class":302},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[68,21449,21450,21452,21454],{"class":70,"line":3240},[68,21451,6853],{"class":316},[68,21453,7077],{"class":74},[68,21455,12341],{"class":78},[68,21457,21458],{"class":70,"line":3245},[68,21459,3890],{"emptyLinePlaceholder":1567},[68,21461,21462,21464,21467,21469,21471,21473],{"class":70,"line":3250},[68,21463,20918],{"class":78},[68,21465,21466],{"class":74},"man",[68,21468,1640],{"class":78},[68,21470,1940],{"class":85},[68,21472,7455],{"class":78},[68,21474,21475],{"class":302}," \u002F\u002Fp对象已经创建完毕\n",[68,21477,21478,21480,21483,21486],{"class":70,"line":3255},[68,21479,20918],{"class":78},[68,21481,21482],{"class":74},"newman",[68,21484,21485],{"class":78},"(man);",[68,21487,21488],{"class":302}," \u002F\u002F调用拷贝构造函数\n",[68,21490,21491,21494,21496,21499],{"class":70,"line":3269},[68,21492,21493],{"class":78},"    Person newman2 ",[68,21495,1685],{"class":316},[68,21497,21498],{"class":78}," man;",[68,21500,21501],{"class":302}," \u002F\u002F拷贝构造\n",[68,21503,21504],{"class":70,"line":3274},[68,21505,3890],{"emptyLinePlaceholder":1567},[68,21507,21508],{"class":70,"line":4067},[68,21509,21510],{"class":302},"    \u002F\u002FPerson newman3;\n",[68,21512,21513,21516],{"class":70,"line":4081},[68,21514,21515],{"class":302},"    \u002F\u002Fnewman3 = man;",[68,21517,21518],{"class":302}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[68,21520,21521],{"class":70,"line":4089},[68,21522,101],{"class":78},[68,21524,21525],{"class":70,"line":4094},[68,21526,3890],{"emptyLinePlaceholder":1567},[68,21528,21529],{"class":70,"line":4100},[68,21530,21531],{"class":302},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[68,21533,21534],{"class":70,"line":4106},[68,21535,21536],{"class":302},"\u002F\u002F相当于Person p1 = p;\n",[68,21538,21539,21541,21543,21545,21547,21550],{"class":70,"line":4111},[68,21540,6853],{"class":316},[68,21542,20973],{"class":74},[68,21544,1640],{"class":78},[68,21546,20533],{"class":74},[68,21548,21549],{"class":6705}," p1",[68,21551,21552],{"class":78},") {}\n",[68,21554,21555,21557,21559],{"class":70,"line":9437},[68,21556,6853],{"class":316},[68,21558,7146],{"class":74},[68,21560,12341],{"class":78},[68,21562,21563,21565],{"class":70,"line":9461},[68,21564,20091],{"class":78},[68,21566,21567],{"class":302}," \u002F\u002F无参构造函数\n",[68,21569,21570,21572],{"class":70,"line":9466},[68,21571,21023],{"class":74},[68,21573,21026],{"class":78},[68,21575,21576],{"class":70,"line":9472},[68,21577,101],{"class":78},[68,21579,21580],{"class":70,"line":9499},[68,21581,3890],{"emptyLinePlaceholder":1567},[68,21583,21584],{"class":70,"line":9504},[68,21585,21586],{"class":302},"\u002F\u002F3. 以值方式返回局部对象\n",[68,21588,21589,21591,21593],{"class":70,"line":9510},[68,21590,20533],{"class":74},[68,21592,21042],{"class":74},[68,21594,3466],{"class":78},[68,21596,21597],{"class":70,"line":9522},[68,21598,3038],{"class":78},[68,21600,21601],{"class":70,"line":9534},[68,21602,20523],{"class":78},[68,21604,21605,21607,21609,21611,21613,21615,21617,21619,21622,21624],{"class":70,"line":9546},[68,21606,8018],{"class":78},[68,21608,2670],{"class":316},[68,21610,3149],{"class":78},[68,21612,1643],{"class":316},[68,21614,8007],{"class":316},[68,21616,2058],{"class":78},[68,21618,1982],{"class":316},[68,21620,21621],{"class":78},"p1 ",[68,21623,2670],{"class":316},[68,21625,10329],{"class":78},[68,21627,21628,21630],{"class":70,"line":11204},[68,21629,5580],{"class":316},[68,21631,21632],{"class":78}," p1;\n",[68,21634,21635],{"class":70,"line":11229},[68,21636,101],{"class":78},[68,21638,21639],{"class":70,"line":11252},[68,21640,3890],{"emptyLinePlaceholder":1567},[68,21642,21643,21645,21647],{"class":70,"line":11276},[68,21644,6853],{"class":316},[68,21646,7218],{"class":74},[68,21648,3466],{"class":78},[68,21650,21651],{"class":70,"line":11281},[68,21652,3038],{"class":78},[68,21654,21655,21657,21659,21661],{"class":70,"line":11286},[68,21656,21108],{"class":78},[68,21658,1685],{"class":316},[68,21660,21042],{"class":74},[68,21662,7125],{"class":78},[68,21664,21665,21667,21669,21671,21673,21675,21677,21679,21681,21683],{"class":70,"line":11291},[68,21666,8018],{"class":78},[68,21668,2670],{"class":316},[68,21670,3149],{"class":78},[68,21672,1643],{"class":316},[68,21674,8007],{"class":316},[68,21676,2058],{"class":78},[68,21678,1982],{"class":316},[68,21680,12936],{"class":78},[68,21682,2670],{"class":316},[68,21684,10329],{"class":78},[68,21686,21687],{"class":70,"line":11300},[68,21688,101],{"class":78},[68,21690,21691],{"class":70,"line":11305},[68,21692,3890],{"emptyLinePlaceholder":1567},[68,21694,21695],{"class":70,"line":11311},[68,21696,3890],{"emptyLinePlaceholder":1567},[68,21698,21699,21701,21703],{"class":70,"line":11332},[68,21700,1643],{"class":316},[68,21702,3463],{"class":74},[68,21704,12341],{"class":78},[68,21706,21707],{"class":70,"line":11338},[68,21708,3890],{"emptyLinePlaceholder":1567},[68,21710,21711],{"class":70,"line":11352},[68,21712,21713],{"class":302},"    \u002F\u002Ftest01();\n",[68,21715,21716],{"class":70,"line":11358},[68,21717,21718],{"class":302},"    \u002F\u002Ftest02();\n",[68,21720,21721,21723],{"class":70,"line":11385},[68,21722,21178],{"class":74},[68,21724,7125],{"class":78},[68,21726,21727],{"class":70,"line":11394},[68,21728,3890],{"emptyLinePlaceholder":1567},[68,21730,21731,21733,21735,21737],{"class":70,"line":11400},[68,21732,3793],{"class":74},[68,21734,1640],{"class":78},[68,21736,3798],{"class":1742},[68,21738,4209],{"class":78},[68,21740,21741],{"class":70,"line":11408},[68,21742,3890],{"emptyLinePlaceholder":1567},[68,21744,21745,21747,21749],{"class":70,"line":11413},[68,21746,5580],{"class":316},[68,21748,5583],{"class":85},[68,21750,95],{"class":78},[68,21752,21753],{"class":70,"line":18091},[68,21754,101],{"class":78},[19,21756,21758],{"id":21757},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[170,21760,21761],{},"默认情况下，c++编译器至少给一个类添加3个函数",[170,21763,21764],{},"1．默认构造函数(无参，函数体为空)",[170,21766,21767],{},"2．默认析构函数(无参，函数体为空)",[170,21769,21770],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[170,21772,21773],{},"构造函数调用规则如下：",[24,21775,21776,21779],{},[27,21777,21778],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[27,21780,21781],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[58,21783,21785],{"className":1628,"code":21784,"language":1630,"meta":63,"style":63},"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",[65,21786,21787,21795,21799,21804,21810,21822,21826,21831,21843,21852,21864,21868,21872,21888,21897,21909,21913,21917,21923,21935,21939,21943,21949,21953,21957,21965,21969,21981,21986,21994,21998,22016,22020,22024,22032,22036,22041,22049,22064,22077,22081,22086,22093,22109,22122,22126,22130,22138,22142,22148,22152,22162,22166,22174],{"__ignoreMap":63},[68,21788,21789,21791,21793],{"class":70,"line":71},[68,21790,16182],{"class":316},[68,21792,17057],{"class":74},[68,21794,79],{"class":78},[68,21796,21797],{"class":70,"line":82},[68,21798,16204],{"class":316},[68,21800,21801],{"class":70,"line":98},[68,21802,21803],{"class":302},"    \u002F\u002F无参（默认）构造函数\n",[68,21805,21806,21808],{"class":70,"line":104},[68,21807,20006],{"class":74},[68,21809,12341],{"class":78},[68,21811,21812,21814,21816,21818,21820],{"class":70,"line":112},[68,21813,11157],{"class":78},[68,21815,2670],{"class":316},[68,21817,21297],{"class":1742},[68,21819,2937],{"class":316},[68,21821,10329],{"class":78},[68,21823,21824],{"class":70,"line":124},[68,21825,3677],{"class":78},[68,21827,21828],{"class":70,"line":1496},[68,21829,21830],{"class":302},"    \u002F\u002F有参构造函数\n",[68,21832,21833,21835,21837,21839,21841],{"class":70,"line":1502},[68,21834,20006],{"class":74},[68,21836,1640],{"class":78},[68,21838,1643],{"class":316},[68,21840,2891],{"class":6705},[68,21842,13930],{"class":78},[68,21844,21845,21848,21850],{"class":70,"line":1510},[68,21846,21847],{"class":78},"        age ",[68,21849,1685],{"class":316},[68,21851,2925],{"class":78},[68,21853,21854,21856,21858,21860,21862],{"class":70,"line":1521},[68,21855,11157],{"class":78},[68,21857,2670],{"class":316},[68,21859,21337],{"class":1742},[68,21861,2937],{"class":316},[68,21863,10329],{"class":78},[68,21865,21866],{"class":70,"line":3103},[68,21867,3677],{"class":78},[68,21869,21870],{"class":70,"line":3108},[68,21871,20361],{"class":302},[68,21873,21874,21876,21878,21880,21882,21884,21886],{"class":70,"line":3114},[68,21875,20006],{"class":74},[68,21877,1640],{"class":78},[68,21879,8281],{"class":316},[68,21881,17057],{"class":74},[68,21883,1982],{"class":316},[68,21885,8314],{"class":6705},[68,21887,13930],{"class":78},[68,21889,21890,21892,21894],{"class":70,"line":3119},[68,21891,21847],{"class":78},[68,21893,1685],{"class":316},[68,21895,21896],{"class":78}," p.age;\n",[68,21898,21899,21901,21903,21905,21907],{"class":70,"line":3133},[68,21900,11157],{"class":78},[68,21902,2670],{"class":316},[68,21904,21378],{"class":1742},[68,21906,2937],{"class":316},[68,21908,10329],{"class":78},[68,21910,21911],{"class":70,"line":3138},[68,21912,3677],{"class":78},[68,21914,21915],{"class":70,"line":3144},[68,21916,20034],{"class":302},[68,21918,21919,21921],{"class":70,"line":3165},[68,21920,20039],{"class":74},[68,21922,12341],{"class":78},[68,21924,21925,21927,21929,21931,21933],{"class":70,"line":3170},[68,21926,11157],{"class":78},[68,21928,2670],{"class":316},[68,21930,21415],{"class":1742},[68,21932,2937],{"class":316},[68,21934,10329],{"class":78},[68,21936,21937],{"class":70,"line":3184},[68,21938,3677],{"class":78},[68,21940,21941],{"class":70,"line":3189},[68,21942,16204],{"class":316},[68,21944,21945,21947],{"class":70,"line":3218},[68,21946,3475],{"class":316},[68,21948,9286],{"class":78},[68,21950,21951],{"class":70,"line":3223},[68,21952,5485],{"class":78},[68,21954,21955],{"class":70,"line":3240},[68,21956,3890],{"emptyLinePlaceholder":1567},[68,21958,21959,21961,21963],{"class":70,"line":3245},[68,21960,6853],{"class":316},[68,21962,7077],{"class":74},[68,21964,3466],{"class":78},[68,21966,21967],{"class":70,"line":3250},[68,21968,3038],{"class":78},[68,21970,21971,21973,21975,21977,21979],{"class":70,"line":3255},[68,21972,20918],{"class":78},[68,21974,8619],{"class":74},[68,21976,1640],{"class":78},[68,21978,2278],{"class":85},[68,21980,4209],{"class":78},[68,21982,21983],{"class":70,"line":3269},[68,21984,21985],{"class":302},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[68,21987,21988,21990,21992],{"class":70,"line":3274},[68,21989,20918],{"class":78},[68,21991,8522],{"class":74},[68,21993,19002],{"class":78},[68,21995,21996],{"class":70,"line":4067},[68,21997,3890],{"emptyLinePlaceholder":1567},[68,21999,22000,22002,22004,22007,22009,22012,22014],{"class":70,"line":4081},[68,22001,8018],{"class":78},[68,22003,2670],{"class":316},[68,22005,22006],{"class":1742}," \"p2的年龄为： \"",[68,22008,2937],{"class":316},[68,22010,22011],{"class":78}," p2.age ",[68,22013,2670],{"class":316},[68,22015,10329],{"class":78},[68,22017,22018],{"class":70,"line":4089},[68,22019,101],{"class":78},[68,22021,22022],{"class":70,"line":4094},[68,22023,3890],{"emptyLinePlaceholder":1567},[68,22025,22026,22028,22030],{"class":70,"line":4100},[68,22027,6853],{"class":316},[68,22029,7146],{"class":74},[68,22031,3466],{"class":78},[68,22033,22034],{"class":70,"line":4106},[68,22035,3038],{"class":78},[68,22037,22038],{"class":70,"line":4111},[68,22039,22040],{"class":302},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[68,22042,22043,22046],{"class":70,"line":9437},[68,22044,22045],{"class":78},"    Person p1;",[68,22047,22048],{"class":302}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[68,22050,22051,22053,22055,22057,22059,22061],{"class":70,"line":9461},[68,22052,20918],{"class":78},[68,22054,8522],{"class":74},[68,22056,1640],{"class":78},[68,22058,313],{"class":85},[68,22060,7455],{"class":78},[68,22062,22063],{"class":302}," \u002F\u002F用户提供的有参\n",[68,22065,22066,22068,22071,22074],{"class":70,"line":9466},[68,22067,20918],{"class":78},[68,22069,22070],{"class":74},"p3",[68,22072,22073],{"class":78},"(p2);",[68,22075,22076],{"class":302}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[68,22078,22079],{"class":70,"line":9472},[68,22080,3890],{"emptyLinePlaceholder":1567},[68,22082,22083],{"class":70,"line":9499},[68,22084,22085],{"class":302},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[68,22087,22088,22091],{"class":70,"line":9504},[68,22089,22090],{"class":78},"    Person p4;",[68,22092,22048],{"class":302},[68,22094,22095,22097,22100,22102,22104,22106],{"class":70,"line":9510},[68,22096,20918],{"class":78},[68,22098,22099],{"class":74},"p5",[68,22101,1640],{"class":78},[68,22103,313],{"class":85},[68,22105,7455],{"class":78},[68,22107,22108],{"class":302}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[68,22110,22111,22113,22116,22119],{"class":70,"line":9522},[68,22112,20918],{"class":78},[68,22114,22115],{"class":74},"p6",[68,22117,22118],{"class":78},"(p5);",[68,22120,22121],{"class":302}," \u002F\u002F用户自己提供拷贝构造\n",[68,22123,22124],{"class":70,"line":9534},[68,22125,101],{"class":78},[68,22127,22128],{"class":70,"line":9546},[68,22129,3890],{"emptyLinePlaceholder":1567},[68,22131,22132,22134,22136],{"class":70,"line":11204},[68,22133,1643],{"class":316},[68,22135,3463],{"class":74},[68,22137,12341],{"class":78},[68,22139,22140],{"class":70,"line":11229},[68,22141,3890],{"emptyLinePlaceholder":1567},[68,22143,22144,22146],{"class":70,"line":11252},[68,22145,7122],{"class":74},[68,22147,7125],{"class":78},[68,22149,22150],{"class":70,"line":11276},[68,22151,3890],{"emptyLinePlaceholder":1567},[68,22153,22154,22156,22158,22160],{"class":70,"line":11281},[68,22155,3793],{"class":74},[68,22157,1640],{"class":78},[68,22159,3798],{"class":1742},[68,22161,4209],{"class":78},[68,22163,22164],{"class":70,"line":11286},[68,22165,3890],{"emptyLinePlaceholder":1567},[68,22167,22168,22170,22172],{"class":70,"line":11291},[68,22169,5580],{"class":316},[68,22171,5583],{"class":85},[68,22173,95],{"class":78},[68,22175,22176],{"class":70,"line":11300},[68,22177,101],{"class":78},[19,22179,22181],{"id":22180},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[170,22183,22184],{},"浅拷贝：简单的赋值拷贝操作",[170,22186,22187],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[58,22189,22191],{"className":1628,"code":22190,"language":1630,"meta":63,"style":63},"#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",[65,22192,22193,22199,22209,22215,22219,22223,22228,22234,22238,22251,22255,22259,22266,22270,22280,22295,22308,22312,22317,22322,22338,22342,22355,22360,22365,22370,22379,22384,22399,22403,22407,22411,22417,22421,22426,22441,22445,22456,22470,22474,22483,22487,22493,22505,22509,22517,22521,22538,22569,22577,22605,22609,22613,22621,22625,22631],{"__ignoreMap":63},[68,22194,22195,22197],{"class":70,"line":71},[68,22196,3440],{"class":316},[68,22198,3443],{"class":1742},[68,22200,22201,22203,22205,22207],{"class":70,"line":82},[68,22202,3448],{"class":316},[68,22204,3451],{"class":316},[68,22206,3454],{"class":74},[68,22208,95],{"class":78},[68,22210,22211,22213],{"class":70,"line":98},[68,22212,16182],{"class":316},[68,22214,16659],{"class":74},[68,22216,22217],{"class":70,"line":104},[68,22218,3038],{"class":78},[68,22220,22221],{"class":70,"line":112},[68,22222,16204],{"class":316},[68,22224,22225],{"class":70,"line":124},[68,22226,22227],{"class":302},"    \u002F\u002F默认构造函数\n",[68,22229,22230,22232],{"class":70,"line":1496},[68,22231,20006],{"class":74},[68,22233,3466],{"class":78},[68,22235,22236],{"class":70,"line":1502},[68,22237,3520],{"class":78},[68,22239,22240,22242,22244,22247,22249],{"class":70,"line":1510},[68,22241,4941],{"class":78},[68,22243,2670],{"class":316},[68,22245,22246],{"class":1742},"\"默认构造函数\"",[68,22248,2670],{"class":316},[68,22250,2692],{"class":78},[68,22252,22253],{"class":70,"line":1521},[68,22254,3677],{"class":78},[68,22256,22257],{"class":70,"line":3103},[68,22258,21830],{"class":302},[68,22260,22261,22263],{"class":70,"line":3108},[68,22262,20039],{"class":74},[68,22264,22265],{"class":78},"(int age,int height)\n",[68,22267,22268],{"class":70,"line":3114},[68,22269,3520],{"class":78},[68,22271,22272,22275,22277],{"class":70,"line":3119},[68,22273,22274],{"class":78},"        m_Age",[68,22276,1685],{"class":316},[68,22278,22279],{"class":78},"age;\n",[68,22281,22282,22285,22287,22289,22292],{"class":70,"line":3133},[68,22283,22284],{"class":78},"        m_Height",[68,22286,13205],{"class":316},[68,22288,3872],{"class":316},[68,22290,22291],{"class":78},"(height);",[68,22293,22294],{"class":302},"\u002F\u002F放到堆区\n",[68,22296,22297,22299,22301,22304,22306],{"class":70,"line":3138},[68,22298,4941],{"class":78},[68,22300,2670],{"class":316},[68,22302,22303],{"class":1742},"\"有参构造函数\"",[68,22305,2670],{"class":316},[68,22307,2692],{"class":78},[68,22309,22310],{"class":70,"line":3144},[68,22311,3677],{"class":78},[68,22313,22314],{"class":70,"line":3165},[68,22315,22316],{"class":302},"    \u002F\u002F深拷贝解决上述问题\n",[68,22318,22319],{"class":70,"line":3170},[68,22320,22321],{"class":302},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[68,22323,22324,22326,22328,22330,22332,22334,22336],{"class":70,"line":3184},[68,22325,20006],{"class":74},[68,22327,1640],{"class":78},[68,22329,8281],{"class":316},[68,22331,17057],{"class":74},[68,22333,12072],{"class":316},[68,22335,170],{"class":6705},[68,22337,1646],{"class":78},[68,22339,22340],{"class":70,"line":3189},[68,22341,3520],{"class":78},[68,22343,22344,22346,22348,22351,22353],{"class":70,"line":3218},[68,22345,4941],{"class":78},[68,22347,2670],{"class":316},[68,22349,22350],{"class":1742},"\"拷贝构造函数\"",[68,22352,2670],{"class":316},[68,22354,2692],{"class":78},[68,22356,22357],{"class":70,"line":3223},[68,22358,22359],{"class":302},"        \u002F\u002F编译器默认的写如下注释部分\n",[68,22361,22362],{"class":70,"line":3240},[68,22363,22364],{"class":302},"        \u002F\u002Fm_Age=p.m_Age;\n",[68,22366,22367],{"class":70,"line":3245},[68,22368,22369],{"class":302},"        \u002F\u002Fm_Height=p.m_Height;\n",[68,22371,22372,22374,22376],{"class":70,"line":3250},[68,22373,22274],{"class":78},[68,22375,1685],{"class":316},[68,22377,22378],{"class":78},"p.m_Age;\n",[68,22380,22381],{"class":70,"line":3255},[68,22382,22383],{"class":302},"        \u002F\u002F深拷贝操作\n",[68,22385,22386,22388,22390,22392,22394,22396],{"class":70,"line":3269},[68,22387,22284],{"class":78},[68,22389,13205],{"class":316},[68,22391,3872],{"class":316},[68,22393,1640],{"class":78},[68,22395,2083],{"class":316},[68,22397,22398],{"class":78},"p.m_Height);\n",[68,22400,22401],{"class":70,"line":3274},[68,22402,3677],{"class":78},[68,22404,22405],{"class":70,"line":4067},[68,22406,3890],{"emptyLinePlaceholder":1567},[68,22408,22409],{"class":70,"line":4081},[68,22410,20034],{"class":302},[68,22412,22413,22415],{"class":70,"line":4089},[68,22414,20039],{"class":74},[68,22416,3466],{"class":78},[68,22418,22419],{"class":70,"line":4094},[68,22420,3520],{"class":78},[68,22422,22423],{"class":70,"line":4100},[68,22424,22425],{"class":302},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[68,22427,22428,22430,22433,22436,22439],{"class":70,"line":4106},[68,22429,3987],{"class":316},[68,22431,22432],{"class":78},"(m_Height ",[68,22434,22435],{"class":316},"!=",[68,22437,22438],{"class":85}," NULL",[68,22440,1646],{"class":78},[68,22442,22443],{"class":70,"line":4111},[68,22444,4000],{"class":78},[68,22446,22447,22450,22453],{"class":70,"line":9437},[68,22448,22449],{"class":316},"            delete",[68,22451,22452],{"class":78}," m_Height;",[68,22454,22455],{"class":302}," \u002F\u002F释放堆区内存\n",[68,22457,22458,22461,22463,22465,22467],{"class":70,"line":9461},[68,22459,22460],{"class":78},"            m_Height",[68,22462,1685],{"class":316},[68,22464,3882],{"class":85},[68,22466,1694],{"class":78},[68,22468,22469],{"class":302}," \u002F\u002F防止野指针\n",[68,22471,22472],{"class":70,"line":9466},[68,22473,4019],{"class":78},[68,22475,22476,22478,22480],{"class":70,"line":9472},[68,22477,4941],{"class":78},[68,22479,2670],{"class":316},[68,22481,22482],{"class":1742},"\"Person的析构函数调用\"\n",[68,22484,22485],{"class":70,"line":9499},[68,22486,3677],{"class":78},[68,22488,22489,22491],{"class":70,"line":9504},[68,22490,3475],{"class":316},[68,22492,17153],{"class":78},[68,22494,22495,22497,22499,22502],{"class":70,"line":9510},[68,22496,3475],{"class":316},[68,22498,8007],{"class":316},[68,22500,22501],{"class":78},"m_Height;",[68,22503,22504],{"class":302}," \u002F\u002F定义一个指针，指向身高\n",[68,22506,22507],{"class":70,"line":9522},[68,22508,5485],{"class":78},[68,22510,22511,22513,22515],{"class":70,"line":9534},[68,22512,6853],{"class":316},[68,22514,7077],{"class":74},[68,22516,3466],{"class":78},[68,22518,22519],{"class":70,"line":9546},[68,22520,3038],{"class":78},[68,22522,22523,22525,22527,22529,22531,22533,22536],{"class":70,"line":11204},[68,22524,20918],{"class":78},[68,22526,8619],{"class":74},[68,22528,1640],{"class":78},[68,22530,2278],{"class":85},[68,22532,2007],{"class":78},[68,22534,22535],{"class":85},"160",[68,22537,4209],{"class":78},[68,22539,22540,22542,22544,22547,22549,22552,22554,22557,22559,22562,22564,22566],{"class":70,"line":11229},[68,22541,3043],{"class":78},[68,22543,2670],{"class":316},[68,22545,22546],{"class":1742},"\"p1的年龄为:\"",[68,22548,2670],{"class":316},[68,22550,22551],{"class":78},"p1.m_Age",[68,22553,2670],{"class":316},[68,22555,22556],{"class":1742},"\"身高为：\"",[68,22558,7908],{"class":316},[68,22560,22561],{"class":78},"p1.m_Height",[68,22563,2670],{"class":316},[68,22565,2735],{"class":78},[68,22567,22568],{"class":302},"  \u002F\u002F18\n",[68,22570,22571,22573,22575],{"class":70,"line":11252},[68,22572,20918],{"class":78},[68,22574,8522],{"class":74},[68,22576,19002],{"class":78},[68,22578,22579,22581,22583,22586,22588,22590,22592,22594,22596,22599,22601,22603],{"class":70,"line":11276},[68,22580,3043],{"class":78},[68,22582,2670],{"class":316},[68,22584,22585],{"class":1742},"\"p2的年龄为：\"",[68,22587,2670],{"class":316},[68,22589,20948],{"class":78},[68,22591,2670],{"class":316},[68,22593,22556],{"class":1742},[68,22595,7908],{"class":316},[68,22597,22598],{"class":78},"p2.m_Height",[68,22600,2670],{"class":316},[68,22602,2735],{"class":78},[68,22604,22568],{"class":302},[68,22606,22607],{"class":70,"line":11281},[68,22608,14698],{"class":78},[68,22610,22611],{"class":70,"line":11286},[68,22612,101],{"class":78},[68,22614,22615,22617,22619],{"class":70,"line":11291},[68,22616,1643],{"class":316},[68,22618,3463],{"class":74},[68,22620,3466],{"class":78},[68,22622,22623],{"class":70,"line":11300},[68,22624,3038],{"class":78},[68,22626,22627,22629],{"class":70,"line":11305},[68,22628,7122],{"class":74},[68,22630,7125],{"class":78},[68,22632,22633],{"class":70,"line":11311},[68,22634,101],{"class":78},[170,22636,22637],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[170,22639,22640],{},"浅拷贝带来的问题是堆区的内存重复释放",[170,22642,22643],{},[801,22644],{"alt":63,"src":22645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[170,22647,22648],{},"浅拷贝问题要使用深拷贝来解决",[170,22650,22651],{},[801,22652],{"alt":63,"src":22653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[170,22655,22656],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,22658,22660],{"id":22659},"_826初始化列表","8.2.6初始化列表",[170,22662,22663],{},"作用：初始化属性",[170,22665,409],{},[58,22667,22670],{"className":22668,"code":22669,"language":6676},[6674],"构造函数():属性1(值1),属性2(值2).....{}\n",[65,22671,22669],{"__ignoreMap":63},[170,22673,22674],{},"例子",[58,22676,22678],{"className":1628,"code":22677,"language":1630,"meta":63,"style":63},"#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",[65,22679,22680,22686,22696,22702,22706,22711,22715,22720,22725,22730,22735,22740,22745,22749,22754,22759,22802,22811,22829,22847,22865,22869,22873,22880,22887,22894,22898,22902,22910,22914,22918,22938,22947,22951,22955,22965,22969,22977],{"__ignoreMap":63},[68,22681,22682,22684],{"class":70,"line":71},[68,22683,3440],{"class":316},[68,22685,3443],{"class":1742},[68,22687,22688,22690,22692,22694],{"class":70,"line":82},[68,22689,3448],{"class":316},[68,22691,3451],{"class":316},[68,22693,3454],{"class":74},[68,22695,95],{"class":78},[68,22697,22698,22700],{"class":70,"line":98},[68,22699,16182],{"class":316},[68,22701,16659],{"class":74},[68,22703,22704],{"class":70,"line":104},[68,22705,3038],{"class":78},[68,22707,22708],{"class":70,"line":112},[68,22709,22710],{"class":316},"    public:\n",[68,22712,22713],{"class":70,"line":124},[68,22714,3890],{"emptyLinePlaceholder":1567},[68,22716,22717],{"class":70,"line":1496},[68,22718,22719],{"class":302},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[68,22721,22722],{"class":70,"line":1502},[68,22723,22724],{"class":302},"    \u002F\u002FPerson(int a, int b, int c) {\n",[68,22726,22727],{"class":70,"line":1510},[68,22728,22729],{"class":302},"    \u002F\u002F  m_A = a;\n",[68,22731,22732],{"class":70,"line":1521},[68,22733,22734],{"class":302},"    \u002F\u002F  m_B = b;\n",[68,22736,22737],{"class":70,"line":3103},[68,22738,22739],{"class":302},"    \u002F\u002F  m_C = c;\n",[68,22741,22742],{"class":70,"line":3108},[68,22743,22744],{"class":302},"    \u002F\u002F}\n",[68,22746,22747],{"class":70,"line":3114},[68,22748,3890],{"emptyLinePlaceholder":1567},[68,22750,22751],{"class":70,"line":3119},[68,22752,22753],{"class":302},"    \u002F\u002F初始化列表方式初始化\n",[68,22755,22756],{"class":70,"line":3133},[68,22757,22758],{"class":302},"    \u002F\u002F使用有参构造函数\n",[68,22760,22761,22763,22765,22767,22769,22771,22773,22775,22777,22779,22781,22784,22787,22790,22793,22796,22799],{"class":70,"line":3138},[68,22762,20006],{"class":74},[68,22764,1640],{"class":78},[68,22766,1643],{"class":316},[68,22768,2891],{"class":6705},[68,22770,13923],{"class":78},[68,22772,1643],{"class":316},[68,22774,4323],{"class":6705},[68,22776,13923],{"class":78},[68,22778,1643],{"class":316},[68,22780,4339],{"class":6705},[68,22782,22783],{"class":78},") :",[68,22785,22786],{"class":74},"m_A",[68,22788,22789],{"class":78},"(a), ",[68,22791,22792],{"class":74},"m_B",[68,22794,22795],{"class":78},"(b), ",[68,22797,22798],{"class":74},"m_C",[68,22800,22801],{"class":78},"(c) {}\n",[68,22803,22804,22806,22809],{"class":70,"line":3144},[68,22805,16397],{"class":316},[68,22807,22808],{"class":74}," PrintPerson",[68,22810,12341],{"class":78},[68,22812,22813,22815,22817,22820,22822,22825,22827],{"class":70,"line":3165},[68,22814,11157],{"class":78},[68,22816,2670],{"class":316},[68,22818,22819],{"class":1742}," \"mA:\"",[68,22821,2937],{"class":316},[68,22823,22824],{"class":78}," m_A ",[68,22826,2670],{"class":316},[68,22828,10329],{"class":78},[68,22830,22831,22833,22835,22838,22840,22843,22845],{"class":70,"line":3170},[68,22832,11157],{"class":78},[68,22834,2670],{"class":316},[68,22836,22837],{"class":1742}," \"mB:\"",[68,22839,2937],{"class":316},[68,22841,22842],{"class":78}," m_B ",[68,22844,2670],{"class":316},[68,22846,10329],{"class":78},[68,22848,22849,22851,22853,22856,22858,22861,22863],{"class":70,"line":3184},[68,22850,11157],{"class":78},[68,22852,2670],{"class":316},[68,22854,22855],{"class":1742}," \"mC:\"",[68,22857,2937],{"class":316},[68,22859,22860],{"class":78}," m_C ",[68,22862,2670],{"class":316},[68,22864,10329],{"class":78},[68,22866,22867],{"class":70,"line":3189},[68,22868,3677],{"class":78},[68,22870,22871],{"class":70,"line":3218},[68,22872,16710],{"class":316},[68,22874,22875,22877],{"class":70,"line":3223},[68,22876,3475],{"class":316},[68,22878,22879],{"class":78}," m_A;\n",[68,22881,22882,22884],{"class":70,"line":3240},[68,22883,3475],{"class":316},[68,22885,22886],{"class":78}," m_B;\n",[68,22888,22889,22891],{"class":70,"line":3245},[68,22890,3475],{"class":316},[68,22892,22893],{"class":78}," m_C;\n",[68,22895,22896],{"class":70,"line":3250},[68,22897,5485],{"class":78},[68,22899,22900],{"class":70,"line":3255},[68,22901,3890],{"emptyLinePlaceholder":1567},[68,22903,22904,22906,22908],{"class":70,"line":3269},[68,22905,1643],{"class":316},[68,22907,3463],{"class":74},[68,22909,7467],{"class":78},[68,22911,22912],{"class":70,"line":3274},[68,22913,3038],{"class":78},[68,22915,22916],{"class":70,"line":4067},[68,22917,3890],{"emptyLinePlaceholder":1567},[68,22919,22920,22922,22924,22926,22928,22930,22932,22934,22936],{"class":70,"line":4081},[68,22921,20918],{"class":78},[68,22923,170],{"class":74},[68,22925,1640],{"class":78},[68,22927,1846],{"class":85},[68,22929,13923],{"class":78},[68,22931,1715],{"class":85},[68,22933,13923],{"class":78},[68,22935,1709],{"class":85},[68,22937,4209],{"class":78},[68,22939,22940,22942,22945],{"class":70,"line":4089},[68,22941,17353],{"class":78},[68,22943,22944],{"class":74},"PrintPerson",[68,22946,7125],{"class":78},[68,22948,22949],{"class":70,"line":4094},[68,22950,3890],{"emptyLinePlaceholder":1567},[68,22952,22953],{"class":70,"line":4100},[68,22954,3890],{"emptyLinePlaceholder":1567},[68,22956,22957,22959,22961,22963],{"class":70,"line":4106},[68,22958,3793],{"class":74},[68,22960,1640],{"class":78},[68,22962,3798],{"class":1742},[68,22964,4209],{"class":78},[68,22966,22967],{"class":70,"line":4111},[68,22968,3890],{"emptyLinePlaceholder":1567},[68,22970,22971,22973,22975],{"class":70,"line":9437},[68,22972,5580],{"class":316},[68,22974,5583],{"class":85},[68,22976,95],{"class":78},[68,22978,22979],{"class":70,"line":9461},[68,22980,101],{"class":78},[170,22982,22983,22984,22987,22988],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[268,22985,22986],{},"参数名就是定义的对象属性","，",[268,22989,22990],{},"属性后面的值为有参构造函数的形参",[58,22992,22994],{"className":1628,"code":22993,"language":1630,"meta":63,"style":63},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[65,22995,22996],{"__ignoreMap":63},[68,22997,22998,23000,23002,23004,23007,23009,23012,23014,23017,23019,23022,23024,23027,23029],{"class":70,"line":71},[68,22999,20533],{"class":74},[68,23001,1640],{"class":78},[68,23003,1643],{"class":316},[68,23005,23006],{"class":78}," a.",[68,23008,1643],{"class":316},[68,23010,23011],{"class":78}," b,",[68,23013,1643],{"class":316},[68,23015,23016],{"class":78}," b):",[68,23018,22786],{"class":74},[68,23020,23021],{"class":78},"(a),",[68,23023,22792],{"class":74},[68,23025,23026],{"class":78},"(c),",[68,23028,22798],{"class":74},[68,23030,23031],{"class":78},"(b) {}\n",[19,23033,23035],{"id":23034},"_827类对象作为类成员","8.2.7类对象作为类成员",[170,23037,23038],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[170,23040,16121],{},[58,23042,23044],{"className":1628,"code":23043,"language":1630,"meta":63,"style":63},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[65,23045,23046,23051,23056,23060,23065,23069],{"__ignoreMap":63},[68,23047,23048],{"class":70,"line":71},[68,23049,23050],{"class":78},"A{};\n",[68,23052,23053],{"class":70,"line":82},[68,23054,23055],{"class":78},"B\n",[68,23057,23058],{"class":70,"line":98},[68,23059,3038],{"class":78},[68,23061,23062],{"class":70,"line":104},[68,23063,23064],{"class":78},"    A a;\n",[68,23066,23067],{"class":70,"line":112},[68,23068,101],{"class":78},[68,23070,23071],{"class":70,"line":124},[68,23072,23073],{"class":302},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[170,23075,23076],{},"案例",[58,23078,23080],{"className":1628,"code":23079,"language":1630,"meta":63,"style":63},"\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",[65,23081,23082,23087,23094,23098,23103,23108,23122,23126,23136,23147,23151,23158,23162,23175,23179,23184,23189,23193,23199,23203,23207,23211,23242,23246,23257,23261,23267,23271,23284,23288,23292,23296,23301,23306,23310,23318,23322,23339,23358,23362,23370,23374,23380],{"__ignoreMap":63},[68,23083,23084],{"class":70,"line":71},[68,23085,23086],{"class":302},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[68,23088,23089,23091],{"class":70,"line":82},[68,23090,16182],{"class":316},[68,23092,23093],{"class":74}," Phone\n",[68,23095,23096],{"class":70,"line":98},[68,23097,3038],{"class":78},[68,23099,23100],{"class":70,"line":104},[68,23101,23102],{"class":78},"public：\n",[68,23104,23105],{"class":70,"line":112},[68,23106,23107],{"class":302},"    \u002F\u002F 赋值(构造函数)\n",[68,23109,23110,23113,23115,23117,23120],{"class":70,"line":124},[68,23111,23112],{"class":74},"    Phone",[68,23114,1640],{"class":78},[68,23116,16405],{"class":74},[68,23118,23119],{"class":6705}," pName",[68,23121,1646],{"class":78},[68,23123,23124],{"class":70,"line":1496},[68,23125,3520],{"class":78},[68,23127,23128,23131,23133],{"class":70,"line":1502},[68,23129,23130],{"class":78},"        m_pName",[68,23132,1685],{"class":316},[68,23134,23135],{"class":78},"pName;\n",[68,23137,23138,23140,23142,23145],{"class":70,"line":1510},[68,23139,4941],{"class":78},[68,23141,2670],{"class":316},[68,23143,23144],{"class":1742},"\"Phone的构造函数调用\"",[68,23146,95],{"class":78},[68,23148,23149],{"class":70,"line":1521},[68,23150,3677],{"class":78},[68,23152,23153,23156],{"class":70,"line":3103},[68,23154,23155],{"class":74},"    ~Phone",[68,23157,3466],{"class":78},[68,23159,23160],{"class":70,"line":3108},[68,23161,3520],{"class":78},[68,23163,23164,23166,23168,23171,23173],{"class":70,"line":3114},[68,23165,4941],{"class":78},[68,23167,2670],{"class":316},[68,23169,23170],{"class":1742},"\"Phone析构函数调用\"",[68,23172,2670],{"class":316},[68,23174,2692],{"class":78},[68,23176,23177],{"class":70,"line":3119},[68,23178,3677],{"class":78},[68,23180,23181],{"class":70,"line":3133},[68,23182,23183],{"class":302},"    \u002F\u002F\n",[68,23185,23186],{"class":70,"line":3138},[68,23187,23188],{"class":78},"    string m_PName;\n",[68,23190,23191],{"class":70,"line":3144},[68,23192,5485],{"class":78},[68,23194,23195,23197],{"class":70,"line":3165},[68,23196,16182],{"class":316},[68,23198,16659],{"class":74},[68,23200,23201],{"class":70,"line":3170},[68,23202,3038],{"class":78},[68,23204,23205],{"class":70,"line":3184},[68,23206,16204],{"class":316},[68,23208,23209],{"class":70,"line":3189},[68,23210,18481],{"class":302},[68,23212,23213,23215,23217,23219,23221,23223,23225,23228,23231,23233,23236,23239],{"class":70,"line":3218},[68,23214,20006],{"class":74},[68,23216,1640],{"class":78},[68,23218,16405],{"class":74},[68,23220,16408],{"class":6705},[68,23222,2007],{"class":78},[68,23224,16405],{"class":74},[68,23226,23227],{"class":6705}," pname",[68,23229,23230],{"class":78},"):",[68,23232,16498],{"class":74},[68,23234,23235],{"class":78},"(name),m_phone.",[68,23237,23238],{"class":74},"m_PName",[68,23240,23241],{"class":78},"(pname) \n",[68,23243,23244],{"class":70,"line":3223},[68,23245,3520],{"class":78},[68,23247,23248,23250,23252,23255],{"class":70,"line":3240},[68,23249,4941],{"class":78},[68,23251,2670],{"class":316},[68,23253,23254],{"class":1742},"\"Person的构造函数调用\"",[68,23256,95],{"class":78},[68,23258,23259],{"class":70,"line":3245},[68,23260,3677],{"class":78},[68,23262,23263,23265],{"class":70,"line":3250},[68,23264,20039],{"class":74},[68,23266,3466],{"class":78},[68,23268,23269],{"class":70,"line":3255},[68,23270,3520],{"class":78},[68,23272,23273,23275,23277,23280,23282],{"class":70,"line":3269},[68,23274,4941],{"class":78},[68,23276,2670],{"class":316},[68,23278,23279],{"class":1742},"\"Person析构函数调用\"",[68,23281,2670],{"class":316},[68,23283,2692],{"class":78},[68,23285,23286],{"class":70,"line":3274},[68,23287,3677],{"class":78},[68,23289,23290],{"class":70,"line":4067},[68,23291,9269],{"class":302},[68,23293,23294],{"class":70,"line":4081},[68,23295,16380],{"class":78},[68,23297,23298],{"class":70,"line":4089},[68,23299,23300],{"class":302},"    \u002F\u002F手机\n",[68,23302,23303],{"class":70,"line":4094},[68,23304,23305],{"class":78},"    Phone m_Phone;\n",[68,23307,23308],{"class":70,"line":4100},[68,23309,5485],{"class":78},[68,23311,23312,23314,23316],{"class":70,"line":4106},[68,23313,6853],{"class":316},[68,23315,7077],{"class":74},[68,23317,3466],{"class":78},[68,23319,23320],{"class":70,"line":4111},[68,23321,3038],{"class":78},[68,23323,23324,23326,23328,23330,23332,23334,23337],{"class":70,"line":9437},[68,23325,20918],{"class":78},[68,23327,170],{"class":74},[68,23329,1640],{"class":78},[68,23331,9405],{"class":1742},[68,23333,2007],{"class":78},[68,23335,23336],{"class":1742},"\"安卓\"",[68,23338,4209],{"class":78},[68,23340,23341,23343,23345,23348,23350,23353,23355],{"class":70,"line":9461},[68,23342,3043],{"class":78},[68,23344,2670],{"class":316},[68,23346,23347],{"class":78},"p.Name",[68,23349,2670],{"class":316},[68,23351,23352],{"class":1742},"\"拿着：\"",[68,23354,2670],{"class":316},[68,23356,23357],{"class":78},"p.m_phone.m_PName;\n",[68,23359,23360],{"class":70,"line":9466},[68,23361,101],{"class":78},[68,23363,23364,23366,23368],{"class":70,"line":9472},[68,23365,1643],{"class":316},[68,23367,3463],{"class":74},[68,23369,3466],{"class":78},[68,23371,23372],{"class":70,"line":9499},[68,23373,3038],{"class":78},[68,23375,23376,23378],{"class":70,"line":9504},[68,23377,7122],{"class":74},[68,23379,7125],{"class":78},[68,23381,23382],{"class":70,"line":9510},[68,23383,101],{"class":78},[170,23385,1106],{},[58,23387,23389],{"className":1628,"code":23388,"language":1630,"meta":63,"style":63},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[65,23390,23391,23396],{"__ignoreMap":63},[68,23392,23393],{"class":70,"line":71},[68,23394,23395],{"class":302},"    \u002F\u002F不需要写这个：\n",[68,23397,23398],{"class":70,"line":82},[68,23399,23400],{"class":302},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[170,23402,23403],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[58,23405,23407],{"className":1628,"code":23406,"language":1630,"meta":63,"style":63},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[65,23408,23409],{"__ignoreMap":63},[68,23410,23411,23413,23416,23418,23421,23424],{"class":70,"line":71},[68,23412,20533],{"class":74},[68,23414,23415],{"class":78},"(string name.string pname):",[68,23417,16498],{"class":74},[68,23419,23420],{"class":78},"(name),",[68,23422,23423],{"class":74},"m_phone",[68,23425,23426],{"class":78},"(pname) {}\n",[170,23428,23429,23430,1685,23433],{},"采用的是隐式转换法，实际为如下：\n",[65,23431,23432],{},"m_phone(pname)",[65,23434,23435],{},"Phone m_phone=pname",[170,23437,23438,23441],{},[268,23439,23440],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[170,23443,23444],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,23446,23448],{"id":23447},"_828静态对象","8.2.8静态对象",[170,23450,23451],{},"静态对象在成员对象前static，称为静态对象",[170,23453,23454],{},"静态对象分为两类：",[263,23456,23457],{},[27,23458,23459],{},"静态成员变量",[24,23461,23462,23465,23468],{},[27,23463,23464],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[27,23466,23467],{},"②在编译阶段分配内存",[27,23469,23470],{},"③类内声明，类外初始化",[263,23472,23473],{"start":82},[27,23474,23475],{},"静态成员函数",[24,23477,23478,23481],{},[27,23479,23480],{},"①所有对象共享同一个函数",[27,23482,23483],{},"②静态成员函数只能访问静态成员变量",[245,23485,23487],{"id":23486},"_8281静态成员变量","8.2.8.1静态成员变量",[58,23489,23491],{"className":1628,"code":23490,"language":1630,"meta":63,"style":63},"#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",[65,23492,23493,23499,23509,23515,23519,23523,23528,23533,23538,23546,23550,23554,23558,23566,23570,23574,23579,23592,23596,23604,23608,23614],{"__ignoreMap":63},[68,23494,23495,23497],{"class":70,"line":71},[68,23496,3440],{"class":316},[68,23498,3443],{"class":1742},[68,23500,23501,23503,23505,23507],{"class":70,"line":82},[68,23502,3448],{"class":316},[68,23504,3451],{"class":316},[68,23506,3454],{"class":74},[68,23508,95],{"class":78},[68,23510,23511,23513],{"class":70,"line":98},[68,23512,16182],{"class":316},[68,23514,16659],{"class":74},[68,23516,23517],{"class":70,"line":104},[68,23518,3038],{"class":78},[68,23520,23521],{"class":70,"line":112},[68,23522,16204],{"class":316},[68,23524,23525],{"class":70,"line":124},[68,23526,23527],{"class":302},"    \u002F\u002F非静态成员变量\n",[68,23529,23530],{"class":70,"line":1496},[68,23531,23532],{"class":302},"    \u002F\u002F int m_A;\n",[68,23534,23535],{"class":70,"line":1502},[68,23536,23537],{"class":302},"    \u002F\u002F定义静态成员变量\n",[68,23539,23540,23542,23544],{"class":70,"line":1510},[68,23541,12508],{"class":316},[68,23543,3872],{"class":316},[68,23545,22879],{"class":78},[68,23547,23548],{"class":70,"line":1521},[68,23549,3890],{"emptyLinePlaceholder":1567},[68,23551,23552],{"class":70,"line":3103},[68,23553,3890],{"emptyLinePlaceholder":1567},[68,23555,23556],{"class":70,"line":3108},[68,23557,5485],{"class":78},[68,23559,23560,23562,23564],{"class":70,"line":3114},[68,23561,6853],{"class":316},[68,23563,7077],{"class":74},[68,23565,3466],{"class":78},[68,23567,23568],{"class":70,"line":3119},[68,23569,3038],{"class":78},[68,23571,23572],{"class":70,"line":3133},[68,23573,16801],{"class":78},[68,23575,23576],{"class":70,"line":3138},[68,23577,23578],{"class":302},"    \u002F\u002F输出类成员变量这块内存\n",[68,23580,23581,23583,23585,23588,23590],{"class":70,"line":3144},[68,23582,3043],{"class":78},[68,23584,2670],{"class":316},[68,23586,23587],{"class":78},"p.m_A",[68,23589,2670],{"class":316},[68,23591,2692],{"class":78},[68,23593,23594],{"class":70,"line":3165},[68,23595,101],{"class":78},[68,23597,23598,23600,23602],{"class":70,"line":3170},[68,23599,1643],{"class":316},[68,23601,3463],{"class":74},[68,23603,3466],{"class":78},[68,23605,23606],{"class":70,"line":3184},[68,23607,3038],{"class":78},[68,23609,23610,23612],{"class":70,"line":3189},[68,23611,7122],{"class":74},[68,23613,3466],{"class":78},[68,23615,23616],{"class":70,"line":3218},[68,23617,101],{"class":78},[170,23619,23620],{},"此时输出是报错的：无法解析外部命令",[170,23622,23623],{},"解决这一问题：必须用到类内声明，类外初始化操作",[58,23625,23627],{"className":1628,"code":23626,"language":1630,"meta":63,"style":63},"#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",[65,23628,23629,23635,23645,23651,23655,23659,23664,23672,23676,23681,23696,23704,23708,23712,23717,23722,23734,23739,23750,23755,23760,23773,23777,23785,23789,23795],{"__ignoreMap":63},[68,23630,23631,23633],{"class":70,"line":71},[68,23632,3440],{"class":316},[68,23634,3443],{"class":1742},[68,23636,23637,23639,23641,23643],{"class":70,"line":82},[68,23638,3448],{"class":316},[68,23640,3451],{"class":316},[68,23642,3454],{"class":74},[68,23644,95],{"class":78},[68,23646,23647,23649],{"class":70,"line":98},[68,23648,16182],{"class":316},[68,23650,16659],{"class":74},[68,23652,23653],{"class":70,"line":104},[68,23654,3038],{"class":78},[68,23656,23657],{"class":70,"line":112},[68,23658,16204],{"class":316},[68,23660,23661],{"class":70,"line":124},[68,23662,23663],{"class":302},"    \u002F\u002F类内声明\n",[68,23665,23666,23668,23670],{"class":70,"line":1496},[68,23667,12508],{"class":316},[68,23669,3872],{"class":316},[68,23671,22879],{"class":78},[68,23673,23674],{"class":70,"line":1502},[68,23675,5485],{"class":78},[68,23677,23678],{"class":70,"line":1510},[68,23679,23680],{"class":302},"\u002F\u002F类外初始化\n",[68,23682,23683,23685,23687,23690,23692,23694],{"class":70,"line":1521},[68,23684,1643],{"class":316},[68,23686,17057],{"class":74},[68,23688,23689],{"class":78},"::m_A",[68,23691,1685],{"class":316},[68,23693,313],{"class":85},[68,23695,95],{"class":78},[68,23697,23698,23700,23702],{"class":70,"line":3103},[68,23699,6853],{"class":316},[68,23701,7077],{"class":74},[68,23703,3466],{"class":78},[68,23705,23706],{"class":70,"line":3108},[68,23707,3038],{"class":78},[68,23709,23710],{"class":70,"line":3114},[68,23711,16801],{"class":78},[68,23713,23714],{"class":70,"line":3119},[68,23715,23716],{"class":302},"    \u002F\u002F访问变量的原内存空间\n",[68,23718,23719],{"class":70,"line":3133},[68,23720,23721],{"class":302},"    \u002F\u002F100\n",[68,23723,23724,23726,23728,23730,23732],{"class":70,"line":3138},[68,23725,3043],{"class":78},[68,23727,2670],{"class":316},[68,23729,23587],{"class":78},[68,23731,2670],{"class":316},[68,23733,2692],{"class":78},[68,23735,23736],{"class":70,"line":3144},[68,23737,23738],{"class":78},"    Person p2;\n",[68,23740,23741,23744,23746,23748],{"class":70,"line":3165},[68,23742,23743],{"class":78},"    p2.m_A",[68,23745,1685],{"class":316},[68,23747,3213],{"class":85},[68,23749,95],{"class":78},[68,23751,23752],{"class":70,"line":3170},[68,23753,23754],{"class":302},"    \u002F\u002F继续访问这片空间\n",[68,23756,23757],{"class":70,"line":3184},[68,23758,23759],{"class":302},"    \u002F\u002F200\n",[68,23761,23762,23764,23766,23769,23771],{"class":70,"line":3189},[68,23763,3043],{"class":78},[68,23765,2670],{"class":316},[68,23767,23768],{"class":78},"p2.m_A",[68,23770,2670],{"class":316},[68,23772,2692],{"class":78},[68,23774,23775],{"class":70,"line":3218},[68,23776,101],{"class":78},[68,23778,23779,23781,23783],{"class":70,"line":3223},[68,23780,1643],{"class":316},[68,23782,3463],{"class":74},[68,23784,3466],{"class":78},[68,23786,23787],{"class":70,"line":3240},[68,23788,3038],{"class":78},[68,23790,23791,23793],{"class":70,"line":3245},[68,23792,7122],{"class":74},[68,23794,7125],{"class":78},[68,23796,23797],{"class":70,"line":3250},[68,23798,101],{"class":78},[170,23800,23801],{},[268,23802,23803],{},"静态变量的访问",[58,23805,23807],{"className":1628,"code":23806,"language":1630,"meta":63,"style":63},"#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",[65,23808,23809,23815,23825,23831,23835,23839,23843,23851,23855,23860,23868,23872,23876,23890,23905,23913,23917,23922,23927,23932,23937,23949,23954,23959,23973,23990,23994,24002,24006,24012],{"__ignoreMap":63},[68,23810,23811,23813],{"class":70,"line":71},[68,23812,3440],{"class":316},[68,23814,3443],{"class":1742},[68,23816,23817,23819,23821,23823],{"class":70,"line":82},[68,23818,3448],{"class":316},[68,23820,3451],{"class":316},[68,23822,3454],{"class":74},[68,23824,95],{"class":78},[68,23826,23827,23829],{"class":70,"line":98},[68,23828,16182],{"class":316},[68,23830,16659],{"class":74},[68,23832,23833],{"class":70,"line":104},[68,23834,3038],{"class":78},[68,23836,23837],{"class":70,"line":112},[68,23838,16204],{"class":316},[68,23840,23841],{"class":70,"line":124},[68,23842,23663],{"class":302},[68,23844,23845,23847,23849],{"class":70,"line":1496},[68,23846,12508],{"class":316},[68,23848,3872],{"class":316},[68,23850,22879],{"class":78},[68,23852,23853],{"class":70,"line":1502},[68,23854,16710],{"class":316},[68,23856,23857],{"class":70,"line":1510},[68,23858,23859],{"class":302},"    \u002F\u002F静态成员变量也是有访问权限的\n",[68,23861,23862,23864,23866],{"class":70,"line":1521},[68,23863,12508],{"class":316},[68,23865,3872],{"class":316},[68,23867,22886],{"class":78},[68,23869,23870],{"class":70,"line":3103},[68,23871,5485],{"class":78},[68,23873,23874],{"class":70,"line":3108},[68,23875,23680],{"class":302},[68,23877,23878,23880,23882,23884,23886,23888],{"class":70,"line":3114},[68,23879,1643],{"class":316},[68,23881,17057],{"class":74},[68,23883,23689],{"class":78},[68,23885,1685],{"class":316},[68,23887,313],{"class":85},[68,23889,95],{"class":78},[68,23891,23892,23894,23896,23899,23901,23903],{"class":70,"line":3119},[68,23893,1643],{"class":316},[68,23895,17057],{"class":74},[68,23897,23898],{"class":78},"::m_B",[68,23900,1685],{"class":316},[68,23902,333],{"class":85},[68,23904,95],{"class":78},[68,23906,23907,23909,23911],{"class":70,"line":3133},[68,23908,6853],{"class":316},[68,23910,7146],{"class":74},[68,23912,3466],{"class":78},[68,23914,23915],{"class":70,"line":3138},[68,23916,3038],{"class":78},[68,23918,23919],{"class":70,"line":3144},[68,23920,23921],{"class":302},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[68,23923,23924],{"class":70,"line":3165},[68,23925,23926],{"class":302},"    \u002F\u002F静态成员变量有两种访问方式：\n",[68,23928,23929],{"class":70,"line":3170},[68,23930,23931],{"class":302},"    \u002F\u002F1.通过对象进行访问\n",[68,23933,23934],{"class":70,"line":3184},[68,23935,23936],{"class":78},"    Person p;  \n",[68,23938,23939,23941,23943,23945,23947],{"class":70,"line":3189},[68,23940,3043],{"class":78},[68,23942,2670],{"class":316},[68,23944,23587],{"class":78},[68,23946,2670],{"class":316},[68,23948,2692],{"class":78},[68,23950,23951],{"class":70,"line":3218},[68,23952,23953],{"class":302},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[68,23955,23956],{"class":70,"line":3223},[68,23957,23958],{"class":302},"    \u002F\u002F2.通过类名进行访问\n",[68,23960,23961,23963,23965,23967,23969,23971],{"class":70,"line":3240},[68,23962,3043],{"class":78},[68,23964,2670],{"class":316},[68,23966,20533],{"class":74},[68,23968,23689],{"class":78},[68,23970,2670],{"class":316},[68,23972,2692],{"class":78},[68,23974,23975,23977,23979,23981,23983,23985,23987],{"class":70,"line":3245},[68,23976,3043],{"class":78},[68,23978,2670],{"class":316},[68,23980,20533],{"class":74},[68,23982,23898],{"class":78},[68,23984,2670],{"class":316},[68,23986,2735],{"class":78},[68,23988,23989],{"class":302}," \u002F\u002F没有访问权限，报错\n",[68,23991,23992],{"class":70,"line":3250},[68,23993,101],{"class":78},[68,23995,23996,23998,24000],{"class":70,"line":3255},[68,23997,1643],{"class":316},[68,23999,3463],{"class":74},[68,24001,3466],{"class":78},[68,24003,24004],{"class":70,"line":3269},[68,24005,3038],{"class":78},[68,24007,24008,24010],{"class":70,"line":3274},[68,24009,7191],{"class":74},[68,24011,7125],{"class":78},[68,24013,24014],{"class":70,"line":4067},[68,24015,101],{"class":78},[245,24017,24019],{"id":24018},"_8282静态成员函数","8.2.8.2静态成员函数",[170,24021,24022],{},"1.静态成员函数定义与访问",[58,24024,24026],{"className":1628,"code":24025,"language":1630,"meta":63,"style":63},"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",[65,24027,24028,24034,24038,24042,24047,24058,24062,24076,24080,24084,24092,24096,24101,24106,24110,24118,24123,24133],{"__ignoreMap":63},[68,24029,24030,24032],{"class":70,"line":71},[68,24031,16182],{"class":316},[68,24033,16659],{"class":74},[68,24035,24036],{"class":70,"line":82},[68,24037,3038],{"class":78},[68,24039,24040],{"class":70,"line":98},[68,24041,16204],{"class":316},[68,24043,24044],{"class":70,"line":104},[68,24045,24046],{"class":302},"    \u002F\u002F在公共权限下定义静态成员函数\n",[68,24048,24049,24051,24054,24056],{"class":70,"line":112},[68,24050,12508],{"class":316},[68,24052,24053],{"class":316}," void",[68,24055,12873],{"class":74},[68,24057,3466],{"class":78},[68,24059,24060],{"class":70,"line":124},[68,24061,3520],{"class":78},[68,24063,24064,24067,24069,24072,24074],{"class":70,"line":1496},[68,24065,24066],{"class":78},"        coout",[68,24068,2670],{"class":316},[68,24070,24071],{"class":1742},"\"静态成员函数的调用\"",[68,24073,2670],{"class":316},[68,24075,2692],{"class":78},[68,24077,24078],{"class":70,"line":1502},[68,24079,3677],{"class":78},[68,24081,24082],{"class":70,"line":1510},[68,24083,5485],{"class":78},[68,24085,24086,24088,24090],{"class":70,"line":1521},[68,24087,6853],{"class":316},[68,24089,7077],{"class":74},[68,24091,3466],{"class":78},[68,24093,24094],{"class":70,"line":3103},[68,24095,3038],{"class":78},[68,24097,24098],{"class":70,"line":3108},[68,24099,24100],{"class":302},"    \u002F\u002F静态成员函数的调用方式:\n",[68,24102,24103],{"class":70,"line":3114},[68,24104,24105],{"class":302},"    \u002F\u002F1.通过对象访问\n",[68,24107,24108],{"class":70,"line":3119},[68,24109,16801],{"class":78},[68,24111,24112,24114,24116],{"class":70,"line":3133},[68,24113,17353],{"class":78},[68,24115,13039],{"class":74},[68,24117,7125],{"class":78},[68,24119,24120],{"class":70,"line":3138},[68,24121,24122],{"class":302},"    \u002F\u002F2.通过类名访问\n",[68,24124,24125,24127,24129,24131],{"class":70,"line":3144},[68,24126,20006],{"class":74},[68,24128,19219],{"class":78},[68,24130,13039],{"class":74},[68,24132,7125],{"class":78},[68,24134,24135],{"class":70,"line":3165},[68,24136,101],{"class":78},[263,24138,24139],{"start":82},[27,24140,24141],{},"静态成员函数只能访问静态成员变量",[58,24143,24145],{"className":1628,"code":24144,"language":1630,"meta":63,"style":63},"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",[65,24146,24147,24153,24157,24161,24165,24175,24179,24193,24198,24210,24214,24225,24235,24239,24243,24247,24257,24261,24274,24278,24282,24286,24290,24304,24312,24316,24320,24324,24328,24336,24340,24350,24355,24359,24367,24371,24377],{"__ignoreMap":63},[68,24148,24149,24151],{"class":70,"line":71},[68,24150,16182],{"class":316},[68,24152,16659],{"class":74},[68,24154,24155],{"class":70,"line":82},[68,24156,3038],{"class":78},[68,24158,24159],{"class":70,"line":98},[68,24160,16204],{"class":316},[68,24162,24163],{"class":70,"line":104},[68,24164,24046],{"class":302},[68,24166,24167,24169,24171,24173],{"class":70,"line":112},[68,24168,12508],{"class":316},[68,24170,24053],{"class":316},[68,24172,12873],{"class":74},[68,24174,3466],{"class":78},[68,24176,24177],{"class":70,"line":124},[68,24178,3520],{"class":78},[68,24180,24181,24184,24186,24188,24190],{"class":70,"line":1496},[68,24182,24183],{"class":78},"        m_A",[68,24185,1685],{"class":316},[68,24187,1940],{"class":85},[68,24189,1694],{"class":78},[68,24191,24192],{"class":302}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[68,24194,24195],{"class":70,"line":1502},[68,24196,24197],{"class":302},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[68,24199,24200,24202,24204,24206,24208],{"class":70,"line":1510},[68,24201,24066],{"class":78},[68,24203,2670],{"class":316},[68,24205,24071],{"class":1742},[68,24207,2670],{"class":316},[68,24209,2692],{"class":78},[68,24211,24212],{"class":70,"line":1521},[68,24213,3677],{"class":78},[68,24215,24216,24218,24220,24222],{"class":70,"line":3103},[68,24217,12508],{"class":316},[68,24219,3872],{"class":316},[68,24221,16936],{"class":78},[68,24223,24224],{"class":302}," \u002F\u002F静态成员变量\n",[68,24226,24227,24229,24232],{"class":70,"line":3108},[68,24228,3475],{"class":316},[68,24230,24231],{"class":78}," m_B;",[68,24233,24234],{"class":302}," \u002F\u002F非静态成员变量\n",[68,24236,24237],{"class":70,"line":3114},[68,24238,3890],{"emptyLinePlaceholder":1567},[68,24240,24241],{"class":70,"line":3119},[68,24242,16710],{"class":316},[68,24244,24245],{"class":70,"line":3133},[68,24246,23859],{"class":302},[68,24248,24249,24251,24253,24255],{"class":70,"line":3138},[68,24250,12508],{"class":316},[68,24252,24053],{"class":316},[68,24254,15106],{"class":74},[68,24256,3466],{"class":78},[68,24258,24259],{"class":70,"line":3144},[68,24260,3520],{"class":78},[68,24262,24263,24265,24267,24270,24272],{"class":70,"line":3165},[68,24264,4941],{"class":78},[68,24266,2670],{"class":316},[68,24268,24269],{"class":1742},"\"这是私有权限下的静态函数调用\"",[68,24271,2670],{"class":316},[68,24273,2692],{"class":78},[68,24275,24276],{"class":70,"line":3170},[68,24277,3677],{"class":78},[68,24279,24280],{"class":70,"line":3184},[68,24281,3890],{"emptyLinePlaceholder":1567},[68,24283,24284],{"class":70,"line":3189},[68,24285,3890],{"emptyLinePlaceholder":1567},[68,24287,24288],{"class":70,"line":3218},[68,24289,5485],{"class":78},[68,24291,24292,24294,24296,24298,24300,24302],{"class":70,"line":3223},[68,24293,1643],{"class":316},[68,24295,17057],{"class":74},[68,24297,23689],{"class":78},[68,24299,1685],{"class":316},[68,24301,1248],{"class":85},[68,24303,95],{"class":78},[68,24305,24306,24308,24310],{"class":70,"line":3240},[68,24307,6853],{"class":316},[68,24309,7077],{"class":74},[68,24311,3466],{"class":78},[68,24313,24314],{"class":70,"line":3245},[68,24315,3038],{"class":78},[68,24317,24318],{"class":70,"line":3250},[68,24319,24100],{"class":302},[68,24321,24322],{"class":70,"line":3255},[68,24323,24105],{"class":302},[68,24325,24326],{"class":70,"line":3269},[68,24327,16801],{"class":78},[68,24329,24330,24332,24334],{"class":70,"line":3274},[68,24331,17353],{"class":78},[68,24333,13039],{"class":74},[68,24335,7125],{"class":78},[68,24337,24338],{"class":70,"line":4067},[68,24339,24122],{"class":302},[68,24341,24342,24344,24346,24348],{"class":70,"line":4081},[68,24343,20006],{"class":74},[68,24345,19219],{"class":78},[68,24347,13039],{"class":74},[68,24349,7125],{"class":78},[68,24351,24352],{"class":70,"line":4089},[68,24353,24354],{"class":302},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[68,24356,24357],{"class":70,"line":4094},[68,24358,101],{"class":78},[68,24360,24361,24363,24365],{"class":70,"line":4100},[68,24362,1643],{"class":316},[68,24364,3463],{"class":74},[68,24366,3466],{"class":78},[68,24368,24369],{"class":70,"line":4106},[68,24370,3038],{"class":78},[68,24372,24373,24375],{"class":70,"line":4111},[68,24374,7122],{"class":74},[68,24376,7125],{"class":78},[68,24378,24379],{"class":70,"line":9437},[68,24380,101],{"class":78},[19,24382,24384],{"id":24383},"_83c对象模型和this指针","8.3C++对象模型和this指针",[245,24386,24388],{"id":24387},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[170,24390,24391],{},"在c++中，类内的成员变量和成员函数分开存储",[170,24393,24394],{},"只有非静态成员变量才属于类的对象上",[24396,24397,24399],"h5",{"id":24398},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[58,24401,24403],{"className":1628,"code":24402,"language":1630,"meta":63,"style":63},"#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",[65,24404,24405,24412,24422,24428,24432,24436,24440,24448,24452,24456,24479,24483,24491,24495,24501],{"__ignoreMap":63},[68,24406,24407,24409],{"class":70,"line":71},[68,24408,3440],{"class":316},[68,24410,24411],{"class":1742},"\u003Ciostraem>\n",[68,24413,24414,24416,24418,24420],{"class":70,"line":82},[68,24415,3448],{"class":316},[68,24417,3451],{"class":316},[68,24419,3454],{"class":74},[68,24421,95],{"class":78},[68,24423,24424,24426],{"class":70,"line":98},[68,24425,16182],{"class":316},[68,24427,16659],{"class":74},[68,24429,24430],{"class":70,"line":104},[68,24431,3038],{"class":78},[68,24433,24434],{"class":70,"line":112},[68,24435,3890],{"emptyLinePlaceholder":1567},[68,24437,24438],{"class":70,"line":124},[68,24439,5485],{"class":78},[68,24441,24442,24444,24446],{"class":70,"line":1496},[68,24443,6853],{"class":316},[68,24445,7077],{"class":74},[68,24447,3466],{"class":78},[68,24449,24450],{"class":70,"line":1502},[68,24451,3038],{"class":78},[68,24453,24454],{"class":70,"line":1510},[68,24455,16801],{"class":78},[68,24457,24458,24460,24462,24465,24467,24470,24472,24474,24476],{"class":70,"line":1521},[68,24459,3043],{"class":78},[68,24461,2670],{"class":316},[68,24463,24464],{"class":1742},"\"size of p=\"",[68,24466,2670],{"class":316},[68,24468,24469],{"class":74},"sizeoif",[68,24471,8028],{"class":78},[68,24473,2670],{"class":316},[68,24475,2735],{"class":78},[68,24477,24478],{"class":302}," \u002F\u002F查看这个空类的占用的内存空间\n",[68,24480,24481],{"class":70,"line":3103},[68,24482,101],{"class":78},[68,24484,24485,24487,24489],{"class":70,"line":3108},[68,24486,1643],{"class":316},[68,24488,3463],{"class":74},[68,24490,3466],{"class":78},[68,24492,24493],{"class":70,"line":3114},[68,24494,3038],{"class":78},[68,24496,24497,24499],{"class":70,"line":3119},[68,24498,7122],{"class":74},[68,24500,7125],{"class":78},[68,24502,24503],{"class":70,"line":3133},[68,24504,101],{"class":78},[170,24506,24507],{},"输出结果为：size of p=1",[170,24509,24510],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[170,24512,24513],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24396,24515,24517],{"id":24516},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[58,24519,24521],{"className":1628,"code":24520,"language":1630,"meta":63,"style":63},"#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",[65,24522,24523,24529,24539,24547,24551,24560,24564,24572,24576,24580,24599,24603,24607,24615,24619,24625],{"__ignoreMap":63},[68,24524,24525,24527],{"class":70,"line":71},[68,24526,3440],{"class":316},[68,24528,3443],{"class":1742},[68,24530,24531,24533,24535,24537],{"class":70,"line":82},[68,24532,3448],{"class":316},[68,24534,3451],{"class":316},[68,24536,3454],{"class":74},[68,24538,95],{"class":78},[68,24540,24541,24543,24545],{"class":70,"line":98},[68,24542,16182],{"class":316},[68,24544,17057],{"class":74},[68,24546,4164],{"class":78},[68,24548,24549],{"class":70,"line":104},[68,24550,3038],{"class":78},[68,24552,24553,24555,24557],{"class":70,"line":112},[68,24554,3475],{"class":316},[68,24556,16936],{"class":78},[68,24558,24559],{"class":302},"\u002F\u002F非静态成员变量\n",[68,24561,24562],{"class":70,"line":124},[68,24563,5485],{"class":78},[68,24565,24566,24568,24570],{"class":70,"line":1496},[68,24567,6853],{"class":316},[68,24569,7077],{"class":74},[68,24571,3466],{"class":78},[68,24573,24574],{"class":70,"line":1502},[68,24575,3038],{"class":78},[68,24577,24578],{"class":70,"line":1510},[68,24579,16801],{"class":78},[68,24581,24582,24584,24586,24588,24590,24592,24594,24596],{"class":70,"line":1521},[68,24583,3043],{"class":78},[68,24585,2670],{"class":316},[68,24587,24464],{"class":1742},[68,24589,2865],{"class":316},[68,24591,8028],{"class":78},[68,24593,2670],{"class":316},[68,24595,2735],{"class":78},[68,24597,24598],{"class":302}," \u002F\u002F查看不是空对象时占用多少内存\n",[68,24600,24601],{"class":70,"line":3103},[68,24602,3890],{"emptyLinePlaceholder":1567},[68,24604,24605],{"class":70,"line":3108},[68,24606,101],{"class":78},[68,24608,24609,24611,24613],{"class":70,"line":3114},[68,24610,1643],{"class":316},[68,24612,3463],{"class":74},[68,24614,3466],{"class":78},[68,24616,24617],{"class":70,"line":3119},[68,24618,3038],{"class":78},[68,24620,24621,24623],{"class":70,"line":3133},[68,24622,7122],{"class":74},[68,24624,7125],{"class":78},[68,24626,24627],{"class":70,"line":3138},[68,24628,101],{"class":78},[170,24630,24631],{},"输出结果：size of p=4",[170,24633,24634],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[263,24636,24637],{},[27,24638,24639],{},"如果加上非静态成员变量，Person类修改如下",[58,24641,24643],{"className":1628,"code":24642,"language":1630,"meta":63,"style":63},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[65,24644,24645,24651,24655,24661,24669,24673,24678],{"__ignoreMap":63},[68,24646,24647,24649],{"class":70,"line":71},[68,24648,16182],{"class":316},[68,24650,16659],{"class":74},[68,24652,24653],{"class":70,"line":82},[68,24654,3038],{"class":78},[68,24656,24657,24659],{"class":70,"line":98},[68,24658,3475],{"class":316},[68,24660,22879],{"class":78},[68,24662,24663,24665,24667],{"class":70,"line":104},[68,24664,12508],{"class":316},[68,24666,3872],{"class":316},[68,24668,22886],{"class":78},[68,24670,24671],{"class":70,"line":112},[68,24672,5485],{"class":78},[68,24674,24675],{"class":70,"line":124},[68,24676,24677],{"class":302},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[68,24679,24680,24682,24684,24686,24688,24690],{"class":70,"line":1496},[68,24681,1643],{"class":316},[68,24683,17057],{"class":74},[68,24685,23898],{"class":78},[68,24687,1685],{"class":316},[68,24689,1248],{"class":85},[68,24691,95],{"class":78},[170,24693,24694],{},"输出结果：4",[170,24696,24697],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[263,24699,24700],{"start":82},[27,24701,24702],{},"加上非静态成员函数",[58,24704,24706],{"className":1628,"code":24705,"language":1630,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[65,24707,24708,24715,24719,24725,24733,24737,24741,24745],{"__ignoreMap":63},[68,24709,24710,24712],{"class":70,"line":71},[68,24711,16182],{"class":316},[68,24713,24714],{"class":74},"  Person\n",[68,24716,24717],{"class":70,"line":82},[68,24718,3038],{"class":78},[68,24720,24721,24723],{"class":70,"line":98},[68,24722,3475],{"class":316},[68,24724,22879],{"class":78},[68,24726,24727,24729,24731],{"class":70,"line":104},[68,24728,16397],{"class":316},[68,24730,12873],{"class":74},[68,24732,3466],{"class":78},[68,24734,24735],{"class":70,"line":112},[68,24736,3520],{"class":78},[68,24738,24739],{"class":70,"line":124},[68,24740,3890],{"emptyLinePlaceholder":1567},[68,24742,24743],{"class":70,"line":1496},[68,24744,3677],{"class":78},[68,24746,24747],{"class":70,"line":1502},[68,24748,5485],{"class":78},[170,24750,24751],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[263,24753,24754],{"start":98},[27,24755,24756],{},"加上静态成员函数",[58,24758,24760],{"className":1628,"code":24759,"language":1630,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[65,24761,24762,24768,24772,24778,24786,24790,24794,24798,24809,24813,24817,24821],{"__ignoreMap":63},[68,24763,24764,24766],{"class":70,"line":71},[68,24765,16182],{"class":316},[68,24767,24714],{"class":74},[68,24769,24770],{"class":70,"line":82},[68,24771,3038],{"class":78},[68,24773,24774,24776],{"class":70,"line":98},[68,24775,3475],{"class":316},[68,24777,22879],{"class":78},[68,24779,24780,24782,24784],{"class":70,"line":104},[68,24781,16397],{"class":316},[68,24783,12873],{"class":74},[68,24785,3466],{"class":78},[68,24787,24788],{"class":70,"line":112},[68,24789,3520],{"class":78},[68,24791,24792],{"class":70,"line":124},[68,24793,3890],{"emptyLinePlaceholder":1567},[68,24795,24796],{"class":70,"line":1496},[68,24797,3677],{"class":78},[68,24799,24800,24802,24804,24807],{"class":70,"line":1502},[68,24801,12508],{"class":316},[68,24803,24053],{"class":316},[68,24805,24806],{"class":74}," func1",[68,24808,3466],{"class":78},[68,24810,24811],{"class":70,"line":1510},[68,24812,3520],{"class":78},[68,24814,24815],{"class":70,"line":1521},[68,24816,3890],{"emptyLinePlaceholder":1567},[68,24818,24819],{"class":70,"line":3103},[68,24820,3677],{"class":78},[68,24822,24823],{"class":70,"line":3108},[68,24824,5485],{"class":78},[170,24826,24694],{},[170,24828,24829],{},"解释：静态成员函数也不属于类上",[1553,24831,9163],{},{"title":63,"searchDepth":82,"depth":82,"links":24833},[24834,24840],{"id":16133,"depth":82,"text":16134,"children":24835},[24836,24837,24838,24839],{"id":16137,"depth":98,"text":16138},{"id":16862,"depth":98,"text":16863},{"id":17034,"depth":98,"text":17035},{"id":17492,"depth":98,"text":17493},{"id":19864,"depth":82,"text":19865,"children":24841},[24842,24843,24844,24845,24846,24847,24848,24849,24850],{"id":19876,"depth":98,"text":19877},{"id":20169,"depth":98,"text":20170},{"id":20660,"depth":98,"text":20661},{"id":21757,"depth":98,"text":21758},{"id":22180,"depth":98,"text":22181},{"id":22659,"depth":98,"text":22660},{"id":23034,"depth":98,"text":23035},{"id":23447,"depth":98,"text":23448},{"id":24383,"depth":98,"text":24384},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16098,"description":24851},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24858,"title":1630,"body":24859,"description":1564,"extension":1565,"meta":24863,"navigation":1567,"path":24865,"seo":24866,"stem":24867,"__hash__":24868},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24860,"toc":24861},[],{"title":63,"searchDepth":82,"depth":82,"links":24862},[],{"category":24864},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1630,"description":1564},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24870,"title":24871,"body":24872,"description":63,"extension":1565,"meta":25462,"navigation":1567,"path":25463,"seo":25464,"stem":25465,"__hash__":25466},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24873,"toc":25444},[24874,24877,24881,24884,24887,24890,24908,24913,24916,24919,24922,24925,24930,24933,24938,24941,24944,24948,24951,24954,24960,24963,24981,24985,24989,24992,24997,25000,25004,25007,25020,25023,25027,25030,25033,25036,25061,25064,25073,25084,25099,25131,25135,25142,25150,25154,25157,25160,25165,25169,25172,25175,25180,25183,25187,25190,25193,25198,25201,25205,25210,25214,25280,25284,25287,25290,25293,25296,25299,25305,25326,25329,25343,25352,25356,25359,25362,25367,25370,25375,25380,25383,25386,25391,25396,25399,25404,25409,25412,25417,25422,25425,25428,25433,25436,25441],[10,24875,24871],{"id":24876},"_1强化学习基本认识",[14,24878,24880],{"id":24879},"_11什么是强化学习","1.1.什么是强化学习",[170,24882,24883],{},"强化学习有两部分组成：智能体和环境；",[170,24885,24886],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[170,24888,24889],{},"强化学习与监督学习的区别:",[263,24891,24892,24895,24898,24901],{},[27,24893,24894],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[27,24896,24897],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[27,24899,24900],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[27,24902,24903,24904,24907],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[268,24905,24906],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[170,24909,24910],{},[801,24911],{"alt":63,"src":24912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[170,24914,24915],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[170,24917,24918],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[170,24920,24921],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[170,24923,24924],{},"获取奖励",[170,24926,24927],{},[801,24928],{"alt":63,"src":24929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[170,24931,24932],{},"强化学习可以分成标准强化学习和深度强化学习",[170,24934,24935],{},[801,24936],{"alt":63,"src":24937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[170,24939,24940],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[170,24942,24943],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24945,24947],{"id":24946},"_12强化学习应用场景","1.2.强化学习应用场景",[170,24949,24950],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[170,24952,24953],{},"具身智能中的应用",[170,24955,24956,24959],{},[268,24957,24958],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[170,24961,24962],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[170,24964,24965,24966,24969,24970,24973,24974,24977,24978],{},"机器人是",[268,24967,24968],{},"躯体","，深度学习是",[268,24971,24972],{},"神经元****网络","，VLA是",[268,24975,24976],{},"通用的行为逻辑","，而强化学习是",[268,24979,24980],{},"教练",[14,24982,24984],{"id":24983},"_13序列决策","1.3.序列决策",[19,24986,24988],{"id":24987},"_131智能体与环境","1.3.1.智能体与环境",[170,24990,24991],{},"强化学习研究的问题是智能体agent与环境交互的问题",[170,24993,24994],{},[801,24995],{"alt":63,"src":24996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[170,24998,24999],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,25001,25003],{"id":25002},"_132奖励","1.3.2.奖励",[170,25005,25006],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[170,25008,25009,25010,25019],{},"取某个策略的表现如何。强化学习的目的就是",[268,25011,25012,25013,25018],{},"最大化",[268,25014,25015],{},[268,25016,25017],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[170,25021,25022],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,25024,25026],{"id":25025},"_133序列决策","1.3.3.序列决策",[170,25028,25029],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[170,25031,25032],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[170,25034,25035],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[170,25037,25038,25042,25043,25045,25046,25048,25049,25051,25052,15283,25055,15283,25058],{},[25039,25040,25041],"em",{},"Ht"," = ",[25039,25044,2224],{},"1*, a",[25039,25047,1846],{},", r",[25039,25050,1846],{},", . . . ,* ",[25039,25053,25054],{},"ot",[25039,25056,25057],{},", at ,",[25039,25059,25060],{},"rt",[170,25062,25063],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[170,25065,25066,25042,25069,3149,25071,2058],{},[25039,25067,25068],{},"st",[25039,25070,1691],{},[25039,25072,25041],{},[170,25074,25075,25076,25079,25080,25083],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[268,25077,25078],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[268,25081,25082],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[170,25085,25086,25087,25090,25091,25094,25095,25098],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[268,25088,25089],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[268,25092,25093],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25039,25096,25097],{},"S, A, T, R, Ω, O, γ",")。",[170,25100,25101,25102,25104,25105,25107,25108,1640,25110,25113,25114,25116,25117,1640,25120,25123,25124,25126,25127,25130],{},"其中 ",[25039,25103,2317],{}," 表示状态空间，为隐变量，",[25039,25106,1861],{}," 为动作空间，",[25039,25109,2341],{},[25039,25111,25112],{},"s ′ |s, a",") 为状态转移概率，",[25039,25115,2292],{}," 为奖励函数，",[25039,25118,25119],{},"Ω",[25039,25121,25122],{},"o|s, a",") 为观测概率，",[25039,25125,2218],{}," 为观测空间，",[25039,25128,25129],{},"γ"," 为折扣因子。",[14,25132,25134],{"id":25133},"_14动作空间","1.4.动作空间",[170,25136,25137,25138,25141],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[268,25139,25140],{},"动作空间"," ，动作空间分为:",[263,25143,25144,25147],{},[27,25145,25146],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[27,25148,25149],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25151,25153],{"id":25152},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[170,25155,25156],{},"由策略、价值函数、模型三部分组成",[170,25158,25159],{},"这三者组成马尔可夫决策过程",[170,25161,25162],{},[801,25163],{"alt":63,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,25166,25168],{"id":25167},"_151策略","1.5.1.策略",[170,25170,25171],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[170,25173,25174],{},"策略可分为两种：",[170,25176,25177],{},[801,25178],{"alt":63,"src":25179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[170,25181,25182],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,25184,25186],{"id":25185},"_152价值函数","1.5.2.价值函数",[170,25188,25189],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[170,25191,25192],{},"价值函数中有一个折扣因子，类似于存款利息",[170,25194,25195],{},[801,25196],{"alt":63,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[170,25199,25200],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,25202,25204],{"id":25203},"_153模型","1.5.3.模型",[170,25206,25207],{},[801,25208],{"alt":63,"src":25209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25211,25213],{"id":25212},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[128,25215,25216,25226],{},[131,25217,25218],{},[134,25219,25220,25223],{},[137,25221,25222],{"align":92},"类型",[137,25224,25225],{"align":92},"特点",[144,25227,25228,25238,25248,25258,25270],{},[134,25229,25230,25235],{},[149,25231,25232],{"align":92},[268,25233,25234],{},"基于价值的智能体",[149,25236,25237],{"align":92},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[134,25239,25240,25245],{},[149,25241,25242],{"align":92},[268,25243,25244],{},"基于策略的智能体",[149,25246,25247],{"align":92},"直接学习策略，没有学习价值函数",[134,25249,25250,25255],{},[149,25251,25252],{"align":92},[268,25253,25254],{},"演员-评论员智能体",[149,25256,25257],{"align":92},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[134,25259,25260,25265],{},[149,25261,25262],{"align":92},[268,25263,25264],{},"有模型强化学习智能体",[149,25266,25267],{"align":92},[801,25268],{"alt":63,"src":25269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[134,25271,25272,25277],{},[149,25273,25274],{"align":92},[268,25275,25276],{},"免模型强化学习智能体",[149,25278,25279],{"align":92},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25281,25283],{"id":25282},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[170,25285,25286],{},"学习和规划是序列决策的两个基本问题",[170,25288,25289],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[170,25291,25292],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[170,25294,25295],{},"强化学习用到的库：Gym",[170,25297,25298],{},"Gym可以检验强化学习算法的优劣",[170,25300,25301,25304],{},[268,25302,25303],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[58,25306,25310],{"className":25307,"code":25308,"language":25309,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[65,25311,25312],{"__ignoreMap":63},[68,25313,25314,25317,25320,25323],{"class":70,"line":71},[68,25315,25316],{"class":74},"pip",[68,25318,25319],{"class":1742}," install",[68,25321,25322],{"class":1742}," gym==",[68,25324,25325],{"class":85},"0.25.2\n",[170,25327,25328],{},"显示图形界面需要",[58,25330,25332],{"className":25307,"code":25331,"language":25309,"meta":63,"style":63},"pip install pygame\n",[65,25333,25334],{"__ignoreMap":63},[68,25335,25336,25338,25340],{"class":70,"line":71},[68,25337,25316],{"class":74},[68,25339,25319],{"class":1742},[68,25341,25342],{"class":1742}," pygame\n",[170,25344,25345,25346],{},"有关Gym库的相关文档介绍：",[1867,25347,25351],{"href":25348,"rel":25349},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25350],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25353,25355],{"id":25354},"_18一些补充基础概念","1.8.一些补充基础概念",[170,25357,25358],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[170,25360,25361],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[170,25363,25364],{},[801,25365],{"alt":63,"src":25366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[170,25368,25369],{},"折扣率需要自己来设定",[170,25371,25372],{},[801,25373],{"alt":63,"src":25374},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[263,25376,25377],{},[27,25378,25379],{},"状态转移函数：",[170,25381,25382],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[170,25384,25385],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[170,25387,25388],{},[801,25389],{"alt":63,"src":25390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[263,25392,25393],{"start":82},[27,25394,25395],{},"动作价值函数：",[170,25397,25398],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[170,25400,25401],{},[801,25402],{"alt":63,"src":25403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[263,25405,25406],{"start":98},[27,25407,25408],{},"最优动作价值函数：",[170,25410,25411],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[170,25413,25414],{},[801,25415],{"alt":63,"src":25416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[263,25418,25419],{"start":104},[27,25420,25421],{},"状态价值函数:",[170,25423,25424],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[170,25426,25427],{},"它衡量的是“一个具体动作”的长期价值",[170,25429,25430],{},[801,25431],{"alt":63,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[170,25434,25435],{},"几个价值函数之间的比较：",[170,25437,25438],{},[801,25439],{"alt":63,"src":25440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1553,25442,25443],{},"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":63,"searchDepth":82,"depth":82,"links":25445},[25446,25447,25448,25453,25454,25459,25460,25461],{"id":24879,"depth":82,"text":24880},{"id":24946,"depth":82,"text":24947},{"id":24983,"depth":82,"text":24984,"children":25449},[25450,25451,25452],{"id":24987,"depth":98,"text":24988},{"id":25002,"depth":98,"text":25003},{"id":25025,"depth":98,"text":25026},{"id":25133,"depth":82,"text":25134},{"id":25152,"depth":82,"text":25153,"children":25455},[25456,25457,25458],{"id":25167,"depth":98,"text":25168},{"id":25185,"depth":98,"text":25186},{"id":25203,"depth":98,"text":25204},{"id":25212,"depth":82,"text":25213},{"id":25282,"depth":82,"text":25283},{"id":25354,"depth":82,"text":25355},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24871,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25468,"title":25469,"body":25470,"description":25477,"extension":1565,"meta":25488,"navigation":1567,"path":25489,"seo":25490,"stem":25491,"__hash__":25492},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25471,"toc":25486},[25472,25475,25478,25483],[10,25473,25469],{"id":25474},"_2马尔可夫决策过程",[170,25476,25477],{},"这是强化学习的基本框架",[170,25479,25480],{},[801,25481],{"alt":63,"src":25482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[170,25484,25485],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":63,"searchDepth":82,"depth":82,"links":25487},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25469,"description":25477},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25494,"title":25495,"body":25496,"description":63,"extension":1565,"meta":25612,"navigation":1567,"path":25613,"seo":25614,"stem":25615,"__hash__":25616},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25497,"toc":25607},[25498,25501,25505,25508,25513,25518,25521,25526,25529,25534,25537,25541,25546,25549,25554,25559,25564,25567,25571,25576,25579,25584,25589,25594,25599,25602],[10,25499,25495],{"id":25500},"_3动作价值函数",[14,25502,25504],{"id":25503},"_31dqn","3.1.DQN",[170,25506,25507],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[170,25509,25510],{},[801,25511],{"alt":63,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[170,25514,25515],{},[801,25516],{"alt":63,"src":25517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[170,25519,25520],{},"DQN算法的描述：",[170,25522,25523],{},[801,25524],{"alt":63,"src":25525},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[170,25527,25528],{},"这里的Dense指的是全连接层",[170,25530,25531],{},[801,25532],{"alt":63,"src":25533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[170,25535,25536],{},"当前观测的状态为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,25538,25540],{"id":25539},"_32dqn的举例","3.2.DQN的举例",[170,25542,25543],{},[801,25544],{"alt":63,"src":25545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[170,25547,25548],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[170,25550,25551],{},[801,25552],{"alt":63,"src":25553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[170,25555,25556],{},[801,25557],{"alt":63,"src":25558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[170,25560,25561],{},[801,25562],{"alt":63,"src":25563},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[170,25565,25566],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25568,25570],{"id":25569},"_33td算法","3.3.TD算法",[170,25572,25573],{},[801,25574],{"alt":63,"src":25575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[170,25577,25578],{},"强化学习TD算法公式的粗略解释：",[170,25580,25581],{},[801,25582],{"alt":63,"src":25583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[170,25585,25586],{},[801,25587],{"alt":63,"src":25588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[170,25590,25591],{},[801,25592],{"alt":63,"src":25593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[170,25595,25596],{},[801,25597],{"alt":63,"src":25598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[170,25600,25601],{},"TD算法总结：",[170,25603,25604],{},[801,25605],{"alt":63,"src":25606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":63,"searchDepth":82,"depth":82,"links":25608},[25609,25610,25611],{"id":25503,"depth":82,"text":25504},{"id":25539,"depth":82,"text":25540},{"id":25569,"depth":82,"text":25570},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25495,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25618,"title":25619,"body":25620,"description":63,"extension":1565,"meta":25853,"navigation":1567,"path":25854,"seo":25855,"stem":25856,"__hash__":25857},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25621,"toc":25849},[25622,25625,25629,25632,25635,25640,25645,25648,25653,25658,25661,25666,25669,25674,25677,25682,25685,25690,25693,25698,25703,25706,25711,25714,25717,25722,25725,25730,25735,25739,25742,25745,25750,25755,25758,25763,25768,25771,25776,25779,25782,25787,25790,25795,25798,25803,25808,25811,25816,25821,25824,25829,25832,25837,25840],[10,25623,25619],{"id":25624},"_4策略学习",[14,25626,25628],{"id":25627},"_41概念描述","4.1.概念描述",[170,25630,25631],{},"用神经网络（策略网络）近似策略函数",[170,25633,25634],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[170,25636,25637],{},[801,25638],{"alt":63,"src":25639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[170,25641,25642],{},[801,25643],{"alt":63,"src":25644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[170,25646,25647],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[170,25649,25650],{},[801,25651],{"alt":63,"src":25652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[170,25654,25655],{},[801,25656],{"alt":63,"src":25657},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[170,25659,25660],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[170,25662,25663],{},[801,25664],{"alt":63,"src":25665},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[170,25667,25668],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[170,25670,25671],{},[801,25672],{"alt":63,"src":25673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[170,25675,25676],{},"改进theta要用到策略梯度算法",[170,25678,25679],{},[801,25680],{"alt":63,"src":25681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[170,25683,25684],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[170,25686,25687],{},[801,25688],{"alt":63,"src":25689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[170,25691,25692],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[170,25694,25695],{},[801,25696],{"alt":63,"src":25697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[170,25699,25700],{},[801,25701],{"alt":63,"src":25702},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[170,25704,25705],{},"梯度公式总结：",[170,25707,25708],{},[801,25709],{"alt":63,"src":25710},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[170,25712,25713],{},"两个公式的分别应用场景：",[170,25715,25716],{},"对于离散的动作：",[170,25718,25719],{},[801,25720],{"alt":63,"src":25721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[170,25723,25724],{},"对于连续的动作：",[170,25726,25727],{},[801,25728],{"alt":63,"src":25729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[170,25731,25732],{},[801,25733],{"alt":63,"src":25734},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25736,25738],{"id":25737},"_42概率梯度算法总结","4.2.概率梯度算法总结",[170,25740,25741],{},"使用蒙特卡洛来近似计算策略梯度",[170,25743,25744],{},"蒙特卡洛法的解释如下：",[170,25746,25747],{},[801,25748],{"alt":63,"src":25749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[170,25751,25752],{},[801,25753],{"alt":63,"src":25754},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[170,25756,25757],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[263,25759,25760],{},[27,25761,25762],{},"方法一：reinforce算法",[170,25764,25765],{},[801,25766],{"alt":63,"src":25767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[170,25769,25770],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[263,25772,25773],{"start":82},[27,25774,25775],{},"方法二：actor-critic算法",[170,25777,25778],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[170,25780,25781],{},"两个网络的构建：",[170,25783,25784],{},[801,25785],{"alt":63,"src":25786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[170,25788,25789],{},"actor网路：",[170,25791,25792],{},[801,25793],{"alt":63,"src":25794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[170,25796,25797],{},"critic网络",[170,25799,25800],{},[801,25801],{"alt":63,"src":25802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[263,25804,25805],{"start":98},[27,25806,25807],{},"网络的训练",[170,25809,25810],{},"网络描述",[170,25812,25813],{},[801,25814],{"alt":63,"src":25815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[170,25817,25818],{},[801,25819],{"alt":63,"src":25820},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[170,25822,25823],{},"TD算法更新梯度：",[170,25825,25826],{},[801,25827],{"alt":63,"src":25828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[170,25830,25831],{},"策略网络更新梯度：",[170,25833,25834],{},[801,25835],{"alt":63,"src":25836},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[170,25838,25839],{},"训练整个流程的具体描述：",[170,25841,25842,25845,25846],{},[801,25843],{"alt":63,"src":25844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[801,25847],{"alt":63,"src":25848},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":63,"searchDepth":82,"depth":82,"links":25850},[25851,25852],{"id":25627,"depth":82,"text":25628},{"id":25737,"depth":82,"text":25738},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25619,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25859,"title":25860,"body":25861,"description":25868,"extension":1565,"meta":25918,"navigation":1567,"path":25919,"seo":25920,"stem":25921,"__hash__":25922},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25862,"toc":25914},[25863,25866,25869,25873,25876,25881,25885,25888,25893,25896,25901,25906,25909],[10,25864,25860],{"id":25865},"_5alphago算法",[170,25867,25868],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25870,25872],{"id":25871},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[170,25874,25875],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[170,25877,25878],{},[801,25879],{"alt":63,"src":25880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25882,25884],{"id":25883},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[170,25886,25887],{},"采用强化学习的方式训练策略网络",[170,25889,25890],{},[801,25891],{"alt":63,"src":25892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[170,25894,25895],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[170,25897,25898],{},[801,25899],{"alt":63,"src":25900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[170,25902,25903],{},[801,25904],{"alt":63,"src":25905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[170,25907,25908],{},"强化学习训练策略网络的总结：",[170,25910,25911],{},[801,25912],{"alt":63,"src":25913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":63,"searchDepth":82,"depth":82,"links":25915},[25916,25917],{"id":25871,"depth":82,"text":25872},{"id":25883,"depth":82,"text":25884},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25860,"description":25868},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25924,"title":25925,"body":25926,"description":25933,"extension":1565,"meta":25936,"navigation":1567,"path":25937,"seo":25938,"stem":25939,"__hash__":25940},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25927,"toc":25934},[25928,25931],[10,25929,25925],{"id":25930},"_6价值网络",[170,25932,25933],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":63,"searchDepth":82,"depth":82,"links":25935},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25925,"description":25933},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25942,"title":25943,"body":25944,"description":25948,"extension":1565,"meta":25949,"navigation":1567,"path":25950,"seo":25951,"stem":25952,"__hash__":25953},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25945,"toc":25946},[],{"title":63,"searchDepth":82,"depth":82,"links":25947},[],"记录自己的强化学习笔记。",{"category":24864},"\u002Fwiki\u002F2025-12-04",{"title":25943,"description":25948},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25955,"title":25956,"body":25957,"description":1564,"extension":1565,"meta":25996,"navigation":1567,"path":25997,"seo":25998,"stem":25999,"__hash__":26000},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25958,"toc":25994},[25959,25962,25965,25971,25974,25980,25983,25988,25991],[10,25960,25956],{"id":25961},"_1-项目概览与官方资源",[170,25963,25964],{},"官方文档：",[170,25966,25967],{},[1867,25968,25969],{"href":25969,"rel":25970},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25350],[170,25972,25973],{},"官方代码仓库：",[170,25975,25976],{},[1867,25977,25978],{"href":25978,"rel":25979},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25350],[170,25981,25982],{},"复现大体流程：",[170,25984,25985],{},[801,25986],{"alt":63,"src":25987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[170,25989,25990],{},"本教程的目标是打通这条链路：",[170,25992,25993],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":63,"searchDepth":82,"depth":82,"links":25995},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25956,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26002,"title":26003,"body":26004,"description":1564,"extension":1565,"meta":26120,"navigation":1567,"path":26121,"seo":26122,"stem":26123,"__hash__":26124},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26005,"toc":26115},[26006,26009,26013,26016,26023,26027,26030,26039,26049,26053,26083,26086,26112],[10,26007,26003],{"id":26008},"_2-环境准备与设备连接",[14,26010,26012],{"id":26011},"_21-系统与环境","2.1 系统与环境",[170,26014,26015],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[170,26017,26018,26019,26022],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[65,26020,26021],{},"lerobot"," 依赖。",[14,26024,26026],{"id":26025},"_22-机械臂串口识别","2.2 机械臂串口识别",[170,26028,26029],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[58,26031,26033],{"className":25307,"code":26032,"language":25309,"meta":63,"style":63},"lerobot-find-out\n",[65,26034,26035],{"__ignoreMap":63},[68,26036,26037],{"class":70,"line":71},[68,26038,26032],{"class":74},[170,26040,26041,26042,1841,26045,26048],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[65,26043,26044],{},"\u002Fdev\u002FttyACM0",[65,26046,26047],{},"\u002Fdev\u002FttyACM1","）。",[14,26050,26052],{"id":26051},"_23-串口授权","2.3 串口授权",[58,26054,26056],{"className":25307,"code":26055,"language":25309,"meta":63,"style":63},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[65,26057,26058,26072],{"__ignoreMap":63},[68,26059,26060,26063,26066,26069],{"class":70,"line":71},[68,26061,26062],{"class":74},"sudo",[68,26064,26065],{"class":1742}," chmod",[68,26067,26068],{"class":85}," 666",[68,26070,26071],{"class":1742}," \u002Fdev\u002FttyACM0\n",[68,26073,26074,26076,26078,26080],{"class":70,"line":82},[68,26075,26062],{"class":74},[68,26077,26065],{"class":1742},[68,26079,26068],{"class":85},[68,26081,26082],{"class":1742}," \u002Fdev\u002FttyACM1\n",[170,26084,26085],{},"说明：",[24,26087,26088,26093,26099,26109],{},[27,26089,26090,26092],{},[65,26091,26062],{},"：以 root 权限执行命令。",[27,26094,26095,26098],{},[65,26096,26097],{},"chmod","：修改设备节点权限。",[27,26100,26101,26104,26105,26108],{},[65,26102,26103],{},"666","：",[65,26106,26107],{},"rw-rw-rw-","，所有用户可读写。",[27,26110,26111],{},"串口号必须替换为你机器上的真实端口。",[1553,26113,26114],{},"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":63,"searchDepth":82,"depth":82,"links":26116},[26117,26118,26119],{"id":26011,"depth":82,"text":26012},{"id":26025,"depth":82,"text":26026},{"id":26051,"depth":82,"text":26052},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26003,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26126,"title":26127,"body":26128,"description":1564,"extension":1565,"meta":26289,"navigation":1567,"path":26290,"seo":26291,"stem":26292,"__hash__":26293},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26129,"toc":26285},[26130,26134,26138,26144,26147,26204,26207,26211,26214,26282],[10,26131,26133],{"id":26132},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26135,26137],{"id":26136},"_31-配置电机-id","3.1 配置电机 ID",[170,26139,26140,26141,26143],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[65,26142,1846],{},"，需要改成机械臂链路里不冲突的编号。",[170,26145,26146],{},"方式一：用 LeRobot 命令逐步写入。",[58,26148,26150],{"className":25307,"code":26149,"language":25309,"meta":63,"style":63},"# 主臂舵机配置 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",[65,26151,26152,26157,26165,26172,26177,26181,26186,26192,26199],{"__ignoreMap":63},[68,26153,26154],{"class":70,"line":71},[68,26155,26156],{"class":302},"# 主臂舵机配置 ID\n",[68,26158,26159,26162],{"class":70,"line":82},[68,26160,26161],{"class":74},"lerobot-setup-motors",[68,26163,26164],{"class":85}," \\\n",[68,26166,26167,26170],{"class":70,"line":98},[68,26168,26169],{"class":85},"  --teleop.type=so101_leader",[68,26171,26164],{"class":85},[68,26173,26174],{"class":70,"line":104},[68,26175,26176],{"class":85},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[68,26178,26179],{"class":70,"line":112},[68,26180,3890],{"emptyLinePlaceholder":1567},[68,26182,26183],{"class":70,"line":124},[68,26184,26185],{"class":302},"# 从臂舵机配置 ID\n",[68,26187,26188,26190],{"class":70,"line":1496},[68,26189,26161],{"class":74},[68,26191,26164],{"class":85},[68,26193,26194,26197],{"class":70,"line":1502},[68,26195,26196],{"class":85},"  --robot.type=so101_follower",[68,26198,26164],{"class":85},[68,26200,26201],{"class":70,"line":1510},[68,26202,26203],{"class":85},"  --robot.port=\u002Fdev\u002FttyACM1\n",[170,26205,26206],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26208,26210],{"id":26209},"_32-机械臂校准","3.2 机械臂校准",[170,26212,26213],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[58,26215,26217],{"className":25307,"code":26216,"language":25309,"meta":63,"style":63},"# 主臂校准\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",[65,26218,26219,26224,26231,26237,26244,26249,26253,26258,26264,26270,26277],{"__ignoreMap":63},[68,26220,26221],{"class":70,"line":71},[68,26222,26223],{"class":302},"# 主臂校准\n",[68,26225,26226,26229],{"class":70,"line":82},[68,26227,26228],{"class":74},"lerobot-calibrate",[68,26230,26164],{"class":85},[68,26232,26233,26235],{"class":70,"line":98},[68,26234,26169],{"class":85},[68,26236,26164],{"class":85},[68,26238,26239,26242],{"class":70,"line":104},[68,26240,26241],{"class":85},"  --teleop.port=\u002Fdev\u002FttyACM0",[68,26243,26164],{"class":85},[68,26245,26246],{"class":70,"line":112},[68,26247,26248],{"class":85},"  --teleop.id=my_awesome_leader_arm\n",[68,26250,26251],{"class":70,"line":124},[68,26252,3890],{"emptyLinePlaceholder":1567},[68,26254,26255],{"class":70,"line":1496},[68,26256,26257],{"class":302},"# 从臂校准\n",[68,26259,26260,26262],{"class":70,"line":1502},[68,26261,26228],{"class":74},[68,26263,26164],{"class":85},[68,26265,26266,26268],{"class":70,"line":1510},[68,26267,26196],{"class":85},[68,26269,26164],{"class":85},[68,26271,26272,26275],{"class":70,"line":1521},[68,26273,26274],{"class":85},"  --robot.port=\u002Fdev\u002FttyACM1",[68,26276,26164],{"class":85},[68,26278,26279],{"class":70,"line":3103},[68,26280,26281],{"class":85},"  --robot.id=my_awesome_follower_arm\n",[1553,26283,26284],{},"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":63,"searchDepth":82,"depth":82,"links":26286},[26287,26288],{"id":26136,"depth":82,"text":26137},{"id":26209,"depth":82,"text":26210},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26127,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26295,"title":26296,"body":26297,"description":1564,"extension":1565,"meta":26488,"navigation":1567,"path":26489,"seo":26490,"stem":26491,"__hash__":26492},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26298,"toc":26484},[26299,26302,26306,26353,26357,26370,26433,26436,26481],[10,26300,26296],{"id":26301},"_4-遥操与相机接入",[14,26303,26305],{"id":26304},"_41-不带相机遥操","4.1 不带相机遥操",[58,26307,26309],{"className":25307,"code":26308,"language":25309,"meta":63,"style":63},"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",[65,26310,26311,26318,26324,26330,26337,26343,26349],{"__ignoreMap":63},[68,26312,26313,26316],{"class":70,"line":71},[68,26314,26315],{"class":74},"lerobot-teleoperate",[68,26317,26164],{"class":85},[68,26319,26320,26322],{"class":70,"line":82},[68,26321,26196],{"class":85},[68,26323,26164],{"class":85},[68,26325,26326,26328],{"class":70,"line":98},[68,26327,26274],{"class":85},[68,26329,26164],{"class":85},[68,26331,26332,26335],{"class":70,"line":104},[68,26333,26334],{"class":85},"  --robot.id=my_awesome_follower_arm",[68,26336,26164],{"class":85},[68,26338,26339,26341],{"class":70,"line":112},[68,26340,26169],{"class":85},[68,26342,26164],{"class":85},[68,26344,26345,26347],{"class":70,"line":124},[68,26346,26241],{"class":85},[68,26348,26164],{"class":85},[68,26350,26351],{"class":70,"line":1496},[68,26352,26248],{"class":85},[14,26354,26356],{"id":26355},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[58,26358,26360],{"className":25307,"code":26359,"language":25309,"meta":63,"style":63},"lerobot-find-cameras opencv\n",[65,26361,26362],{"__ignoreMap":63},[68,26363,26364,26367],{"class":70,"line":71},[68,26365,26366],{"class":74},"lerobot-find-cameras",[68,26368,26369],{"class":1742}," opencv\n",[58,26371,26373],{"className":25307,"code":26372,"language":25309,"meta":63,"style":63},"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",[65,26374,26375,26381,26387,26393,26399,26409,26415,26421,26428],{"__ignoreMap":63},[68,26376,26377,26379],{"class":70,"line":71},[68,26378,26315],{"class":74},[68,26380,26164],{"class":85},[68,26382,26383,26385],{"class":70,"line":82},[68,26384,26196],{"class":85},[68,26386,26164],{"class":85},[68,26388,26389,26391],{"class":70,"line":98},[68,26390,26274],{"class":85},[68,26392,26164],{"class":85},[68,26394,26395,26397],{"class":70,"line":104},[68,26396,26334],{"class":85},[68,26398,26164],{"class":85},[68,26400,26401,26404,26407],{"class":70,"line":112},[68,26402,26403],{"class":85},"  --robot.cameras=",[68,26405,26406],{"class":1742},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[68,26408,26164],{"class":85},[68,26410,26411,26413],{"class":70,"line":124},[68,26412,26169],{"class":85},[68,26414,26164],{"class":85},[68,26416,26417,26419],{"class":70,"line":1496},[68,26418,26241],{"class":85},[68,26420,26164],{"class":85},[68,26422,26423,26426],{"class":70,"line":1502},[68,26424,26425],{"class":85},"  --teleop.id=my_awesome_leader_arm",[68,26427,26164],{"class":85},[68,26429,26430],{"class":70,"line":1510},[68,26431,26432],{"class":85},"  --display_data=true\n",[170,26434,26435],{},"相机参数说明：",[24,26437,26438,26444,26450,26459,26469,26475],{},[27,26439,26440,26443],{},[65,26441,26442],{},"front","：相机名称。",[27,26445,26446,26449],{},[65,26447,26448],{},"type: opencv","：相机驱动类型。",[27,26451,26452,26455,26456,26048],{},[65,26453,26454],{},"index_or_path","：设备编号或设备路径（如 ",[65,26457,26458],{},"\u002Fdev\u002Fvideo4",[27,26460,26461,26464,26465,26468],{},[65,26462,26463],{},"width"," \u002F ",[65,26466,26467],{},"height","：图像分辨率。",[27,26470,26471,26474],{},[65,26472,26473],{},"fps","：采样帧率。",[27,26476,26477,26480],{},[65,26478,26479],{},"--display_data=true","：启用实时可视化。",[1553,26482,26483],{},"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":63,"searchDepth":82,"depth":82,"links":26485},[26486,26487],{"id":26304,"depth":82,"text":26305},{"id":26355,"depth":82,"text":26356},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26296,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26494,"title":26495,"body":26496,"description":1564,"extension":1565,"meta":26668,"navigation":1567,"path":26669,"seo":26670,"stem":26671,"__hash__":26672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26497,"toc":26663},[26498,26502,26506,26511,26516,26519,26561,26567,26571,26620,26625,26629,26632,26640,26645,26650,26655,26660],[10,26499,26501],{"id":26500},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26503,26505],{"id":26504},"_51-生成访问令牌","5.1 生成访问令牌",[170,26507,26508],{},[801,26509],{"alt":63,"src":26510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[170,26512,26513],{},[801,26514],{"alt":63,"src":26515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[170,26517,26518],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[58,26520,26522],{"className":25307,"code":26521,"language":25309,"meta":63,"style":63},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[65,26523,26524,26537],{"__ignoreMap":63},[68,26525,26526,26529,26532,26534],{"class":70,"line":71},[68,26527,26528],{"class":316},"export",[68,26530,26531],{"class":78}," HF_TOKEN",[68,26533,1685],{"class":316},[68,26535,26536],{"class":1742},"\"your_huggingface_token\"\n",[68,26538,26539,26542,26545,26548,26551,26553,26556,26558],{"class":70,"line":82},[68,26540,26541],{"class":74},"hf",[68,26543,26544],{"class":1742}," auth",[68,26546,26547],{"class":1742}," login",[68,26549,26550],{"class":85}," --token",[68,26552,11212],{"class":1742},[68,26554,26555],{"class":78},"$HF_TOKEN",[68,26557,1880],{"class":1742},[68,26559,26560],{"class":85}," --add-to-git-credential\n",[170,26562,26563,26566],{},[65,26564,26565],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26568,26570],{"id":26569},"_52-验证登录","5.2 验证登录",[58,26572,26574],{"className":25307,"code":26573,"language":25309,"meta":63,"style":63},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[65,26575,26576,26607],{"__ignoreMap":63},[68,26577,26578,26581,26583,26586,26588,26590,26593,26596,26599,26602,26605],{"class":70,"line":71},[68,26579,26580],{"class":78},"HF_USER",[68,26582,1685],{"class":316},[68,26584,26585],{"class":78},"$(",[68,26587,26541],{"class":74},[68,26589,26544],{"class":1742},[68,26591,26592],{"class":1742}," whoami",[68,26594,26595],{"class":316}," |",[68,26597,26598],{"class":74}," head",[68,26600,26601],{"class":85}," -n",[68,26603,26604],{"class":85}," 1",[68,26606,1646],{"class":78},[68,26608,26609,26612,26614,26617],{"class":70,"line":82},[68,26610,26611],{"class":85},"echo",[68,26613,11212],{"class":1742},[68,26615,26616],{"class":78},"$HF_USER",[68,26618,26619],{"class":1742},"\"\n",[170,26621,26622],{},[801,26623],{"alt":63,"src":26624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26626,26628],{"id":26627},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[170,26630,26631],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[24,26633,26634,26637],{},[27,26635,26636],{},"Dataset Repo（用于上传演示数据）",[27,26638,26639],{},"Model Repo（用于上传训练后的 ACT 权重）",[170,26641,26642],{},[801,26643],{"alt":63,"src":26644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[170,26646,26647],{},[801,26648],{"alt":63,"src":26649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[170,26651,26652],{},[801,26653],{"alt":63,"src":26654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[170,26656,26657],{},[801,26658],{"alt":63,"src":26659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1553,26661,26662],{},"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":63,"searchDepth":82,"depth":82,"links":26664},[26665,26666,26667],{"id":26504,"depth":82,"text":26505},{"id":26569,"depth":82,"text":26570},{"id":26627,"depth":82,"text":26628},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26495,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26674,"title":26675,"body":26676,"description":1564,"extension":1565,"meta":26873,"navigation":1567,"path":26874,"seo":26875,"stem":26876,"__hash__":26877},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26677,"toc":26868},[26678,26682,26686,26782,26790,26795,26799,26815,26818,26822,26865],[10,26679,26681],{"id":26680},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26683,26685],{"id":26684},"_61-录制示教数据","6.1 录制示教数据",[58,26687,26689],{"className":25307,"code":26688,"language":25309,"meta":63,"style":63},"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",[65,26690,26691,26698,26704,26710,26716,26725,26731,26737,26743,26750,26760,26767,26777],{"__ignoreMap":63},[68,26692,26693,26696],{"class":70,"line":71},[68,26694,26695],{"class":74},"lerobot-record",[68,26697,26164],{"class":85},[68,26699,26700,26702],{"class":70,"line":82},[68,26701,26196],{"class":85},[68,26703,26164],{"class":85},[68,26705,26706,26708],{"class":70,"line":98},[68,26707,26274],{"class":85},[68,26709,26164],{"class":85},[68,26711,26712,26714],{"class":70,"line":104},[68,26713,26334],{"class":85},[68,26715,26164],{"class":85},[68,26717,26718,26720,26723],{"class":70,"line":112},[68,26719,26403],{"class":85},[68,26721,26722],{"class":1742},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[68,26724,26164],{"class":85},[68,26726,26727,26729],{"class":70,"line":124},[68,26728,26169],{"class":85},[68,26730,26164],{"class":85},[68,26732,26733,26735],{"class":70,"line":1496},[68,26734,26241],{"class":85},[68,26736,26164],{"class":85},[68,26738,26739,26741],{"class":70,"line":1502},[68,26740,26425],{"class":85},[68,26742,26164],{"class":85},[68,26744,26745,26748],{"class":70,"line":1510},[68,26746,26747],{"class":85},"  --display_data=true",[68,26749,26164],{"class":85},[68,26751,26752,26755,26758],{"class":70,"line":1521},[68,26753,26754],{"class":85},"  --dataset.repo_id=",[68,26756,26757],{"class":1742},"\"Embodied-AI-6\u002Fso101_test\"",[68,26759,26164],{"class":85},[68,26761,26762,26765],{"class":70,"line":3103},[68,26763,26764],{"class":85},"  --dataset.num_episodes=10",[68,26766,26164],{"class":85},[68,26768,26769,26772,26775],{"class":70,"line":3108},[68,26770,26771],{"class":85},"  --dataset.single_task=",[68,26773,26774],{"class":1742},"\"Grab the green cube\"",[68,26776,26164],{"class":85},[68,26778,26779],{"class":70,"line":3114},[68,26780,26781],{"class":85},"  --resume=true\n",[24,26783,26784],{},[27,26785,26786,26789],{},[65,26787,26788],{},"--resume=true","：已有同一数据集时继续追加 episode。",[170,26791,26792],{},[801,26793],{"alt":63,"src":26794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26796,26798],{"id":26797},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[58,26800,26802],{"className":25307,"code":26801,"language":25309,"meta":63,"style":63},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[65,26803,26804],{"__ignoreMap":63},[68,26805,26806,26809,26812],{"class":70,"line":71},[68,26807,26808],{"class":74},"rm",[68,26810,26811],{"class":85}," -rf",[68,26813,26814],{"class":1742}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[170,26816,26817],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26819,26821],{"id":26820},"_63-回放指定-episode","6.3 回放指定 episode",[58,26823,26825],{"className":25307,"code":26824,"language":25309,"meta":63,"style":63},"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",[65,26826,26827,26834,26840,26846,26852,26860],{"__ignoreMap":63},[68,26828,26829,26832],{"class":70,"line":71},[68,26830,26831],{"class":74},"lerobot-replay",[68,26833,26164],{"class":85},[68,26835,26836,26838],{"class":70,"line":82},[68,26837,26196],{"class":85},[68,26839,26164],{"class":85},[68,26841,26842,26844],{"class":70,"line":98},[68,26843,26274],{"class":85},[68,26845,26164],{"class":85},[68,26847,26848,26850],{"class":70,"line":104},[68,26849,26334],{"class":85},[68,26851,26164],{"class":85},[68,26853,26854,26856,26858],{"class":70,"line":112},[68,26855,26754],{"class":85},[68,26857,26757],{"class":1742},[68,26859,26164],{"class":85},[68,26861,26862],{"class":70,"line":124},[68,26863,26864],{"class":85},"  --dataset.episode=0\n",[1553,26866,26867],{},"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":63,"searchDepth":82,"depth":82,"links":26869},[26870,26871,26872],{"id":26684,"depth":82,"text":26685},{"id":26797,"depth":82,"text":26798},{"id":26820,"depth":82,"text":26821},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26675,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26879,"title":26880,"body":26881,"description":1564,"extension":1565,"meta":27009,"navigation":1567,"path":27010,"seo":27011,"stem":27012,"__hash__":27013},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26882,"toc":27007},[26883,26887,26950,26953,27000,27005],[10,26884,26886],{"id":26885},"_7-act-模型训练","7. ACT 模型训练",[58,26888,26890],{"className":25307,"code":26889,"language":25309,"meta":63,"style":63},"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",[65,26891,26892,26899,26907,26914,26921,26928,26935,26942],{"__ignoreMap":63},[68,26893,26894,26897],{"class":70,"line":71},[68,26895,26896],{"class":74},"lerobot-train",[68,26898,26164],{"class":85},[68,26900,26901,26903,26905],{"class":70,"line":82},[68,26902,26754],{"class":85},[68,26904,26757],{"class":1742},[68,26906,26164],{"class":85},[68,26908,26909,26912],{"class":70,"line":98},[68,26910,26911],{"class":85},"  --policy.type=act",[68,26913,26164],{"class":85},[68,26915,26916,26919],{"class":70,"line":104},[68,26917,26918],{"class":85},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[68,26920,26164],{"class":85},[68,26922,26923,26926],{"class":70,"line":112},[68,26924,26925],{"class":85},"  --job_name=act_so101_test",[68,26927,26164],{"class":85},[68,26929,26930,26933],{"class":70,"line":124},[68,26931,26932],{"class":85},"  --policy.device=cuda",[68,26934,26164],{"class":85},[68,26936,26937,26940],{"class":70,"line":1496},[68,26938,26939],{"class":85},"  --wandb.enable=false",[68,26941,26164],{"class":85},[68,26943,26944,26947],{"class":70,"line":1502},[68,26945,26946],{"class":85},"  --policy.repo_id=",[68,26948,26949],{"class":1742},"\"Embodied-AI-6\u002Flerobot_new\"\n",[170,26951,26952],{},"参数说明：",[24,26954,26955,26961,26967,26973,26979,26988,26994],{},[27,26956,26957,26960],{},[65,26958,26959],{},"--dataset.repo_id","：训练数据集仓库。",[27,26962,26963,26966],{},[65,26964,26965],{},"--policy.type=act","：策略模型类型为 ACT。",[27,26968,26969,26972],{},[65,26970,26971],{},"--output_dir","：本地训练输出目录。",[27,26974,26975,26978],{},[65,26976,26977],{},"--job_name","：训练任务名称。",[27,26980,26981,26984,26985,26048],{},[65,26982,26983],{},"--policy.device","：训练设备（如 ",[65,26986,26987],{},"cuda",[27,26989,26990,26993],{},[65,26991,26992],{},"--wandb.enable","：是否启用 WandB 可视化。",[27,26995,26996,26999],{},[65,26997,26998],{},"--policy.repo_id","：训练后模型推送目标仓库。",[170,27001,27002],{},[801,27003],{"alt":63,"src":27004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1553,27006,26867],{},{"title":63,"searchDepth":82,"depth":82,"links":27008},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26880,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27015,"title":27016,"body":27017,"description":1564,"extension":1565,"meta":27104,"navigation":1567,"path":27105,"seo":27106,"stem":27107,"__hash__":27108},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27018,"toc":27102},[27019,27022,27025,27092,27100],[10,27020,27016],{"id":27021},"_8-策略部署与自动采集",[170,27023,27024],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[58,27026,27028],{"className":25307,"code":27027,"language":25309,"meta":63,"style":63},"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",[65,27029,27030,27036,27042,27048,27056,27062,27069,27077,27085],{"__ignoreMap":63},[68,27031,27032,27034],{"class":70,"line":71},[68,27033,26695],{"class":74},[68,27035,26164],{"class":85},[68,27037,27038,27040],{"class":70,"line":82},[68,27039,26196],{"class":85},[68,27041,26164],{"class":85},[68,27043,27044,27046],{"class":70,"line":98},[68,27045,26274],{"class":85},[68,27047,26164],{"class":85},[68,27049,27050,27052,27054],{"class":70,"line":104},[68,27051,26403],{"class":85},[68,27053,26722],{"class":1742},[68,27055,26164],{"class":85},[68,27057,27058,27060],{"class":70,"line":112},[68,27059,26334],{"class":85},[68,27061,26164],{"class":85},[68,27063,27064,27067],{"class":70,"line":124},[68,27065,27066],{"class":85},"  --display_data=false",[68,27068,26164],{"class":85},[68,27070,27071,27073,27075],{"class":70,"line":1496},[68,27072,26754],{"class":85},[68,27074,26757],{"class":1742},[68,27076,26164],{"class":85},[68,27078,27079,27081,27083],{"class":70,"line":1502},[68,27080,26771],{"class":85},[68,27082,26774],{"class":1742},[68,27084,26164],{"class":85},[68,27086,27087,27090],{"class":70,"line":1510},[68,27088,27089],{"class":85},"  --policy.path=",[68,27091,26949],{"class":1742},[24,27093,27094],{},[27,27095,27096,27099],{},[65,27097,27098],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1553,27101,26867],{},{"title":63,"searchDepth":82,"depth":82,"links":27103},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27016,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27110,"title":27111,"body":27112,"description":1564,"extension":1565,"meta":27141,"navigation":1567,"path":27142,"seo":27143,"stem":27144,"__hash__":27145},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27113,"toc":27139},[27114,27118,27121,27127,27130,27136],[10,27115,27117],{"id":27116},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[170,27119,27120],{},"项目地址：",[170,27122,27123],{},[1867,27124,27125],{"href":27125,"rel":27126},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25350],[170,27128,27129],{},"参考教程：",[170,27131,27132],{},[1867,27133,27134],{"href":27134,"rel":27135},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25350],[170,27137,27138],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":63,"searchDepth":82,"depth":82,"links":27140},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27111,"description":1564},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27147,"title":27148,"body":27149,"description":27153,"extension":1565,"meta":27154,"navigation":1567,"path":27155,"seo":27156,"stem":27157,"__hash__":27158},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27150,"toc":27151},[],{"title":63,"searchDepth":82,"depth":82,"links":27152},[],"act复现",{"category":24864},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27148,"description":27153},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27160,"title":27161,"body":27162,"description":63,"extension":1565,"meta":27464,"navigation":1567,"path":27465,"seo":27466,"stem":27467,"__hash__":27468},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27163,"toc":27456},[27164,27167,27171,27181,27188,27195,27198,27205,27208,27211,27215,27227,27231,27277,27280,27283,27286,27289,27292,27296,27334,27340,27344,27398,27403,27406,27409,27414,27417,27422,27425,27428,27432,27435,27438,27442],[10,27165,27161],{"id":27166},"_1简介",[19,27168,27170],{"id":27169},"_11什么是-docker","1.1什么是 Docker？",[170,27172,27173,27174,27177,27178],{},"Docker 是一个开源的 ",[268,27175,27176],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[268,27179,27180],{},"一次构建，到处运行。",[170,27182,27183,27184,27187],{},"“ ",[268,27185,27186],{},"一次构建，到处运行"," ”也就是说：",[263,27189,27190],{},[27,27191,27192],{},[268,27193,27194],{},"之前：",[170,27196,27197],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[263,27199,27200],{},[27,27201,27202],{},[268,27203,27204],{},"使用docker后：",[170,27206,27207],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[170,27209,27210],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,27212,27214],{"id":27213},"_12它是怎么工作的","1.2.它是怎么工作的？",[24,27216,27217,27220],{},[27,27218,27219],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[27,27221,27222,27223,27226],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[268,27224,27225],{},"无论在哪运行都一样稳定"," 。",[19,27228,27230],{"id":27229},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[128,27232,27233,27243],{},[131,27234,27235],{},[134,27236,27237,27240],{},[137,27238,27239],{"align":92},"概念",[137,27241,27242],{"align":92},"解释",[144,27244,27245,27253,27261,27269],{},[134,27246,27247,27250],{},[149,27248,27249],{"align":92},"镜像",[149,27251,27252],{"align":92},"Image，运行容器的模板，像是一个应用快照",[134,27254,27255,27258],{},[149,27256,27257],{"align":92},"容器",[149,27259,27260],{"align":92},"Container，运行中的镜像实例，有自己的文件系统、网络等",[134,27262,27263,27266],{},[149,27264,27265],{"align":92},"Dockerfile",[149,27267,27268],{"align":92},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[134,27270,27271,27274],{},[149,27272,27273],{"align":92},"仓库",[149,27275,27276],{"align":92},"Registry，存放镜像的地方，比如 Docker Hub",[170,27278,27279],{},"抽象化理解:",[170,27281,27282],{},"Docker镜像≈C++类",[170,27284,27285],{},"Docker容器≈C++类实例(即对象)",[170,27287,27288],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[170,27290,27291],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,27293,27295],{"id":27294},"_14类比理解","1.4.类比理解",[128,27297,27298,27308],{},[131,27299,27300],{},[134,27301,27302,27305],{},[137,27303,27304],{"align":92},"传统部署",[137,27306,27307],{"align":92},"Docker部署",[144,27309,27310,27318,27326],{},[134,27311,27312,27315],{},[149,27313,27314],{"align":92},"手动安装依赖、调试版本不一致问题",[149,27316,27317],{"align":92},"一次打包环境和代码",[134,27319,27320,27323],{},[149,27321,27322],{"align":92},"程序“裸奔”跑在系统上",[149,27324,27325],{"align":92},"程序“穿着容器”隔离运行",[134,27327,27328,27331],{},[149,27329,27330],{"align":92},"容易“在我电脑上能跑”",[149,27332,27333],{"align":92},"保证“无论在哪都能跑”",[170,27335,27336,27337],{},"就像快递包裹： ",[268,27338,27339],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,27341,27343],{"id":27342},"_15docker-的核心优势","1.5.Docker 的核心优势",[128,27345,27346,27356],{},[131,27347,27348],{},[134,27349,27350,27353],{},[137,27351,27352],{"align":92},"优势",[137,27354,27355],{"align":92},"说明",[144,27357,27358,27366,27374,27382,27390],{},[134,27359,27360,27363],{},[149,27361,27362],{"align":92},"轻量级",[149,27364,27365],{"align":92},"基于系统内核共享，启动速度快，占资源少",[134,27367,27368,27371],{},[149,27369,27370],{"align":92},"跨平台",[149,27372,27373],{"align":92},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[134,27375,27376,27379],{},[149,27377,27378],{"align":92},"易于迁移部署",[149,27380,27381],{"align":92},"应用和环境一起封装，不怕依赖不一致",[134,27383,27384,27387],{},[149,27385,27386],{"align":92},"易于版本控制",[149,27388,27389],{"align":92},"镜像版本可控，支持回滚",[134,27391,27392,27395],{},[149,27393,27394],{"align":92},"生态丰富",[149,27396,27397],{"align":92},"Docker Hub 上有成千上万的现成镜像可用",[263,27399,27400],{},[27,27401,27402],{},"在Linux上可以几乎实现无性能损失。",[170,27404,27405],{},"docker里的发行版和本机共用Linux内核。",[170,27407,27408],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[263,27410,27411],{},[27,27412,27413],{},"可以快速部署在绝大多数Linux发行版",[170,27415,27416],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[263,27418,27419],{},[27,27420,27421],{},"配置环境简单",[170,27423,27424],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[170,27426,27427],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[263,27429,27430],{},[27,27431,27394],{},[170,27433,27434],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[170,27436,27437],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,27439,27441],{"id":27440},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[24,27443,27444,27447,27450,27453],{},[27,27445,27446],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[27,27448,27449],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[27,27451,27452],{},"微服务架构：每个服务一个容器，灵活组合",[27,27454,27455],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":63,"searchDepth":82,"depth":82,"links":27457},[27458,27459,27460,27461,27462,27463],{"id":27169,"depth":98,"text":27170},{"id":27213,"depth":98,"text":27214},{"id":27229,"depth":98,"text":27230},{"id":27294,"depth":98,"text":27295},{"id":27342,"depth":98,"text":27343},{"id":27440,"depth":98,"text":27441},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27161,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27470,"title":27471,"body":27472,"description":63,"extension":1565,"meta":28205,"navigation":1567,"path":28206,"seo":28207,"stem":28208,"__hash__":28209},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27473,"toc":28200},[27474,27477,27481,27484,27487,27493,27499,27503,27512,27515,27572,27575,27626,27629,27712,27715,27752,27756,27767,27780,27787,27790,27870,27873,27923,27926,27949,27953,27960,27963,27979,27985,27988,28004,28010,28013,28029,28043,28049,28069,28075,28078,28090,28096,28099,28113,28119,28122,28142,28147,28150,28153,28157,28160,28163,28166,28173,28176,28179,28182,28187,28192,28197],[10,27475,27471],{"id":27476},"_2安装docker",[19,27478,27480],{"id":27479},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[170,27482,27483],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[170,27485,27486],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[170,27488,27489],{},[1867,27490,27491],{"href":27491,"rel":27492},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25350],[170,27494,27495],{},[1867,27496,27497],{"href":27497,"rel":27498},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25350],[245,27500,27502],{"id":27501},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[170,27504,27505,27506,27511],{},"以下内容根据 ",[1867,27507,27510],{"href":27508,"rel":27509},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25350],"官方文档"," 修改而来。",[170,27513,27514],{},"如果你过去安装过 docker，先删掉：",[58,27516,27518],{"className":25307,"code":27517,"language":25309,"meta":63,"style":63},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[65,27519,27520],{"__ignoreMap":63},[68,27521,27522,27524,27527,27530,27533,27536,27539,27542,27545,27548,27551,27554,27557,27560,27563,27566,27569],{"class":70,"line":71},[68,27523,4515],{"class":316},[68,27525,27526],{"class":78}," pkg ",[68,27528,27529],{"class":316},"in",[68,27531,27532],{"class":1742}," docker.io",[68,27534,27535],{"class":1742}," docker-doc",[68,27537,27538],{"class":1742}," docker-compose",[68,27540,27541],{"class":1742}," docker-compose-v2",[68,27543,27544],{"class":1742}," podman-docker",[68,27546,27547],{"class":1742}," containerd",[68,27549,27550],{"class":1742}," runc",[68,27552,27553],{"class":78},"; ",[68,27555,27556],{"class":316},"do",[68,27558,27559],{"class":74}," sudo",[68,27561,27562],{"class":1742}," apt-get",[68,27564,27565],{"class":1742}," remove",[68,27567,27568],{"class":78}," $pkg; ",[68,27570,27571],{"class":316},"done\n",[170,27573,27574],{},"首先安装依赖和GPG：",[58,27576,27580],{"className":27577,"code":27578,"language":27579,"meta":63,"style":63},"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",[65,27581,27582,27587,27592,27597,27602,27607,27612,27616,27621],{"__ignoreMap":63},[68,27583,27584],{"class":70,"line":71},[68,27585,27586],{},"# Add Docker's official GPG key:\n",[68,27588,27589],{"class":70,"line":82},[68,27590,27591],{},"sudo apt-get update\n",[68,27593,27594],{"class":70,"line":98},[68,27595,27596],{},"sudo apt-get install ca-certificates curl\n",[68,27598,27599],{"class":70,"line":104},[68,27600,27601],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[68,27603,27604],{"class":70,"line":112},[68,27605,27606],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[68,27608,27609],{"class":70,"line":124},[68,27610,27611],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[68,27613,27614],{"class":70,"line":1496},[68,27615,3890],{"emptyLinePlaceholder":1567},[68,27617,27618],{"class":70,"line":1502},[68,27619,27620],{},"# 如果上面这行报错就弄下面这行\n",[68,27622,27623],{"class":70,"line":1510},[68,27624,27625],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[170,27627,27628],{},"信任 Docker 的 GPG 公钥并添加仓库：",[58,27630,27632],{"className":25307,"code":27631,"language":25309,"meta":63,"style":63},"# 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",[65,27633,27634,27639,27645,27662,27695],{"__ignoreMap":63},[68,27635,27636],{"class":70,"line":71},[68,27637,27638],{"class":302},"# Add the repository to Apt sources:\n",[68,27640,27641,27643],{"class":70,"line":82},[68,27642,26611],{"class":85},[68,27644,26164],{"class":85},[68,27646,27647,27650,27653,27656,27659],{"class":70,"line":98},[68,27648,27649],{"class":1742},"  \"deb [arch=$(",[68,27651,27652],{"class":74},"dpkg",[68,27654,27655],{"class":85}," --print-architecture",[68,27657,27658],{"class":1742},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[68,27660,27661],{"class":85},"\\\n",[68,27663,27664,27667,27669,27671,27674,27677,27679,27681,27684,27686,27688,27691,27693],{"class":70,"line":104},[68,27665,27666],{"class":1742},"  \"",[68,27668,26585],{"class":78},[68,27670,2186],{"class":85},[68,27672,27673],{"class":1742}," \u002Fetc\u002Fos-release",[68,27675,27676],{"class":78}," && ",[68,27678,26611],{"class":85},[68,27680,11212],{"class":1742},[68,27682,27683],{"class":78},"$VERSION_CODENAME",[68,27685,1880],{"class":1742},[68,27687,2058],{"class":78},[68,27689,27690],{"class":1742},"\" stable\"",[68,27692,26595],{"class":316},[68,27694,26164],{"class":85},[68,27696,27697,27700,27703,27706,27709],{"class":70,"line":112},[68,27698,27699],{"class":74},"  sudo",[68,27701,27702],{"class":1742}," tee",[68,27704,27705],{"class":1742}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[68,27707,27708],{"class":316}," >",[68,27710,27711],{"class":1742}," \u002Fdev\u002Fnull\n",[170,27713,27714],{},"最后安装",[58,27716,27718],{"className":25307,"code":27717,"language":25309,"meta":63,"style":63},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,27719,27720,27729],{"__ignoreMap":63},[68,27721,27722,27724,27726],{"class":70,"line":71},[68,27723,26062],{"class":74},[68,27725,27562],{"class":1742},[68,27727,27728],{"class":1742}," update\n",[68,27730,27731,27733,27735,27737,27740,27743,27746,27749],{"class":70,"line":82},[68,27732,26062],{"class":74},[68,27734,27562],{"class":1742},[68,27736,25319],{"class":1742},[68,27738,27739],{"class":1742}," docker-ce",[68,27741,27742],{"class":1742}," docker-ce-cli",[68,27744,27745],{"class":1742}," containerd.io",[68,27747,27748],{"class":1742}," docker-buildx-plugin",[68,27750,27751],{"class":1742}," docker-compose-plugin\n",[245,27753,27755],{"id":27754},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[170,27757,27758,27759,27762,27763,27766],{},"查看自己自己包管理工具版本（dnf是 ",[268,27760,27761],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[268,27764,27765],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[58,27768,27770],{"className":25307,"code":27769,"language":25309,"meta":63,"style":63},"dnf --version\n",[65,27771,27772],{"__ignoreMap":63},[68,27773,27774,27777],{"class":70,"line":71},[68,27775,27776],{"class":74},"dnf",[68,27778,27779],{"class":85}," --version\n",[170,27781,27505,27782,27786],{},[1867,27783,27510],{"href":27784,"rel":27785},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25350]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[170,27788,27789],{},"如果你之前安装过 docker，请先删掉",[58,27791,27793],{"className":25307,"code":27792,"language":25309,"meta":63,"style":63},"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",[65,27794,27795,27809,27816,27823,27830,27837,27844,27851,27858,27865],{"__ignoreMap":63},[68,27796,27797,27799,27802,27804,27807],{"class":70,"line":71},[68,27798,26062],{"class":74},[68,27800,27801],{"class":1742}," dnf",[68,27803,27565],{"class":1742},[68,27805,27806],{"class":1742}," docker",[68,27808,26164],{"class":85},[68,27810,27811,27814],{"class":70,"line":82},[68,27812,27813],{"class":1742},"                  docker-client",[68,27815,26164],{"class":85},[68,27817,27818,27821],{"class":70,"line":98},[68,27819,27820],{"class":1742},"                  docker-client-latest",[68,27822,26164],{"class":85},[68,27824,27825,27828],{"class":70,"line":104},[68,27826,27827],{"class":1742},"                  docker-common",[68,27829,26164],{"class":85},[68,27831,27832,27835],{"class":70,"line":112},[68,27833,27834],{"class":1742},"                  docker-latest",[68,27836,26164],{"class":85},[68,27838,27839,27842],{"class":70,"line":124},[68,27840,27841],{"class":1742},"                  docker-latest-logrotate",[68,27843,26164],{"class":85},[68,27845,27846,27849],{"class":70,"line":1496},[68,27847,27848],{"class":1742},"                  docker-logrotate",[68,27850,26164],{"class":85},[68,27852,27853,27856],{"class":70,"line":1502},[68,27854,27855],{"class":1742},"                  docker-selinux",[68,27857,26164],{"class":85},[68,27859,27860,27863],{"class":70,"line":1510},[68,27861,27862],{"class":1742},"                  docker-engine-selinux",[68,27864,26164],{"class":85},[68,27866,27867],{"class":70,"line":1521},[68,27868,27869],{"class":1742},"                  docker-engine\n",[170,27871,27872],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[58,27874,27876],{"className":25307,"code":27875,"language":25309,"meta":63,"style":63},"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",[65,27877,27878,27892,27907],{"__ignoreMap":63},[68,27879,27880,27882,27884,27887,27889],{"class":70,"line":71},[68,27881,26062],{"class":74},[68,27883,27801],{"class":1742},[68,27885,27886],{"class":85}," -y",[68,27888,25319],{"class":1742},[68,27890,27891],{"class":1742}," dnf-plugins-core\n",[68,27893,27894,27896,27898,27901,27904],{"class":70,"line":82},[68,27895,26062],{"class":74},[68,27897,27801],{"class":1742},[68,27899,27900],{"class":1742}," config-manager",[68,27902,27903],{"class":1742}," addrepo",[68,27905,27906],{"class":85}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[68,27908,27909,27911,27914,27917,27920],{"class":70,"line":98},[68,27910,26062],{"class":74},[68,27912,27913],{"class":1742}," sed",[68,27915,27916],{"class":85}," -i",[68,27918,27919],{"class":1742}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[68,27921,27922],{"class":1742}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[170,27924,27925],{},"最后安装：",[58,27927,27929],{"className":25307,"code":27928,"language":25309,"meta":63,"style":63},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,27930,27931],{"__ignoreMap":63},[68,27932,27933,27935,27937,27939,27941,27943,27945,27947],{"class":70,"line":71},[68,27934,26062],{"class":74},[68,27936,27801],{"class":1742},[68,27938,25319],{"class":1742},[68,27940,27739],{"class":1742},[68,27942,27742],{"class":1742},[68,27944,27745],{"class":1742},[68,27946,27748],{"class":1742},[68,27948,27751],{"class":1742},[19,27950,27952],{"id":27951},"_22配置环境","2.2.配置环境",[245,27954,27956,27959],{"id":27955},"_221检查-docker-服务状态",[268,27957,27958],{},"2.2.1.检查 Docker 服务状态"," ：",[170,27961,27962],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[58,27964,27966],{"className":25307,"code":27965,"language":25309,"meta":63,"style":63},"systemctl status docker\n",[65,27967,27968],{"__ignoreMap":63},[68,27969,27970,27973,27976],{"class":70,"line":71},[68,27971,27972],{"class":74},"systemctl",[68,27974,27975],{"class":1742}," status",[68,27977,27978],{"class":1742}," docker\n",[245,27980,27982,27959],{"id":27981},"_222启动-docker-服务",[268,27983,27984],{},"2.2.2.启动 Docker 服务",[170,27986,27987],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[58,27989,27991],{"className":25307,"code":27990,"language":25309,"meta":63,"style":63},"sudo systemctl start docker\n",[65,27992,27993],{"__ignoreMap":63},[68,27994,27995,27997,28000,28002],{"class":70,"line":71},[68,27996,26062],{"class":74},[68,27998,27999],{"class":1742}," systemctl",[68,28001,5674],{"class":1742},[68,28003,27978],{"class":1742},[245,28005,28007,27959],{"id":28006},"_223设置-docker-开机自启",[268,28008,28009],{},"2.2.3.设置 Docker 开机自启",[170,28011,28012],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[58,28014,28016],{"className":25307,"code":28015,"language":25309,"meta":63,"style":63},"sudo systemctl enable docker\n",[65,28017,28018],{"__ignoreMap":63},[68,28019,28020,28022,28024,28027],{"class":70,"line":71},[68,28021,26062],{"class":74},[68,28023,27999],{"class":1742},[68,28025,28026],{"class":1742}," enable",[68,28028,27978],{"class":1742},[245,28030,28032,15283,28035,15283,28040,27959],{"id":28031},"_224将用户添加到-docker-组",[268,28033,28034],{},"2.2.4.将用户添加到",[268,28036,28037],{},[65,28038,28039],{},"docker",[268,28041,28042],{},"组",[170,28044,28045,28046,28048],{},"使用以下命令将当前用户添加到 ",[65,28047,28039],{}," 组：",[58,28050,28052],{"className":25307,"code":28051,"language":25309,"meta":63,"style":63},"sudo usermod -aG docker $USER\n",[65,28053,28054],{"__ignoreMap":63},[68,28055,28056,28058,28061,28064,28066],{"class":70,"line":71},[68,28057,26062],{"class":74},[68,28059,28060],{"class":1742}," usermod",[68,28062,28063],{"class":85}," -aG",[68,28065,27806],{"class":1742},[68,28067,28068],{"class":78}," $USER\n",[245,28070,28072,27959],{"id":28071},"_225退出并重新登录",[268,28073,28074],{},"2.2.5.退出并重新登录",[170,28076,28077],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[58,28079,28081],{"className":25307,"code":28080,"language":25309,"meta":63,"style":63},"newgrp docker\n",[65,28082,28083],{"__ignoreMap":63},[68,28084,28085,28088],{"class":70,"line":71},[68,28086,28087],{"class":74},"newgrp",[68,28089,27978],{"class":1742},[245,28091,28093,27959],{"id":28092},"_226重新启动-docker-服务如果需要",[268,28094,28095],{},"2.2.6.重新启动 Docker 服务（如果需要）",[170,28097,28098],{},"确保 Docker 服务正在运行，可以使用以下命令：",[58,28100,28101],{"className":25307,"code":27990,"language":25309,"meta":63,"style":63},[65,28102,28103],{"__ignoreMap":63},[68,28104,28105,28107,28109,28111],{"class":70,"line":71},[68,28106,26062],{"class":74},[68,28108,27999],{"class":1742},[68,28110,5674],{"class":1742},[68,28112,27978],{"class":1742},[245,28114,28116,27959],{"id":28115},"_227重启电脑后检查-docker-服务状态",[268,28117,28118],{},"2.2.7.重启电脑后检查 Docker 服务状态",[170,28120,28121],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[58,28123,28125],{"className":25307,"code":28124,"language":25309,"meta":63,"style":63},"sudo reboot\nsystemctl status docker\n",[65,28126,28127,28134],{"__ignoreMap":63},[68,28128,28129,28131],{"class":70,"line":71},[68,28130,26062],{"class":74},[68,28132,28133],{"class":1742}," reboot\n",[68,28135,28136,28138,28140],{"class":70,"line":82},[68,28137,27972],{"class":74},[68,28139,27975],{"class":1742},[68,28141,27978],{"class":1742},[170,28143,28144],{},[801,28145],{"alt":63,"src":28146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[170,28148,28149],{},"第三行显示enabled说明开机自启动成功",[170,28151,28152],{},"按q退出",[19,28154,28156],{"id":28155},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[170,28158,28159],{},"优先使用linux来使用docker是比较好的",[170,28161,28162],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[170,28164,28165],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[170,28167,28168,28169],{},"官方下载安装:",[1867,28170,28171],{"href":28171,"rel":28172},"https:\u002F\u002Fwww.docker.com\u002F",[25350],[170,28174,28175],{},"Windows的Docker显卡直通与USB直通:",[170,28177,28178],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[170,28180,28181],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[170,28183,28184],{},[801,28185],{"alt":63,"src":28186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[170,28188,28189],{},[801,28190],{"alt":63,"src":28191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[170,28193,28194],{},[801,28195],{"alt":63,"src":28196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1553,28198,28199],{},"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":63,"searchDepth":82,"depth":82,"links":28201},[28202,28203,28204],{"id":27479,"depth":98,"text":27480},{"id":27951,"depth":98,"text":27952},{"id":28155,"depth":98,"text":28156},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27471,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28211,"title":28212,"body":28213,"description":28220,"extension":1565,"meta":28913,"navigation":1567,"path":28914,"seo":28915,"stem":28916,"__hash__":28917},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28214,"toc":28907},[28215,28218,28221,28225,28230,28235,28238,28266,28271,28280,28283,28288,28292,28299,28304,28310,28314,28317,28321,28326,28418,28423,28441,28446,28467,28472,28488,28492,28497,28526,28531,28577,28582,28626,28634,28651,28656,28672,28677,28691,28694,28697,28700,28703,28732,28735,28740,28744,28747,28750,28756,28759,28762,28765,28827,28834,28839,28842,28860,28864,28867,28884,28887,28890,28904],[10,28216,28212],{"id":28217},"_3docker直通",[170,28219,28220],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,28222,28224],{"id":28223},"_31usb直通","3.1.USB直通",[170,28226,28227],{},[801,28228],{"alt":63,"src":28229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[263,28231,28232],{},[27,28233,28234],{},"方法一(不是很推荐新手)：",[170,28236,28237],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[58,28239,28241],{"className":25307,"code":28240,"language":25309,"meta":63,"style":63},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[65,28242,28243,28251,28256],{"__ignoreMap":63},[68,28244,28245,28248],{"class":70,"line":71},[68,28246,28247],{"class":74},"ls",[68,28249,28250],{"class":1742}," \u002Fdev\n",[68,28252,28253],{"class":70,"line":82},[68,28254,28255],{"class":302},"#例如\n",[68,28257,28258,28261,28263],{"class":70,"line":98},[68,28259,28260],{"class":78},"--device",[68,28262,1685],{"class":316},[68,28264,28265],{"class":1742},"\u002Fdev\u002Ftty_USB0\n",[263,28267,28268],{"start":82},[27,28269,28270],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[58,28272,28274],{"className":25307,"code":28273,"language":25309,"meta":63,"style":63},"--privileged\n",[65,28275,28276],{"__ignoreMap":63},[68,28277,28278],{"class":70,"line":71},[68,28279,28273],{"class":74},[170,28281,28282],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[170,28284,28285],{},[801,28286],{"alt":63,"src":28287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,28289,28291],{"id":28290},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[170,28293,28294,28295,28298],{},"NVIDIA Container Toolkit使用户 ",[268,28296,28297],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[170,28300,28301],{},[801,28302],{"alt":63,"src":28303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[170,28305,28306],{},[1867,28307,28308],{"href":28308,"rel":28309},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25350],[245,28311,28313],{"id":28312},"_321安装","3.2.1.安装",[170,28315,28316],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24396,28318,28320],{"id":28319},"_3211ubuntu","3.2.1.1.Ubuntu",[263,28322,28323],{},[27,28324,28325],{},"配置存储库 并更新",[58,28327,28329],{"className":25307,"code":28328,"language":25309,"meta":63,"style":63},"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",[65,28330,28331,28360,28380,28392,28404,28410],{"__ignoreMap":63},[68,28332,28333,28336,28339,28342,28344,28346,28349,28352,28355,28358],{"class":70,"line":71},[68,28334,28335],{"class":74},"curl",[68,28337,28338],{"class":85}," -fsSL",[68,28340,28341],{"class":1742}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[68,28343,26595],{"class":316},[68,28345,27559],{"class":74},[68,28347,28348],{"class":1742}," gpg",[68,28350,28351],{"class":85}," --dearmor",[68,28353,28354],{"class":85}," -o",[68,28356,28357],{"class":1742}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[68,28359,26164],{"class":85},[68,28361,28362,28365,28367,28370,28373,28376,28378],{"class":70,"line":82},[68,28363,28364],{"class":78},"  && ",[68,28366,28335],{"class":74},[68,28368,28369],{"class":85}," -s",[68,28371,28372],{"class":85}," -L",[68,28374,28375],{"class":1742}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[68,28377,26595],{"class":316},[68,28379,26164],{"class":85},[68,28381,28382,28385,28388,28390],{"class":70,"line":98},[68,28383,28384],{"class":74},"    sed",[68,28386,28387],{"class":1742}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[68,28389,26595],{"class":316},[68,28391,26164],{"class":85},[68,28393,28394,28397,28399,28402],{"class":70,"line":104},[68,28395,28396],{"class":74},"    sudo",[68,28398,27702],{"class":1742},[68,28400,28401],{"class":1742}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[68,28403,26164],{"class":85},[68,28405,28406,28408],{"class":70,"line":112},[68,28407,28364],{"class":78},[68,28409,27661],{"class":85},[68,28411,28412,28414,28416],{"class":70,"line":124},[68,28413,28396],{"class":74},[68,28415,27562],{"class":1742},[68,28417,27728],{"class":1742},[263,28419,28420],{"start":82},[27,28421,28422],{},"安装nvidia-docker2",[58,28424,28426],{"className":25307,"code":28425,"language":25309,"meta":63,"style":63},"sudo apt-get install -y nvidia-docker2\n",[65,28427,28428],{"__ignoreMap":63},[68,28429,28430,28432,28434,28436,28438],{"class":70,"line":71},[68,28431,26062],{"class":74},[68,28433,27562],{"class":1742},[68,28435,25319],{"class":1742},[68,28437,27886],{"class":85},[68,28439,28440],{"class":1742}," nvidia-docker2\n",[263,28442,28443],{"start":98},[27,28444,28445],{},"使用nvidia-ctk命令配置container runtime",[58,28447,28449],{"className":25307,"code":28448,"language":25309,"meta":63,"style":63},"sudo nvidia-ctk runtime configure --runtime=docker\n",[65,28450,28451],{"__ignoreMap":63},[68,28452,28453,28455,28458,28461,28464],{"class":70,"line":71},[68,28454,26062],{"class":74},[68,28456,28457],{"class":1742}," nvidia-ctk",[68,28459,28460],{"class":1742}," runtime",[68,28462,28463],{"class":1742}," configure",[68,28465,28466],{"class":85}," --runtime=docker\n",[263,28468,28469],{"start":104},[27,28470,28471],{},"重启docker服务:",[58,28473,28475],{"className":25307,"code":28474,"language":25309,"meta":63,"style":63},"sudo systemctl restart docker\n",[65,28476,28477],{"__ignoreMap":63},[68,28478,28479,28481,28483,28486],{"class":70,"line":71},[68,28480,26062],{"class":74},[68,28482,27999],{"class":1742},[68,28484,28485],{"class":1742}," restart",[68,28487,27978],{"class":1742},[24396,28489,28491],{"id":28490},"_3212fedora","3.2.1.2.Fedora",[263,28493,28494],{},[27,28495,28496],{},"配置存储库",[58,28498,28500],{"className":25307,"code":28499,"language":25309,"meta":63,"style":63},"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",[65,28501,28502,28517],{"__ignoreMap":63},[68,28503,28504,28506,28508,28510,28513,28515],{"class":70,"line":71},[68,28505,28335],{"class":74},[68,28507,28369],{"class":85},[68,28509,28372],{"class":85},[68,28511,28512],{"class":1742}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[68,28514,26595],{"class":316},[68,28516,26164],{"class":85},[68,28518,28519,28521,28523],{"class":70,"line":82},[68,28520,26062],{"class":74},[68,28522,27702],{"class":1742},[68,28524,28525],{"class":1742}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[263,28527,28528],{"start":82},[27,28529,28530],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[58,28532,28534],{"className":25307,"code":28533,"language":25309,"meta":63,"style":63},"# 如果是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",[65,28535,28536,28541,28555,28559,28564],{"__ignoreMap":63},[68,28537,28538],{"class":70,"line":71},[68,28539,28540],{"class":302},"# 如果是RHEL或者Rocky（DNF4）\n",[68,28542,28543,28545,28547,28549,28552],{"class":70,"line":82},[68,28544,26062],{"class":74},[68,28546,27801],{"class":1742},[68,28548,27900],{"class":1742},[68,28550,28551],{"class":85}," --add-repo",[68,28553,28554],{"class":1742}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[68,28556,28557],{"class":70,"line":98},[68,28558,3890],{"emptyLinePlaceholder":1567},[68,28560,28561],{"class":70,"line":104},[68,28562,28563],{"class":302},"# 如果是Feodra41+（DNF5）\n",[68,28565,28566,28568,28570,28572,28574],{"class":70,"line":112},[68,28567,26062],{"class":74},[68,28569,27801],{"class":1742},[68,28571,27900],{"class":1742},[68,28573,27903],{"class":1742},[68,28575,28576],{"class":85}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[263,28578,28579],{"start":98},[27,28580,28581],{},"安装NVIDIA Container Toolki包",[58,28583,28585],{"className":25307,"code":28584,"language":25309,"meta":63,"style":63},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[65,28586,28587,28592,28605,28609,28614],{"__ignoreMap":63},[68,28588,28589],{"class":70,"line":71},[68,28590,28591],{"class":302},"# 如果是RHEL或者Rocky\n",[68,28593,28594,28596,28598,28600,28602],{"class":70,"line":82},[68,28595,26062],{"class":74},[68,28597,27801],{"class":1742},[68,28599,25319],{"class":1742},[68,28601,27886],{"class":85},[68,28603,28604],{"class":1742}," nvidia-container-toolkit\n",[68,28606,28607],{"class":70,"line":98},[68,28608,3890],{"emptyLinePlaceholder":1567},[68,28610,28611],{"class":70,"line":104},[68,28612,28613],{"class":302},"# 如果是Fedora\n",[68,28615,28616,28618,28620,28622,28624],{"class":70,"line":112},[68,28617,26062],{"class":74},[68,28619,27801],{"class":1742},[68,28621,25319],{"class":1742},[68,28623,27886],{"class":85},[68,28625,28604],{"class":1742},[263,28627,28628],{"start":104},[27,28629,28630,28631,28633],{},"安装nvidia-docker2 ： 在Fedora上使用",[65,28632,27776],{},"进行安装",[58,28635,28637],{"className":25307,"code":28636,"language":25309,"meta":63,"style":63},"sudo dnf install -y nvidia-docker2\n",[65,28638,28639],{"__ignoreMap":63},[68,28640,28641,28643,28645,28647,28649],{"class":70,"line":71},[68,28642,26062],{"class":74},[68,28644,27801],{"class":1742},[68,28646,25319],{"class":1742},[68,28648,27886],{"class":85},[68,28650,28440],{"class":1742},[263,28652,28653],{"start":112},[27,28654,28655],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[58,28657,28658],{"className":25307,"code":28448,"language":25309,"meta":63,"style":63},[65,28659,28660],{"__ignoreMap":63},[68,28661,28662,28664,28666,28668,28670],{"class":70,"line":71},[68,28663,26062],{"class":74},[68,28665,28457],{"class":1742},[68,28667,28460],{"class":1742},[68,28669,28463],{"class":1742},[68,28671,28466],{"class":85},[263,28673,28674],{"start":124},[27,28675,28676],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[58,28678,28679],{"className":25307,"code":28474,"language":25309,"meta":63,"style":63},[65,28680,28681],{"__ignoreMap":63},[68,28682,28683,28685,28687,28689],{"class":70,"line":71},[68,28684,26062],{"class":74},[68,28686,27999],{"class":1742},[68,28688,28485],{"class":1742},[68,28690,27978],{"class":1742},[170,28692,28693],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[170,28695,28696],{},"方法：",[170,28698,28699],{},"1️⃣nvidia-smi",[170,28701,28702],{},"2️⃣运行nvidia cuda 容器进行测试",[58,28704,28706],{"className":25307,"code":28705,"language":25309,"meta":63,"style":63},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[65,28707,28708],{"__ignoreMap":63},[68,28709,28710,28712,28714,28717,28720,28723,28726,28729],{"class":70,"line":71},[68,28711,26062],{"class":74},[68,28713,27806],{"class":1742},[68,28715,28716],{"class":1742}," run",[68,28718,28719],{"class":85}," --rm",[68,28721,28722],{"class":85}," --gpus",[68,28724,28725],{"class":1742}," all",[68,28727,28728],{"class":1742}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[68,28730,28731],{"class":1742}," nvidia-smi\n",[170,28733,28734],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[170,28736,28737],{},[801,28738],{"alt":63,"src":28739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,28741,28743],{"id":28742},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[170,28745,28746],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[170,28748,28749],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[170,28751,28752],{},[1867,28753,28754],{"href":28754,"rel":28755},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25350],[170,28757,28758],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[170,28760,28761],{},"我们只需要找到对应的Docker镜像当底包即可。",[170,28763,28764],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[128,28766,28767,28783],{},[131,28768,28769],{},[134,28770,28771,28774,28777,28780],{},[137,28772,28773],{"align":92},"镜像类型",[137,28775,28776],{"align":92},"适用场景",[137,28778,28779],{"align":92},"示例标签",[137,28781,28782],{"align":92},"大小",[144,28784,28785,28799,28813],{},[134,28786,28787,28790,28793,28796],{},[149,28788,28789],{"align":92},"base",[149,28791,28792],{"align":92},"仅需 CUDA 运行时库",[149,28794,28795],{"align":92},"12.4.0-base-ubuntu22.04",[149,28797,28798],{"align":92},"~240MB",[134,28800,28801,28804,28807,28810],{},[149,28802,28803],{"align":92},"runtime",[149,28805,28806],{"align":92},"部署编译后的应用（含数学库）",[149,28808,28809],{"align":92},"12.4.0-runtime-ubuntu22.04",[149,28811,28812],{"align":92},"~2GB",[134,28814,28815,28818,28821,28824],{},[149,28816,28817],{"align":92},"devel",[149,28819,28820],{"align":92},"开发环境（含编译工具）",[149,28822,28823],{"align":92},"12.4.0-devel-ubuntu22.04",[149,28825,28826],{"align":92},"~3GB",[170,28828,28829,28830,28833],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[65,28831,28832],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[170,28835,28836],{},[801,28837],{"alt":63,"src":28838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[170,28840,28841],{},"在dockerfile里就可以开头这么写：",[58,28843,28845],{"className":25307,"code":28844,"language":25309,"meta":63,"style":63},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[65,28846,28847,28852],{"__ignoreMap":63},[68,28848,28849],{"class":70,"line":71},[68,28850,28851],{"class":302},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[68,28853,28854,28857],{"class":70,"line":82},[68,28855,28856],{"class":74},"FROM",[68,28858,28859],{"class":1742}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,28861,28863],{"id":28862},"_34配置以太网","3.4.配置以太网",[170,28865,28866],{},"指定网络模式",[58,28868,28870],{"className":25307,"code":28869,"language":25309,"meta":63,"style":63},"--net=host \\\n",[65,28871,28872],{"__ignoreMap":63},[68,28873,28874,28877,28879,28882],{"class":70,"line":71},[68,28875,28876],{"class":78},"--net",[68,28878,1685],{"class":316},[68,28880,28881],{"class":1742},"host",[68,28883,26164],{"class":74},[170,28885,28886],{},"启动参数里加上这行即可。具体在下方",[170,28888,28889],{},"--net选项：指定网络模式，该选项有以下参数可选：",[24,28891,28892,28895,28898,28901],{},[27,28893,28894],{},"--net=bridge:默认选项，表示连接到默认的网桥",[27,28896,28897],{},"--net=host:容器使用宿主机的网络",[27,28899,28900],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[27,28902,28903],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1553,28905,28906],{},"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":63,"searchDepth":82,"depth":82,"links":28908},[28909,28910,28911,28912],{"id":28223,"depth":98,"text":28224},{"id":28290,"depth":98,"text":28291},{"id":28742,"depth":98,"text":28743},{"id":28862,"depth":98,"text":28863},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28212,"description":28220},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28919,"title":28920,"body":28921,"description":28928,"extension":1565,"meta":28934,"navigation":1567,"path":28935,"seo":28936,"stem":28937,"__hash__":28938},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28922,"toc":28932},[28923,28926,28929],[10,28924,28920],{"id":28925},"_4dockerhub换源",[170,28927,28928],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[170,28930,28931],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":63,"searchDepth":82,"depth":82,"links":28933},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28920,"description":28928},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28940,"title":28941,"body":28942,"description":63,"extension":1565,"meta":29952,"navigation":1567,"path":29953,"seo":29954,"stem":29955,"__hash__":29956},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28943,"toc":29947},[28944,28947,28951,28957,28961,28964,29302,29305,29308,29311,29316,29321,29324,29327,29330,29333,29352,29355,29366,29372,29554,29564,29580,29843,29845,29870,29885,29894,29944],[10,28945,28941],{"id":28946},"_5docker命令学习",[19,28948,28950],{"id":28949},"_51参考文档","5.1.参考文档",[170,28952,28953],{},[1867,28954,28955],{"href":28955,"rel":28956},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25350],[19,28958,28960],{"id":28959},"_52常用命令","5.2.常用命令",[170,28962,28963],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[128,28965,28966,28977],{},[131,28967,28968],{},[134,28969,28970,28973,28975],{},[137,28971,28972],{"align":92},"命令",[137,28974,142],{"align":92},[137,28976,1055],{"align":92},[144,28978,28979,28990,29001,29012,29023,29034,29045,29056,29066,29077,29088,29099,29109,29120,29131,29142,29152,29162,29172,29182,29193,29204,29215,29226,29237,29248,29258,29269,29280,29291],{},[134,28980,28981,28984,28987],{},[149,28982,28983],{"align":92},"docker run",[149,28985,28986],{"align":92},"创建并启动一个新的容器。",[149,28988,28989],{"align":92},"docker run -it ubuntu bash",[134,28991,28992,28995,28998],{},[149,28993,28994],{"align":92},"docker build",[149,28996,28997],{"align":92},"通过指定的 Dockerfile 创建一个新的镜像。",[149,28999,29000],{"align":92},"docker build -t myimage .",[134,29002,29003,29006,29009],{},[149,29004,29005],{"align":92},"docker pull",[149,29007,29008],{"align":92},"从 Docker 仓库拉取镜像。",[149,29010,29011],{"align":92},"docker pull ubuntu",[134,29013,29014,29017,29020],{},[149,29015,29016],{"align":92},"docker push",[149,29018,29019],{"align":92},"将本地镜像推送到 Docker 仓库。",[149,29021,29022],{"align":92},"docker push myimage",[134,29024,29025,29028,29031],{},[149,29026,29027],{"align":92},"docker stop",[149,29029,29030],{"align":92},"停止一个正在运行的容器。",[149,29032,29033],{"align":92},"docker stop container_id",[134,29035,29036,29039,29042],{},[149,29037,29038],{"align":92},"docker start",[149,29040,29041],{"align":92},"启动一个已经存在的容器。",[149,29043,29044],{"align":92},"docker start container_id",[134,29046,29047,29050,29053],{},[149,29048,29049],{"align":92},"docker restart",[149,29051,29052],{"align":92},"重新启动容器。",[149,29054,29055],{"align":92},"docker restart container_id",[134,29057,29058,29061,29064],{},[149,29059,29060],{"align":92},"docker ps",[149,29062,29063],{"align":92},"列出当前正在运行的容器。",[149,29065,29060],{"align":92},[134,29067,29068,29071,29074],{},[149,29069,29070],{"align":92},"docker rm",[149,29072,29073],{"align":92},"删除一个或多个停止的容器。",[149,29075,29076],{"align":92},"docker rm container_id",[134,29078,29079,29082,29085],{},[149,29080,29081],{"align":92},"docker exec",[149,29083,29084],{"align":92},"在一个正在运行的容器中执行命令。",[149,29086,29087],{"align":92},"docker exec -it container_id bash",[134,29089,29090,29093,29096],{},[149,29091,29092],{"align":92},"docker logs",[149,29094,29095],{"align":92},"查看容器的日志输出。",[149,29097,29098],{"align":92},"docker logs container_id",[134,29100,29101,29104,29107],{},[149,29102,29103],{"align":92},"docker images",[149,29105,29106],{"align":92},"列出本地所有镜像。",[149,29108,29103],{"align":92},[134,29110,29111,29114,29117],{},[149,29112,29113],{"align":92},"docker rmi",[149,29115,29116],{"align":92},"删除一个或多个镜像。",[149,29118,29119],{"align":92},"docker rmi myimage",[134,29121,29122,29125,29128],{},[149,29123,29124],{"align":92},"docker network",[149,29126,29127],{"align":92},"管理 Docker 网络。",[149,29129,29130],{"align":92},"docker network ls",[134,29132,29133,29136,29139],{},[149,29134,29135],{"align":92},"docker volume",[149,29137,29138],{"align":92},"管理 Docker 数据卷。",[149,29140,29141],{"align":92},"docker volume ls",[134,29143,29144,29147,29150],{},[149,29145,29146],{"align":92},"docker-compose up",[149,29148,29149],{"align":92},"启动 docker-compose.yml 中定义的所有服务。",[149,29151,29146],{"align":92},[134,29153,29154,29157,29160],{},[149,29155,29156],{"align":92},"docker-compose down",[149,29158,29159],{"align":92},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[149,29161,29156],{"align":92},[134,29163,29164,29167,29170],{},[149,29165,29166],{"align":92},"docker info",[149,29168,29169],{"align":92},"显示 Docker 系统的详细信息。",[149,29171,29166],{"align":92},[134,29173,29174,29177,29180],{},[149,29175,29176],{"align":92},"docker stats",[149,29178,29179],{"align":92},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[149,29181,29176],{"align":92},[134,29183,29184,29187,29190],{},[149,29185,29186],{"align":92},"docker inspect",[149,29188,29189],{"align":92},"查看容器或镜像的详细信息（JSON 格式）。",[149,29191,29192],{"align":92},"docker inspect container_id",[134,29194,29195,29198,29201],{},[149,29196,29197],{"align":92},"docker save",[149,29199,29200],{"align":92},"将一个镜像保存为 tar 文件。",[149,29202,29203],{"align":92},"docker save -o myimage.tar myimage",[134,29205,29206,29209,29212],{},[149,29207,29208],{"align":92},"docker load",[149,29210,29211],{"align":92},"从 tar 文件中加载镜像。",[149,29213,29214],{"align":92},"docker load -i myimage.tar",[134,29216,29217,29220,29223],{},[149,29218,29219],{"align":92},"docker tag",[149,29221,29222],{"align":92},"为镜像添加标签（tag）。",[149,29224,29225],{"align":92},"docker tag myimage myimage:v1",[134,29227,29228,29231,29234],{},[149,29229,29230],{"align":92},"docker buildx build",[149,29232,29233],{"align":92},"使用 Buildx 构建多架构镜像。",[149,29235,29236],{"align":92},"docker buildx build -t myimage .",[134,29238,29239,29242,29245],{},[149,29240,29241],{"align":92},"docker buildx create",[149,29243,29244],{"align":92},"创建一个新的 Buildx 构建实例。",[149,29246,29247],{"align":92},"docker buildx create –use",[134,29249,29250,29253,29256],{},[149,29251,29252],{"align":92},"docker buildx ls",[149,29254,29255],{"align":92},"列出所有可用的 Buildx 构建实例。",[149,29257,29252],{"align":92},[134,29259,29260,29263,29266],{},[149,29261,29262],{"align":92},"docker buildx use",[149,29264,29265],{"align":92},"设置当前的 Buildx 构建实例。",[149,29267,29268],{"align":92},"docker buildx use mybuilder",[134,29270,29271,29274,29277],{},[149,29272,29273],{"align":92},"docker buildx bake",[149,29275,29276],{"align":92},"使用 Bake 文件批量构建镜像。",[149,29278,29279],{"align":92},"docker buildx bake -f bake.hcl",[134,29281,29282,29285,29288],{},[149,29283,29284],{"align":92},"docker buildx build –push",[149,29286,29287],{"align":92},"构建镜像并推送到镜像仓库。",[149,29289,29290],{"align":92},"docker buildx build –push -t myimage .",[134,29292,29293,29296,29299],{},[149,29294,29295],{"align":92},"docker buildx build –platform",[149,29297,29298],{"align":92},"构建镜像并为多个平台生成支持。",[149,29300,29301],{"align":92},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[170,29303,29304],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[170,29306,29307],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[170,29309,29310],{},"docker images 可以查看已经下载的镜像",[170,29312,29313],{},[801,29314],{"alt":63,"src":29315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[170,29317,29318],{},[268,29319,29320],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[170,29322,29323],{},"docker rmi $(docker images -q) 删除所有的镜像",[170,29325,29326],{},"docker container logs 查看容器日志",[170,29328,29329],{},"docker top 查看容器里的进程",[170,29331,29332],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[58,29334,29336],{"className":25307,"code":29335,"language":25309,"meta":63,"style":63},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[65,29337,29338],{"__ignoreMap":63},[68,29339,29340,29343,29346,29349],{"class":70,"line":71},[68,29341,29342],{"class":74},"如：docker",[68,29344,29345],{"class":1742}," cp",[68,29347,29348],{"class":1742}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[68,29350,29351],{"class":1742}," \u002Fmydata\u002Fnginx\n",[170,29353,29354],{},"docker run时在启动容器的时候会有几个常用的选项：",[24,29356,29357,29360,29363],{},[27,29358,29359],{},"-d选项：表示后台运行",[27,29361,29362],{},"-P选项：随机端口映射",[27,29364,29365],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,29367,29369],{"id":29368},"_53run命令的参数非常重要",[268,29370,29371],{},"5.3.run命令的参数（非常重要）",[128,29373,29374,29387],{},[131,29375,29376],{},[134,29377,29378,29381,29384],{},[137,29379,29380],{"align":92},"参数\u002F配置",[137,29382,29383],{"align":92},"功能说明",[137,29385,29386],{"align":92},"重要性与参考依据",[144,29388,29389,29400,29411,29422,29433,29444,29455,29466,29477,29488,29499,29510,29521,29532,29543],{},[134,29390,29391,29394,29397],{},[149,29392,29393],{"align":92},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[149,29395,29396],{"align":92},"指定容器名称，便于后续管理",[149,29398,29399],{"align":92},"替代随机生成的容器名。",[134,29401,29402,29405,29408],{},[149,29403,29404],{"align":92},"–gpus all",[149,29406,29407],{"align":92},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[149,29409,29410],{"align":92},"用于CUDA加速等GPU依赖任务。",[134,29412,29413,29416,29419],{},[149,29414,29415],{"align":92},"-e NVIDIA_DRIVER_CAPABILITIES=all",[149,29417,29418],{"align":92},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[149,29420,29421],{"align":92},"确保容器内GPU功能完整67。",[134,29423,29424,29427,29430],{},[149,29425,29426],{"align":92},"-dit",[149,29428,29429],{"align":92},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[149,29431,29432],{"align":92},"允许容器在后台运行并支持交互操作。",[134,29434,29435,29438,29441],{},[149,29436,29437],{"align":92},"–privileged",[149,29439,29440],{"align":92},"赋予容器完全主机权限（可访问设备、内核模块等）",[149,29442,29443],{"align":92},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[134,29445,29446,29449,29452],{},[149,29447,29448],{"align":92},"–net=host",[149,29450,29451],{"align":92},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[149,29453,29454],{"align":92},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[134,29456,29457,29460,29463],{},[149,29458,29459],{"align":92},"–group-add audio–group-add video–group-add dialout",[149,29461,29462],{"align":92},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[149,29464,29465],{"align":92},"避免权限问题（如避免无法调用摄像头、麦克风）。",[134,29467,29468,29471,29474],{},[149,29469,29470],{"align":92},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[149,29472,29473],{"align":92},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[149,29475,29476],{"align":92},"支持容器内运行图形界面应用（如OpenCV可视化）。",[134,29478,29479,29482,29485],{},[149,29480,29481],{"align":92},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[149,29483,29484],{"align":92},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[149,29486,29487],{"align":92},"实现容器内图形显示。",[134,29489,29490,29493,29496],{},[149,29491,29492],{"align":92},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[149,29494,29495],{"align":92},"挂载X11认证文件（只读）",[149,29497,29498],{"align":92},"确保容器有权连接宿主机显示服务。",[134,29500,29501,29504,29507],{},[149,29502,29503],{"align":92},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[149,29505,29506],{"align":92},"挂载Wayland显示协议相关目录",[149,29508,29509],{"align":92},"支持Wayland协议的图形显示。",[134,29511,29512,29515,29518],{},[149,29513,29514],{"align":92},"–ulimit nofile=1024:524288",[149,29516,29517],{"align":92},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[149,29519,29520],{"align":92},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[134,29522,29523,29526,29529],{},[149,29524,29525],{"align":92},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[149,29527,29528],{"align":92},"挂载宿主机用户目录到容器内同名路径",[149,29530,29531],{"align":92},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[134,29533,29534,29537,29540],{},[149,29535,29536],{"align":92},"-w \u002Fhome\u002Ftungchiahui",[149,29538,29539],{"align":92},"设置容器启动后的默认工作目录",[149,29541,29542],{"align":92},"直接进入项目路径，方便执行命令2324。",[134,29544,29545,29548,29551],{},[149,29546,29547],{"align":92},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[149,29549,29550],{"align":92},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[149,29552,29553],{"align":92},"提供预配置的深度学习与机器人开发环境。",[170,29555,29556,29557,29559,29560,29563],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[65,29558,26062],{},"加不加",[65,29561,29562],{},"sudo -E","都无所谓。",[170,29565,29566,29567,29569,29570,29572,29573,29576,29577,29579],{},"用户已经被加到docker组了，不用",[65,29568,26062],{},"也行跑，其次，",[65,29571,26062],{},"运行的话，你的",[65,29574,29575],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[65,29578,29575],{},"更不可能变了。",[58,29581,29583],{"className":25307,"code":29582,"language":25309,"meta":63,"style":63},"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",[65,29584,29585,29598,29608,29618,29630,29637,29644,29651,29661,29670,29679,29693,29705,29717,29726,29736,29745,29760,29793,29820,29831,29838],{"__ignoreMap":63},[68,29586,29587,29589,29591,29593,29596],{"class":70,"line":71},[68,29588,26062],{"class":74},[68,29590,27806],{"class":1742},[68,29592,28716],{"class":1742},[68,29594,29595],{"class":85}," --name=ros_opencv_cuda",[68,29597,26164],{"class":85},[68,29599,29600,29603,29606],{"class":70,"line":82},[68,29601,29602],{"class":78},"--gpus ",[68,29604,29605],{"class":1742},"all",[68,29607,26164],{"class":85},[68,29609,29610,29613,29616],{"class":70,"line":98},[68,29611,29612],{"class":78},"-e ",[68,29614,29615],{"class":1742},"NVIDIA_DRIVER_CAPABILITIES=all",[68,29617,26164],{"class":85},[68,29619,29620,29622,29625,29628],{"class":70,"line":104},[68,29621,29612],{"class":78},[68,29623,29624],{"class":1742},"DISPLAY=",[68,29626,29627],{"class":78},"$DISPLAY ",[68,29629,27661],{"class":85},[68,29631,29632,29635],{"class":70,"line":112},[68,29633,29634],{"class":78},"-dit ",[68,29636,27661],{"class":85},[68,29638,29639,29642],{"class":70,"line":124},[68,29640,29641],{"class":78},"--privileged ",[68,29643,27661],{"class":85},[68,29645,29646,29649],{"class":70,"line":1496},[68,29647,29648],{"class":78},"--net=host ",[68,29650,27661],{"class":85},[68,29652,29653,29656,29659],{"class":70,"line":1502},[68,29654,29655],{"class":78},"--group-add ",[68,29657,29658],{"class":1742},"audio",[68,29660,26164],{"class":85},[68,29662,29663,29665,29668],{"class":70,"line":1510},[68,29664,29655],{"class":78},[68,29666,29667],{"class":1742},"video",[68,29669,26164],{"class":85},[68,29671,29672,29674,29677],{"class":70,"line":1521},[68,29673,29655],{"class":78},[68,29675,29676],{"class":1742},"dialout",[68,29678,26164],{"class":85},[68,29680,29681,29683,29686,29688,29691],{"class":70,"line":3103},[68,29682,29612],{"class":78},[68,29684,29685],{"class":1742},"XAUTHORITY=",[68,29687,29575],{"class":78},[68,29689,29690],{"class":1742},"\u002F.Xauthority",[68,29692,26164],{"class":85},[68,29694,29695,29697,29700,29703],{"class":70,"line":3108},[68,29696,29612],{"class":78},[68,29698,29699],{"class":1742},"WAYLAND_DISPLAY=",[68,29701,29702],{"class":78},"$WAYLAND_DISPLAY ",[68,29704,27661],{"class":85},[68,29706,29707,29709,29712,29715],{"class":70,"line":3114},[68,29708,29612],{"class":78},[68,29710,29711],{"class":1742},"XDG_RUNTIME_DIR=",[68,29713,29714],{"class":78},"$XDG_RUNTIME_DIR ",[68,29716,27661],{"class":85},[68,29718,29719,29721,29724],{"class":70,"line":3119},[68,29720,29612],{"class":78},[68,29722,29723],{"class":1742},"QT_QPA_PLATFORM=xcb",[68,29725,26164],{"class":85},[68,29727,29728,29731,29734],{"class":70,"line":3133},[68,29729,29730],{"class":78},"-v ",[68,29732,29733],{"class":1742},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[68,29735,26164],{"class":85},[68,29737,29738,29740,29743],{"class":70,"line":3138},[68,29739,29730],{"class":78},[68,29741,29742],{"class":1742},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[68,29744,26164],{"class":85},[68,29746,29747,29750,29753,29755,29758],{"class":70,"line":3144},[68,29748,29749],{"class":78},"-v $HOME",[68,29751,29752],{"class":1742},"\u002F.Xauthority:",[68,29754,29575],{"class":78},[68,29756,29757],{"class":1742},"\u002F.Xauthority:ro",[68,29759,26164],{"class":85},[68,29761,29762,29764,29767,29769,29772,29775,29777,29780,29782,29784,29786,29788,29791],{"class":70,"line":3165},[68,29763,29730],{"class":78},[68,29765,29766],{"class":1742},"\u002Frun\u002Fuser\u002F",[68,29768,26585],{"class":78},[68,29770,29771],{"class":74},"id",[68,29773,29774],{"class":85}," -u",[68,29776,2058],{"class":78},[68,29778,29779],{"class":1742},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[68,29781,26585],{"class":78},[68,29783,29771],{"class":74},[68,29785,29774],{"class":85},[68,29787,2058],{"class":78},[68,29789,29790],{"class":1742},"\u002Fwayland-0",[68,29792,26164],{"class":85},[68,29794,29795,29797,29799,29801,29803,29805,29807,29810,29812,29814,29816,29818],{"class":70,"line":3170},[68,29796,29730],{"class":78},[68,29798,29766],{"class":1742},[68,29800,26585],{"class":78},[68,29802,29771],{"class":74},[68,29804,29774],{"class":85},[68,29806,2058],{"class":78},[68,29808,29809],{"class":1742},":\u002Frun\u002Fuser\u002F",[68,29811,26585],{"class":78},[68,29813,29771],{"class":74},[68,29815,29774],{"class":85},[68,29817,15202],{"class":78},[68,29819,27661],{"class":85},[68,29821,29822,29824,29826,29829],{"class":70,"line":3184},[68,29823,29749],{"class":78},[68,29825,2486],{"class":1742},[68,29827,29828],{"class":78},"$HOME ",[68,29830,27661],{"class":85},[68,29832,29833,29836],{"class":70,"line":3189},[68,29834,29835],{"class":78},"-w $HOME ",[68,29837,27661],{"class":85},[68,29839,29840],{"class":70,"line":3218},[68,29841,29842],{"class":78},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[170,29844,1106],{},[263,29846,29847,29855,29858,29861],{},[27,29848,29849,15283,29851,29854],{},[65,29850,29615],{},[65,29852,29853],{},"--gpus all","没有英伟达显卡请注释。",[27,29856,29857],{},"--name后面请自己为容器起名。",[27,29859,29860],{},"最后一行仓库名称请你自己找对应的镜像填上。",[27,29862,29863,29864,29869],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25039,29865,29866],{},[268,29867,29868],{},"请不要加","。",[58,29871,29873],{"className":25307,"code":29872,"language":25309,"meta":63,"style":63},"--ulimit nofile=1024:524288 \\\n",[65,29874,29875],{"__ignoreMap":63},[68,29876,29877,29880,29883],{"class":70,"line":71},[68,29878,29879],{"class":74},"--ulimit",[68,29881,29882],{"class":1742}," nofile=1024:524288",[68,29884,26164],{"class":85},[170,29886,29887,29888,29893],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25039,29889,29890],{},[268,29891,29892],{},"不建议","**.**",[58,29895,29897],{"className":25307,"code":29896,"language":25309,"meta":63,"style":63},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[65,29898,29899,29926,29935],{"__ignoreMap":63},[68,29900,29901,29904,29907,29909,29911,29913,29915,29917,29919,29922,29924],{"class":70,"line":71},[68,29902,29903],{"class":74},"--user",[68,29905,29906],{"class":78}," $(",[68,29908,29771],{"class":74},[68,29910,29774],{"class":85},[68,29912,2058],{"class":78},[68,29914,2486],{"class":1742},[68,29916,26585],{"class":78},[68,29918,29771],{"class":74},[68,29920,29921],{"class":85}," -g",[68,29923,15202],{"class":78},[68,29925,27661],{"class":85},[68,29927,29928,29930,29933],{"class":70,"line":82},[68,29929,29730],{"class":78},[68,29931,29932],{"class":1742},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[68,29934,26164],{"class":85},[68,29936,29937,29939,29942],{"class":70,"line":98},[68,29938,29730],{"class":78},[68,29940,29941],{"class":1742},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[68,29943,26164],{"class":85},[1553,29945,29946],{},"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":63,"searchDepth":82,"depth":82,"links":29948},[29949,29950,29951],{"id":28949,"depth":98,"text":28950},{"id":28959,"depth":98,"text":28960},{"id":29368,"depth":98,"text":29371},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28941,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29958,"title":29959,"body":29960,"description":63,"extension":1565,"meta":31583,"navigation":1567,"path":31584,"seo":31585,"stem":31586,"__hash__":31587},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29961,"toc":31578},[29962,29965,29969,29972,30194,30198,30202,30205,30311,30316,30319,30324,30327,30332,30335,30340,30343,30355,30358,30363,30370,30398,30405,30481,30486,30489,30512,30514,30589,30594,30597,30601,30609,30614,30619,30623,30634,30640,30643,30646,30670,30673,30676,30704,30707,30710,31175,31178,31183,31188,31192,31215,31220,31224,31228,31231,31234,31237,31264,31267,31270,31288,31291,31294,31316,31324,31329,31334,31338,31341,31344,31347,31350,31395,31398,31416,31419,31424,31427,31448,31451,31507,31510,31515,31519,31522,31529,31532,31535,31540,31543,31559,31562,31575],[10,29963,29959],{"id":29964},"_6手动创建docker镜像",[19,29966,29968],{"id":29967},"_61dockerfile","6.1.DockerFile",[170,29970,29971],{},"常用命令：",[128,29973,29974,29985],{},[131,29975,29976],{},[134,29977,29978,29981,29983],{},[137,29979,29980],{"align":92},"指令",[137,29982,27355],{"align":92},[137,29984,1055],{"align":92},[144,29986,29987,29997,30013,30024,30035,30046,30057,30068,30079,30093,30107,30118,30132,30143,30154,30168,30183],{},[134,29988,29989,29991,29994],{},[149,29990,28856],{"align":92},[149,29992,29993],{"align":92},"指定基础镜像，是 Dockerfile 的起点",[149,29995,29996],{"align":92},"FROM ubuntu:22.04",[134,29998,29999,30002,30005],{},[149,30000,30001],{"align":92},"LABEL",[149,30003,30004],{"align":92},"添加元数据（如作者、版本等）",[149,30006,30007,30008,30012],{"align":92},"LABEL maintainer=”",[1867,30009,30011],{"href":30010},"mailto:you@example.com","you@example.com","”",[134,30014,30015,30018,30021],{},[149,30016,30017],{"align":92},"ENV",[149,30019,30020],{"align":92},"设置环境变量",[149,30022,30023],{"align":92},"ENV PORT=8080",[134,30025,30026,30029,30032],{},[149,30027,30028],{"align":92},"ARG",[149,30030,30031],{"align":92},"构建参数，只在构建期间可用",[149,30033,30034],{"align":92},"ARG VERSION=1.0",[134,30036,30037,30040,30043],{},[149,30038,30039],{"align":92},"RUN",[149,30041,30042],{"align":92},"构建镜像时运行命令",[149,30044,30045],{"align":92},"RUN apt-get update && apt-get install -y curl",[134,30047,30048,30051,30054],{},[149,30049,30050],{"align":92},"COPY",[149,30052,30053],{"align":92},"复制文件到镜像中",[149,30055,30056],{"align":92},"COPY . \u002Fapp",[134,30058,30059,30062,30065],{},[149,30060,30061],{"align":92},"ADD",[149,30063,30064],{"align":92},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[149,30066,30067],{"align":92},"ADD archive.tar.gz \u002Fdata\u002F",[134,30069,30070,30073,30076],{},[149,30071,30072],{"align":92},"WORKDIR",[149,30074,30075],{"align":92},"设置工作目录",[149,30077,30078],{"align":92},"WORKDIR \u002Fopt",[134,30080,30081,30084,30087],{},[149,30082,30083],{"align":92},"CMD",[149,30085,30086],{"align":92},"设置容器启动时默认命令（可被 docker run 覆盖）",[149,30088,30089,30090],{"align":92},"CMD ",[68,30091,30092],{},"“node”, “index.js”",[134,30094,30095,30098,30101],{},[149,30096,30097],{"align":92},"ENTRYPOINT",[149,30099,30100],{"align":92},"设置容器启动时固定命令（通常用于 CLI 工具等）",[149,30102,30103,30104],{"align":92},"ENTRYPOINT ",[68,30105,30106],{},"“python3”",[134,30108,30109,30112,30115],{},[149,30110,30111],{"align":92},"EXPOSE",[149,30113,30114],{"align":92},"声明镜像内服务监听的端口（不会自动映射）",[149,30116,30117],{"align":92},"EXPOSE 80",[134,30119,30120,30123,30126],{},[149,30121,30122],{"align":92},"VOLUME",[149,30124,30125],{"align":92},"声明数据卷挂载点",[149,30127,30128,30129],{"align":92},"VOLUME ",[68,30130,30131],{},"“\u002Fdata”",[134,30133,30134,30137,30140],{},[149,30135,30136],{"align":92},"USER",[149,30138,30139],{"align":92},"设置后续命令执行的用户",[149,30141,30142],{"align":92},"USER appuser",[134,30144,30145,30148,30151],{},[149,30146,30147],{"align":92},"ONBUILD",[149,30149,30150],{"align":92},"当镜像作为其他镜像基础镜像时触发的构建指令",[149,30152,30153],{"align":92},"ONBUILD COPY . \u002Fsrc",[134,30155,30156,30159,30162],{},[149,30157,30158],{"align":92},"SHELL",[149,30160,30161],{"align":92},"更改默认 shell，比如将 sh -c 改为 bash -c",[149,30163,30164,30165],{"align":92},"SHELL ",[68,30166,30167],{},"“\u002Fbin\u002Fbash”, “-c”",[134,30169,30170,30173,30176],{},[149,30171,30172],{"align":92},"HEALTHCHECK",[149,30174,30175],{"align":92},"定义容器运行时的健康检查命令",[149,30177,30178,30179],{"align":92},"`HEALTHCHECK CMD curl –fail ",[1867,30180,30181],{"href":30181,"rel":30182},"http:\u002F\u002Flocalhost:8080",[25350],[134,30184,30185,30188,30191],{},[149,30186,30187],{"align":92},"STOPSIGNAL",[149,30189,30190],{"align":92},"容器停止时发送的信号",[149,30192,30193],{"align":92},"STOPSIGNAL SIGKILL",[19,30195,30197],{"id":30196},"_62自己创建容器","6.2.自己创建容器",[245,30199,30201],{"id":30200},"_621手动创建","6.2.1.手动创建",[170,30203,30204],{},"在x86电脑上编译x86的：",[58,30206,30208],{"className":25307,"code":30207,"language":25309,"meta":63,"style":63},"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",[65,30209,30210,30226,30230,30243,30247,30260,30264,30277,30281,30294,30298],{"__ignoreMap":63},[68,30211,30212,30214,30217,30220,30223],{"class":70,"line":71},[68,30213,28039],{"class":74},[68,30215,30216],{"class":1742}," build",[68,30218,30219],{"class":85}," -t",[68,30221,30222],{"class":1742}," ros-melodic-cuda118-cudnn8-bionic:latest",[68,30224,30225],{"class":1742}," .\n",[68,30227,30228],{"class":70,"line":82},[68,30229,3890],{"emptyLinePlaceholder":1567},[68,30231,30232,30234,30236,30238,30241],{"class":70,"line":98},[68,30233,28039],{"class":74},[68,30235,30216],{"class":1742},[68,30237,30219],{"class":85},[68,30239,30240],{"class":1742}," ros-noetic-focal:latest",[68,30242,30225],{"class":1742},[68,30244,30245],{"class":70,"line":104},[68,30246,3890],{"emptyLinePlaceholder":1567},[68,30248,30249,30251,30253,30255,30258],{"class":70,"line":112},[68,30250,28039],{"class":74},[68,30252,30216],{"class":1742},[68,30254,30219],{"class":85},[68,30256,30257],{"class":1742}," ros-humble-jammy:latest",[68,30259,30225],{"class":1742},[68,30261,30262],{"class":70,"line":124},[68,30263,3890],{"emptyLinePlaceholder":1567},[68,30265,30266,30268,30270,30272,30275],{"class":70,"line":1496},[68,30267,28039],{"class":74},[68,30269,30216],{"class":1742},[68,30271,30219],{"class":85},[68,30273,30274],{"class":1742}," ros-jazzy-noble:latest",[68,30276,30225],{"class":1742},[68,30278,30279],{"class":70,"line":1502},[68,30280,3890],{"emptyLinePlaceholder":1567},[68,30282,30283,30285,30287,30289,30292],{"class":70,"line":1510},[68,30284,28039],{"class":74},[68,30286,30216],{"class":1742},[68,30288,30219],{"class":85},[68,30290,30291],{"class":1742}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[68,30293,30225],{"class":1742},[68,30295,30296],{"class":70,"line":1521},[68,30297,3890],{"emptyLinePlaceholder":1567},[68,30299,30300,30302,30304,30306,30309],{"class":70,"line":3103},[68,30301,28039],{"class":74},[68,30303,30216],{"class":1742},[68,30305,30219],{"class":85},[68,30307,30308],{"class":1742}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[68,30310,30225],{"class":1742},[170,30312,30313],{},[801,30314],{"alt":63,"src":30315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[170,30317,30318],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[170,30320,30321],{},[801,30322],{"alt":63,"src":30323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[170,30325,30326],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[263,30328,30329],{},[27,30330,30331],{},"创建 Docker Hub 账户",[170,30333,30334],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[263,30336,30337],{"start":82},[27,30338,30339],{},"登录 Docker Hub",[170,30341,30342],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[58,30344,30346],{"className":25307,"code":30345,"language":25309,"meta":63,"style":63},"docker login\n",[65,30347,30348],{"__ignoreMap":63},[68,30349,30350,30352],{"class":70,"line":71},[68,30351,28039],{"class":74},[68,30353,30354],{"class":1742}," login\n",[170,30356,30357],{},"输入你的 Docker Hub 用户名和密码进行验证。",[263,30359,30360],{},[27,30361,30362],{},"为你的镜像打标签",[170,30364,30365,30366,30369],{},"Docker Hub 使用 ",[65,30367,30368],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[58,30371,30373],{"className":25307,"code":30372,"language":25309,"meta":63,"style":63},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[65,30374,30375],{"__ignoreMap":63},[68,30376,30377,30379,30382,30384,30387,30390,30393,30395],{"class":70,"line":71},[68,30378,28039],{"class":74},[68,30380,30381],{"class":1742}," tag",[68,30383,30274],{"class":1742},[68,30385,30386],{"class":316}," \u003C",[68,30388,30389],{"class":1742},"你的用户",[68,30391,30392],{"class":78},"名",[68,30394,2587],{"class":316},[68,30396,30397],{"class":1742},"\u002Fros-jazzy-noble:latest\n",[170,30399,30400,30401,30404],{},"例如，如果你的 Docker Hub 用户名是 ",[65,30402,30403],{},"tungchiahui","，你应该执行：",[58,30406,30408],{"className":25307,"code":30407,"language":25309,"meta":63,"style":63},"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",[65,30409,30410,30421,30425,30436,30440,30451,30455,30466,30470],{"__ignoreMap":63},[68,30411,30412,30414,30416,30418],{"class":70,"line":71},[68,30413,28039],{"class":74},[68,30415,30381],{"class":1742},[68,30417,30240],{"class":1742},[68,30419,30420],{"class":1742}," tungchiahui\u002Fros-noetic-focal:latest\n",[68,30422,30423],{"class":70,"line":82},[68,30424,3890],{"emptyLinePlaceholder":1567},[68,30426,30427,30429,30431,30433],{"class":70,"line":98},[68,30428,28039],{"class":74},[68,30430,30381],{"class":1742},[68,30432,30257],{"class":1742},[68,30434,30435],{"class":1742}," tungchiahui\u002Fros-humble-jammy:latest\n",[68,30437,30438],{"class":70,"line":104},[68,30439,3890],{"emptyLinePlaceholder":1567},[68,30441,30442,30444,30446,30448],{"class":70,"line":112},[68,30443,28039],{"class":74},[68,30445,30381],{"class":1742},[68,30447,30274],{"class":1742},[68,30449,30450],{"class":1742}," tungchiahui\u002Fros-jazzy-noble:latest\n",[68,30452,30453],{"class":70,"line":124},[68,30454,3890],{"emptyLinePlaceholder":1567},[68,30456,30457,30459,30461,30463],{"class":70,"line":1496},[68,30458,28039],{"class":74},[68,30460,30381],{"class":1742},[68,30462,30291],{"class":1742},[68,30464,30465],{"class":1742}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,30467,30468],{"class":70,"line":1502},[68,30469,3890],{"emptyLinePlaceholder":1567},[68,30471,30472,30474,30476,30478],{"class":70,"line":1510},[68,30473,28039],{"class":74},[68,30475,30381],{"class":1742},[68,30477,30308],{"class":1742},[68,30479,30480],{"class":1742}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[263,30482,30483],{"start":82},[27,30484,30485],{},"推送镜像到 Docker Hub",[170,30487,30488],{},"使用以下命令将镜像推送到 Docker Hub：",[58,30490,30492],{"className":25307,"code":30491,"language":25309,"meta":63,"style":63},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[65,30493,30494],{"__ignoreMap":63},[68,30495,30496,30498,30501,30503,30505,30507,30509],{"class":70,"line":71},[68,30497,28039],{"class":74},[68,30499,30500],{"class":1742}," push",[68,30502,30386],{"class":316},[68,30504,30389],{"class":1742},[68,30506,30392],{"class":78},[68,30508,2587],{"class":316},[68,30510,30511],{"class":1742},"\u002Fros-noetic-jazzy-noble:latest\n",[170,30513,16121],{},[58,30515,30517],{"className":25307,"code":30516,"language":25309,"meta":63,"style":63},"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",[65,30518,30519,30527,30531,30539,30543,30551,30555,30564,30568,30576,30580],{"__ignoreMap":63},[68,30520,30521,30523,30525],{"class":70,"line":71},[68,30522,28039],{"class":74},[68,30524,30500],{"class":1742},[68,30526,30420],{"class":1742},[68,30528,30529],{"class":70,"line":82},[68,30530,3890],{"emptyLinePlaceholder":1567},[68,30532,30533,30535,30537],{"class":70,"line":98},[68,30534,28039],{"class":74},[68,30536,30500],{"class":1742},[68,30538,30435],{"class":1742},[68,30540,30541],{"class":70,"line":104},[68,30542,3890],{"emptyLinePlaceholder":1567},[68,30544,30545,30547,30549],{"class":70,"line":112},[68,30546,28039],{"class":74},[68,30548,30500],{"class":1742},[68,30550,30450],{"class":1742},[68,30552,30553],{"class":70,"line":124},[68,30554,3890],{"emptyLinePlaceholder":1567},[68,30556,30557,30559,30561],{"class":70,"line":1496},[68,30558,28039],{"class":74},[68,30560,30500],{"class":1742},[68,30562,30563],{"class":1742}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,30565,30566],{"class":70,"line":1502},[68,30567,3890],{"emptyLinePlaceholder":1567},[68,30569,30570,30572,30574],{"class":70,"line":1510},[68,30571,28039],{"class":74},[68,30573,30500],{"class":1742},[68,30575,30480],{"class":1742},[68,30577,30578],{"class":70,"line":1521},[68,30579,3890],{"emptyLinePlaceholder":1567},[68,30581,30582,30584,30586],{"class":70,"line":3103},[68,30583,28039],{"class":74},[68,30585,30500],{"class":1742},[68,30587,30588],{"class":1742}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[263,30590,30591],{"start":98},[27,30592,30593],{},"验证推送成功",[170,30595,30596],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[170,30598,30599],{},[268,30600,5274],{},[24,30602,30603,30606],{},[27,30604,30605],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[27,30607,30608],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[170,30610,30611],{},[801,30612],{"alt":63,"src":30613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[170,30615,30616],{},[801,30617],{"alt":63,"src":30618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[245,30620,30622],{"id":30621},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[170,30624,30625,30626,30629,30630,30633],{},"如果您想在 ",[268,30627,30628],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[268,30631,30632],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[170,30635,30636,30637],{},"1. ",[268,30638,30639],{},"启用 Docker 跨平台构建",[170,30641,30642],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[170,30644,30645],{},"第一步：启用 buildx（只需执行一次）",[58,30647,30649],{"className":25307,"code":30648,"language":25309,"meta":63,"style":63},"docker buildx create --name multiarch_builder --use\n",[65,30650,30651],{"__ignoreMap":63},[68,30652,30653,30655,30658,30661,30664,30667],{"class":70,"line":71},[68,30654,28039],{"class":74},[68,30656,30657],{"class":1742}," buildx",[68,30659,30660],{"class":1742}," create",[68,30662,30663],{"class":85}," --name",[68,30665,30666],{"class":1742}," multiarch_builder",[68,30668,30669],{"class":85}," --use\n",[170,30671,30672],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[170,30674,30675],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[58,30677,30679],{"className":25307,"code":30678,"language":25309,"meta":63,"style":63},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[65,30680,30681],{"__ignoreMap":63},[68,30682,30683,30685,30687,30689,30692,30695,30698,30701],{"class":70,"line":71},[68,30684,28039],{"class":74},[68,30686,28716],{"class":1742},[68,30688,28719],{"class":85},[68,30690,30691],{"class":85}," --privileged",[68,30693,30694],{"class":1742}," multiarch\u002Fqemu-user-static",[68,30696,30697],{"class":85}," --reset",[68,30699,30700],{"class":85}," -p",[68,30702,30703],{"class":1742}," yes\n",[170,30705,30706],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[170,30708,30709],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[58,30711,30713],{"className":25307,"code":30712,"language":25309,"meta":63,"style":63},"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",[65,30714,30715,30757,30761,30766,30776,30786,30795,30801,30805,30809,30819,30827,30836,30842,30846,30850,30860,30868,30877,30883,30887,30891,30901,30909,30918,30924,30928,30932,30942,30950,30959,30965,30969,30973,30983,30991,31000,31006,31010,31014,31024,31032,31041,31047,31051,31055,31065,31073,31082,31088,31092,31096,31106,31114,31123,31129,31133,31137,31148,31156,31165,31171],{"__ignoreMap":63},[68,30716,30717,30719,30721,30723,30726,30729,30731,30733,30736,30738,30740,30742,30744,30747,30750,30752,30755],{"class":70,"line":71},[68,30718,28039],{"class":74},[68,30720,30657],{"class":1742},[68,30722,30216],{"class":1742},[68,30724,30725],{"class":85}," --platform",[68,30727,30728],{"class":1742}," linux\u002Famd64,linux\u002Farm64",[68,30730,30219],{"class":85},[68,30732,30386],{"class":316},[68,30734,30735],{"class":1742},"你的镜像",[68,30737,30392],{"class":78},[68,30739,2587],{"class":316},[68,30741,2486],{"class":1742},[68,30743,2537],{"class":316},[68,30745,30746],{"class":1742},"标",[68,30748,30749],{"class":78},"签",[68,30751,2587],{"class":316},[68,30753,30754],{"class":85}," --push",[68,30756,30225],{"class":1742},[68,30758,30759],{"class":70,"line":82},[68,30760,3890],{"emptyLinePlaceholder":1567},[68,30762,30763],{"class":70,"line":98},[68,30764,30765],{"class":302},"# 例子：\n",[68,30767,30768,30770,30772,30774],{"class":70,"line":104},[68,30769,28039],{"class":74},[68,30771,30657],{"class":1742},[68,30773,30216],{"class":1742},[68,30775,26164],{"class":85},[68,30777,30778,30781,30784],{"class":70,"line":112},[68,30779,30780],{"class":78},"--platform ",[68,30782,30783],{"class":1742},"linux\u002Famd64,linux\u002Farm64",[68,30785,26164],{"class":85},[68,30787,30788,30790,30793],{"class":70,"line":124},[68,30789,30219],{"class":85},[68,30791,30792],{"class":1742}," tungchiahui\u002Fros:noetic-focal",[68,30794,26164],{"class":85},[68,30796,30797,30799],{"class":70,"line":1496},[68,30798,30754],{"class":85},[68,30800,26164],{"class":85},[68,30802,30803],{"class":70,"line":1502},[68,30804,30225],{"class":1742},[68,30806,30807],{"class":70,"line":1510},[68,30808,3890],{"emptyLinePlaceholder":1567},[68,30810,30811,30813,30815,30817],{"class":70,"line":1521},[68,30812,28039],{"class":74},[68,30814,30657],{"class":1742},[68,30816,30216],{"class":1742},[68,30818,26164],{"class":85},[68,30820,30821,30823,30825],{"class":70,"line":3103},[68,30822,30780],{"class":78},[68,30824,30783],{"class":1742},[68,30826,26164],{"class":85},[68,30828,30829,30831,30834],{"class":70,"line":3108},[68,30830,30219],{"class":85},[68,30832,30833],{"class":1742}," tungchiahui\u002Fros:humble-jammy",[68,30835,26164],{"class":85},[68,30837,30838,30840],{"class":70,"line":3114},[68,30839,30754],{"class":85},[68,30841,26164],{"class":85},[68,30843,30844],{"class":70,"line":3119},[68,30845,30225],{"class":1742},[68,30847,30848],{"class":70,"line":3133},[68,30849,3890],{"emptyLinePlaceholder":1567},[68,30851,30852,30854,30856,30858],{"class":70,"line":3138},[68,30853,28039],{"class":74},[68,30855,30657],{"class":1742},[68,30857,30216],{"class":1742},[68,30859,26164],{"class":85},[68,30861,30862,30864,30866],{"class":70,"line":3144},[68,30863,30780],{"class":78},[68,30865,30783],{"class":1742},[68,30867,26164],{"class":85},[68,30869,30870,30872,30875],{"class":70,"line":3165},[68,30871,30219],{"class":85},[68,30873,30874],{"class":1742}," tungchiahui\u002Fros:jazzy-noble",[68,30876,26164],{"class":85},[68,30878,30879,30881],{"class":70,"line":3170},[68,30880,30754],{"class":85},[68,30882,26164],{"class":85},[68,30884,30885],{"class":70,"line":3184},[68,30886,30225],{"class":1742},[68,30888,30889],{"class":70,"line":3189},[68,30890,3890],{"emptyLinePlaceholder":1567},[68,30892,30893,30895,30897,30899],{"class":70,"line":3218},[68,30894,27806],{"class":74},[68,30896,30657],{"class":1742},[68,30898,30216],{"class":1742},[68,30900,26164],{"class":85},[68,30902,30903,30905,30907],{"class":70,"line":3223},[68,30904,30780],{"class":78},[68,30906,30783],{"class":1742},[68,30908,26164],{"class":85},[68,30910,30911,30913,30916],{"class":70,"line":3240},[68,30912,30219],{"class":85},[68,30914,30915],{"class":1742}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[68,30917,26164],{"class":85},[68,30919,30920,30922],{"class":70,"line":3245},[68,30921,30754],{"class":85},[68,30923,26164],{"class":85},[68,30925,30926],{"class":70,"line":3250},[68,30927,30225],{"class":1742},[68,30929,30930],{"class":70,"line":3255},[68,30931,3890],{"emptyLinePlaceholder":1567},[68,30933,30934,30936,30938,30940],{"class":70,"line":3269},[68,30935,28039],{"class":74},[68,30937,30657],{"class":1742},[68,30939,30216],{"class":1742},[68,30941,26164],{"class":85},[68,30943,30944,30946,30948],{"class":70,"line":3274},[68,30945,30780],{"class":78},[68,30947,30783],{"class":1742},[68,30949,26164],{"class":85},[68,30951,30952,30954,30957],{"class":70,"line":4067},[68,30953,30219],{"class":85},[68,30955,30956],{"class":1742}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[68,30958,26164],{"class":85},[68,30960,30961,30963],{"class":70,"line":4081},[68,30962,30754],{"class":85},[68,30964,26164],{"class":85},[68,30966,30967],{"class":70,"line":4089},[68,30968,30225],{"class":1742},[68,30970,30971],{"class":70,"line":4094},[68,30972,3890],{"emptyLinePlaceholder":1567},[68,30974,30975,30977,30979,30981],{"class":70,"line":4100},[68,30976,27806],{"class":74},[68,30978,30657],{"class":1742},[68,30980,30216],{"class":1742},[68,30982,26164],{"class":85},[68,30984,30985,30987,30989],{"class":70,"line":4106},[68,30986,30780],{"class":78},[68,30988,30783],{"class":1742},[68,30990,26164],{"class":85},[68,30992,30993,30995,30998],{"class":70,"line":4111},[68,30994,30219],{"class":85},[68,30996,30997],{"class":1742}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[68,30999,26164],{"class":85},[68,31001,31002,31004],{"class":70,"line":9437},[68,31003,30754],{"class":85},[68,31005,26164],{"class":85},[68,31007,31008],{"class":70,"line":9461},[68,31009,30225],{"class":1742},[68,31011,31012],{"class":70,"line":9466},[68,31013,3890],{"emptyLinePlaceholder":1567},[68,31015,31016,31018,31020,31022],{"class":70,"line":9472},[68,31017,28039],{"class":74},[68,31019,30657],{"class":1742},[68,31021,30216],{"class":1742},[68,31023,26164],{"class":85},[68,31025,31026,31028,31030],{"class":70,"line":9499},[68,31027,30780],{"class":78},[68,31029,30783],{"class":1742},[68,31031,26164],{"class":85},[68,31033,31034,31036,31039],{"class":70,"line":9504},[68,31035,30219],{"class":85},[68,31037,31038],{"class":1742}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[68,31040,26164],{"class":85},[68,31042,31043,31045],{"class":70,"line":9510},[68,31044,30754],{"class":85},[68,31046,26164],{"class":85},[68,31048,31049],{"class":70,"line":9522},[68,31050,30225],{"class":1742},[68,31052,31053],{"class":70,"line":9534},[68,31054,3890],{"emptyLinePlaceholder":1567},[68,31056,31057,31059,31061,31063],{"class":70,"line":9546},[68,31058,28039],{"class":74},[68,31060,30657],{"class":1742},[68,31062,30216],{"class":1742},[68,31064,26164],{"class":85},[68,31066,31067,31069,31071],{"class":70,"line":11204},[68,31068,30780],{"class":78},[68,31070,30783],{"class":1742},[68,31072,26164],{"class":85},[68,31074,31075,31077,31080],{"class":70,"line":11229},[68,31076,30219],{"class":85},[68,31078,31079],{"class":1742}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,31081,26164],{"class":85},[68,31083,31084,31086],{"class":70,"line":11252},[68,31085,30754],{"class":85},[68,31087,26164],{"class":85},[68,31089,31090],{"class":70,"line":11276},[68,31091,30225],{"class":1742},[68,31093,31094],{"class":70,"line":11281},[68,31095,3890],{"emptyLinePlaceholder":1567},[68,31097,31098,31100,31102,31104],{"class":70,"line":11286},[68,31099,27806],{"class":74},[68,31101,30657],{"class":1742},[68,31103,30216],{"class":1742},[68,31105,26164],{"class":85},[68,31107,31108,31110,31112],{"class":70,"line":11291},[68,31109,30780],{"class":78},[68,31111,30783],{"class":1742},[68,31113,26164],{"class":85},[68,31115,31116,31118,31121],{"class":70,"line":11300},[68,31117,30219],{"class":85},[68,31119,31120],{"class":1742}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[68,31122,26164],{"class":85},[68,31124,31125,31127],{"class":70,"line":11305},[68,31126,30754],{"class":85},[68,31128,26164],{"class":85},[68,31130,31131],{"class":70,"line":11311},[68,31132,30225],{"class":1742},[68,31134,31135],{"class":70,"line":11332},[68,31136,3890],{"emptyLinePlaceholder":1567},[68,31138,31139,31142,31144,31146],{"class":70,"line":11338},[68,31140,31141],{"class":74},"  docker",[68,31143,30657],{"class":1742},[68,31145,30216],{"class":1742},[68,31147,26164],{"class":85},[68,31149,31150,31152,31154],{"class":70,"line":11352},[68,31151,30780],{"class":78},[68,31153,30783],{"class":1742},[68,31155,26164],{"class":85},[68,31157,31158,31160,31163],{"class":70,"line":11358},[68,31159,30219],{"class":85},[68,31161,31162],{"class":1742}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,31164,26164],{"class":85},[68,31166,31167,31169],{"class":70,"line":11385},[68,31168,30754],{"class":85},[68,31170,26164],{"class":85},[68,31172,31173],{"class":70,"line":11394},[68,31174,30225],{"class":1742},[170,31176,31177],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[170,31179,31180],{},[801,31181],{"alt":63,"src":31182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[170,31184,31185],{},[801,31186],{"alt":63,"src":31187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[245,31189,31191],{"id":31190},"_623清除构建缓存","6.2.3.清除构建缓存",[58,31193,31195],{"className":25307,"code":31194,"language":25309,"meta":63,"style":63},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[65,31196,31197,31202],{"__ignoreMap":63},[68,31198,31199],{"class":70,"line":71},[68,31200,31201],{"class":302},"# 清理BuildKit构建缓存\n",[68,31203,31204,31206,31209,31212],{"class":70,"line":82},[68,31205,28039],{"class":74},[68,31207,31208],{"class":1742}," builder",[68,31210,31211],{"class":1742}," prune",[68,31213,31214],{"class":85}," -f\n",[170,31216,31217],{},[801,31218],{"alt":63,"src":31219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,31221,31223],{"id":31222},"_63补充","6.3.补充",[245,31225,31227],{"id":31226},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[170,31229,31230],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[170,31232,31233],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[170,31235,31236],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[58,31238,31240],{"className":25307,"code":31239,"language":25309,"meta":63,"style":63},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[65,31241,31242,31249],{"__ignoreMap":63},[68,31243,31244,31246],{"class":70,"line":71},[68,31245,28856],{"class":74},[68,31247,31248],{"class":1742}," nginx\n",[68,31250,31251,31253,31256,31259,31261],{"class":70,"line":82},[68,31252,30039],{"class":74},[68,31254,31255],{"class":1742}," echo",[68,31257,31258],{"class":1742}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[68,31260,27708],{"class":316},[68,31262,31263],{"class":1742}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[170,31265,31266],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[170,31268,31269],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[58,31271,31273],{"className":25307,"code":31272,"language":25309,"meta":63,"style":63},"docker build -t nginx:tuling .\n",[65,31274,31275],{"__ignoreMap":63},[68,31276,31277,31279,31281,31283,31286],{"class":70,"line":71},[68,31278,28039],{"class":74},[68,31280,30216],{"class":1742},[68,31282,30219],{"class":85},[68,31284,31285],{"class":1742}," nginx:tuling",[68,31287,30225],{"class":1742},[170,31289,31290],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[170,31292,31293],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[58,31295,31297],{"className":25307,"code":31296,"language":25309,"meta":63,"style":63},"docker run -d -p 92:80 nginx:tuling\n",[65,31298,31299],{"__ignoreMap":63},[68,31300,31301,31303,31305,31308,31310,31313],{"class":70,"line":71},[68,31302,28039],{"class":74},[68,31304,28716],{"class":1742},[68,31306,31307],{"class":85}," -d",[68,31309,30700],{"class":85},[68,31311,31312],{"class":1742}," 92:80",[68,31314,31315],{"class":1742}," nginx:tuling\n",[170,31317,31318,31319],{},"4、访问 ",[1867,31320,31323],{"href":31321,"rel":31322},"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",[25350],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[170,31325,31326],{},[801,31327],{"alt":63,"src":31328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[170,31330,31331],{},[801,31332],{"alt":63,"src":31333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[245,31335,31337],{"id":31336},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[170,31339,31340],{},"只需要知道大体流程即可",[170,31342,31343],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[170,31345,31346],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[170,31348,31349],{},"2、在Dockerfile中添加以下内容",[58,31351,31353],{"className":27577,"code":31352,"language":27579,"meta":63,"style":63},"# 基于哪个镜像\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",[65,31354,31355,31360,31365,31370,31375,31380,31385,31390],{"__ignoreMap":63},[68,31356,31357],{"class":70,"line":71},[68,31358,31359],{},"# 基于哪个镜像\n",[68,31361,31362],{"class":70,"line":82},[68,31363,31364],{},"From java:8\n",[68,31366,31367],{"class":70,"line":98},[68,31368,31369],{},"# 复制文件到容器\n",[68,31371,31372],{"class":70,"line":104},[68,31373,31374],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[68,31376,31377],{"class":70,"line":112},[68,31378,31379],{},"# 声明需要暴露的端口\n",[68,31381,31382],{"class":70,"line":124},[68,31383,31384],{},"EXPOSE 8877\n",[68,31386,31387],{"class":70,"line":1496},[68,31388,31389],{},"# 配置容器启动后执行的命令\n",[68,31391,31392],{"class":70,"line":1502},[68,31393,31394],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[170,31396,31397],{},"3、使用docker build命令构建镜像",[58,31399,31401],{"className":25307,"code":31400,"language":25309,"meta":63,"style":63},"docker build -t tulingmall-member:0.0.5 .\n",[65,31402,31403],{"__ignoreMap":63},[68,31404,31405,31407,31409,31411,31414],{"class":70,"line":71},[68,31406,28039],{"class":74},[68,31408,30216],{"class":1742},[68,31410,30219],{"class":85},[68,31412,31413],{"class":1742}," tulingmall-member:0.0.5",[68,31415,30225],{"class":1742},[170,31417,31418],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[170,31420,31421],{},[801,31422],{"alt":63,"src":31423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[170,31425,31426],{},"4、启动镜像，加-d可在后台启动",[58,31428,31430],{"className":25307,"code":31429,"language":25309,"meta":63,"style":63},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[65,31431,31432],{"__ignoreMap":63},[68,31433,31434,31436,31438,31440,31442,31445],{"class":70,"line":71},[68,31435,28039],{"class":74},[68,31437,28716],{"class":1742},[68,31439,31307],{"class":85},[68,31441,30700],{"class":85},[68,31443,31444],{"class":1742}," 8877:8877",[68,31446,31447],{"class":1742}," tulingmall-member:0.0.5\n",[170,31449,31450],{},"加上JVM参数：",[58,31452,31454],{"className":25307,"code":31453,"language":25309,"meta":63,"style":63},"# --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",[65,31455,31456,31461,31476,31486,31495,31502],{"__ignoreMap":63},[68,31457,31458],{"class":70,"line":71},[68,31459,31460],{"class":302},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[68,31462,31463,31465,31467,31470,31472,31474],{"class":70,"line":82},[68,31464,28039],{"class":74},[68,31466,28716],{"class":1742},[68,31468,31469],{"class":85},"  -d",[68,31471,30700],{"class":85},[68,31473,31444],{"class":1742},[68,31475,26164],{"class":85},[68,31477,31478,31480,31483],{"class":70,"line":98},[68,31479,29612],{"class":78},[68,31481,31482],{"class":1742},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[68,31484,31485],{"class":85},"  \\\n",[68,31487,31488,31490,31493],{"class":70,"line":104},[68,31489,29612],{"class":78},[68,31491,31492],{"class":1742},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[68,31494,31485],{"class":85},[68,31496,31497,31500],{"class":70,"line":112},[68,31498,31499],{"class":78},"--cap-add=SYS_PTRACE  ",[68,31501,27661],{"class":85},[68,31503,31504],{"class":70,"line":124},[68,31505,31506],{"class":78},"tulingmall-member:0.0.5\n",[170,31508,31509],{},"5、访问会员服务接口",[170,31511,31512],{},[801,31513],{"alt":63,"src":31514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[245,31516,31518],{"id":31517},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[170,31520,31521],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[170,31523,31524,31525],{},"阿里云docker镜像仓库：",[1867,31526,31527],{"href":31527,"rel":31528},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25350],[170,31530,31531],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[170,31533,31534],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[170,31536,31537],{},[801,31538],{"alt":63,"src":31539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[170,31541,31542],{},"要把镜像推送到镜像仓库",[58,31544,31546],{"className":25307,"code":31545,"language":25309,"meta":63,"style":63},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,31547,31548],{"__ignoreMap":63},[68,31549,31550,31552,31554,31556],{"class":70,"line":71},[68,31551,28039],{"class":74},[68,31553,30381],{"class":1742},[68,31555,31413],{"class":1742},[68,31557,31558],{"class":1742}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[170,31560,31561],{},"最后将镜像推送到远程仓库",[58,31563,31565],{"className":25307,"code":31564,"language":25309,"meta":63,"style":63},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,31566,31567],{"__ignoreMap":63},[68,31568,31569,31571,31573],{"class":70,"line":71},[68,31570,28039],{"class":74},[68,31572,30500],{"class":1742},[68,31574,31558],{"class":1742},[1553,31576,31577],{},"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":63,"searchDepth":82,"depth":82,"links":31579},[31580,31581,31582],{"id":29967,"depth":98,"text":29968},{"id":30196,"depth":98,"text":30197},{"id":31222,"depth":98,"text":31223},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29959,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31589,"title":31590,"body":31591,"description":63,"extension":1565,"meta":31734,"navigation":1567,"path":31735,"seo":31736,"stem":31737,"__hash__":31738},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31592,"toc":31732},[31593,31596,31601,31606,31609,31614,31619,31622,31627,31632,31635,31640,31643,31646,31649,31652,31655,31658,31678,31700,31703,31706,31726,31729],[10,31594,31590],{"id":31595},"_7vscode远程开发",[263,31597,31598],{},[27,31599,31600],{},"插件1：微软Docker工具",[170,31602,31603],{},[801,31604],{"alt":63,"src":31605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[170,31607,31608],{},"docker扩展插件已经进化为container tools了，请安装container tools",[170,31610,31611],{},[801,31612],{"alt":63,"src":31613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[263,31615,31616],{"start":82},[27,31617,31618],{},"插件2：微软Docker远程开发工具",[170,31620,31621],{},"下面这是远程开发的插件。",[170,31623,31624],{},[801,31625],{"alt":63,"src":31626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[170,31628,31629],{},[801,31630],{"alt":63,"src":31631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[170,31633,31634],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[170,31636,31637],{},[801,31638],{"alt":63,"src":31639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[170,31641,31642],{},"安装完拓展之后，vscode进行链接：",[170,31644,31645],{},"1.按ctrl+shift+p",[170,31647,31648],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[170,31650,31651],{},"3.选择目前运行的容器",[170,31653,31654],{},"4.VS Code 会在新窗口中打开并连接到容器",[170,31656,31657],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[58,31659,31661],{"className":25307,"code":31660,"language":25309,"meta":63,"style":63},"docker run -v 主机目录:容器目录 image-name\n",[65,31662,31663],{"__ignoreMap":63},[68,31664,31665,31667,31669,31672,31675],{"class":70,"line":71},[68,31666,28039],{"class":74},[68,31668,28716],{"class":1742},[68,31670,31671],{"class":85}," -v",[68,31673,31674],{"class":1742}," 主机目录:容器目录",[68,31676,31677],{"class":1742}," image-name\n",[58,31679,31681],{"className":25307,"code":31680,"language":25309,"meta":63,"style":63},"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",[65,31682,31683],{"__ignoreMap":63},[68,31684,31685,31687,31689,31692,31694,31697],{"class":70,"line":71},[68,31686,28039],{"class":74},[68,31688,28716],{"class":1742},[68,31690,31691],{"class":85}," -it",[68,31693,31671],{"class":85},[68,31695,31696],{"class":1742}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[68,31698,31699],{"class":1742}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[170,31701,31702],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[170,31704,31705],{},"查看挂载情况：",[58,31707,31709],{"className":25307,"code":31708,"language":25309,"meta":63,"style":63},"mount | grep -i project\n",[65,31710,31711],{"__ignoreMap":63},[68,31712,31713,31716,31718,31721,31723],{"class":70,"line":71},[68,31714,31715],{"class":74},"mount",[68,31717,26595],{"class":316},[68,31719,31720],{"class":74}," grep",[68,31722,27916],{"class":85},[68,31724,31725],{"class":1742}," project\n",[170,31727,31728],{},"也可以通过ls来进行查看",[1553,31730,31731],{},"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":63,"searchDepth":82,"depth":82,"links":31733},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31590,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31740,"title":31741,"body":31742,"description":1564,"extension":1565,"meta":31746,"navigation":1567,"path":31748,"seo":31749,"stem":31750,"__hash__":31751},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31743,"toc":31744},[],{"title":63,"searchDepth":82,"depth":82,"links":31745},[],{"category":31747},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31741,"description":1564},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31753,"title":31754,"body":31755,"description":1564,"extension":1565,"meta":31759,"navigation":1567,"path":31760,"seo":31761,"stem":31762,"__hash__":31763},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31756,"toc":31757},[],{"title":63,"searchDepth":82,"depth":82,"links":31758},[],{"category":31747},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31754,"description":1564},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31765,"title":31766,"body":31767,"description":1564,"extension":1565,"meta":32060,"navigation":1567,"path":32061,"seo":32062,"stem":32063,"__hash__":32064},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31768,"toc":32058},[31769,31772,31780,31795,31800,31851,31854,31860,32047,32052,32055],[10,31770,31766],{"id":31771},"_1验证深度学习环境",[170,31773,31774,31775],{},"关于环境的安装，看",[1867,31776,31779],{"href":31777,"rel":31778},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25350],"Pytorch-->深度学习",[170,31781,31782,31783,31786,31787,31790,31791,31794],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[65,31784,31785],{},"pytorch-cuda=12.4"," 是一个“ ",[268,31788,31789],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[268,31792,31793],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[170,31796,31797],{},[801,31798],{"alt":63,"src":31799},"\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",[58,31801,31803],{"className":25307,"code":31802,"language":25309,"meta":63,"style":63},"# 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",[65,31804,31805,31810],{"__ignoreMap":63},[68,31806,31807],{"class":70,"line":71},[68,31808,31809],{"class":302},"# CUDA 12.4\n",[68,31811,31812,31815,31817,31820,31823,31826,31829,31832,31834,31837,31840,31843,31846,31848],{"class":70,"line":82},[68,31813,31814],{"class":74},"conda",[68,31816,25319],{"class":1742},[68,31818,31819],{"class":1742}," pytorch==",[68,31821,31822],{"class":85},"2.5.1",[68,31824,31825],{"class":1742}," torchvision==",[68,31827,31828],{"class":85},"0.20.1",[68,31830,31831],{"class":1742}," torchaudio==",[68,31833,31822],{"class":85},[68,31835,31836],{"class":1742}," pytorch-cuda=",[68,31838,31839],{"class":85},"12.4",[68,31841,31842],{"class":85}," -c",[68,31844,31845],{"class":1742}," pytorch",[68,31847,31842],{"class":85},[68,31849,31850],{"class":1742}," nvidia\n",[170,31852,31853],{},"）：",[170,31855,31856],{},[1867,31857,31858],{"href":31858,"rel":31859},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25350],[58,31861,31865],{"className":31862,"code":31863,"language":31864,"meta":63,"style":63},"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",[65,31866,31867,31872,31880,31885,31895,31911,31916,31926,31963,31970,31982,31998,32003,32013,32025,32035],{"__ignoreMap":63},[68,31868,31869],{"class":70,"line":71},[68,31870,31871],{"class":302},"# 对深度学习环境进行测试\n",[68,31873,31874,31877],{"class":70,"line":82},[68,31875,31876],{"class":316},"import",[68,31878,31879],{"class":78}," torch\n",[68,31881,31882],{"class":70,"line":98},[68,31883,31884],{"class":302},"# 查看cuda是否被激活\n",[68,31886,31887,31890,31892],{"class":70,"line":104},[68,31888,31889],{"class":78},"flag",[68,31891,1685],{"class":316},[68,31893,31894],{"class":78},"torch.cuda.is_available()\n",[68,31896,31897,31900,31902,31905,31908],{"class":70,"line":112},[68,31898,31899],{"class":85},"print",[68,31901,1640],{"class":78},[68,31903,31904],{"class":1742},"\"cuda:\"",[68,31906,31907],{"class":78},", flag)   ",[68,31909,31910],{"class":302},"#返回true的话说明被激活\n",[68,31912,31913],{"class":70,"line":124},[68,31914,31915],{"class":302},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[68,31917,31918,31921,31923],{"class":70,"line":1496},[68,31919,31920],{"class":78},"ngpu",[68,31922,1685],{"class":316},[68,31924,31925],{"class":85},"1\n",[68,31927,31928,31931,31933,31936,31939,31941,31944,31947,31950,31952,31954,31956,31958,31961],{"class":70,"line":1502},[68,31929,31930],{"class":78},"device",[68,31932,1685],{"class":316},[68,31934,31935],{"class":78},"torch.device(",[68,31937,31938],{"class":1742},"\"cuda:0\"",[68,31940,3195],{"class":316},[68,31942,31943],{"class":78},"(torch.cuda.is_available() ",[68,31945,31946],{"class":316},"and",[68,31948,31949],{"class":78}," ngpu",[68,31951,2587],{"class":316},[68,31953,1248],{"class":85},[68,31955,15202],{"class":78},[68,31957,3192],{"class":316},[68,31959,31960],{"class":1742}," \"cpu\"",[68,31962,1646],{"class":78},[68,31964,31965,31967],{"class":70,"line":1510},[68,31966,31899],{"class":85},[68,31968,31969],{"class":78},"(device)\n",[68,31971,31972,31974,31977,31979],{"class":70,"line":1521},[68,31973,31899],{"class":85},[68,31975,31976],{"class":78},"(torch.cuda.get_device_name(",[68,31978,1248],{"class":85},[68,31980,31981],{"class":78},"))\n",[68,31983,31984,31986,31989,31991,31993,31995],{"class":70,"line":3103},[68,31985,31899],{"class":85},[68,31987,31988],{"class":78},"(torch.rand(",[68,31990,1709],{"class":85},[68,31992,2007],{"class":78},[68,31994,1709],{"class":85},[68,31996,31997],{"class":78},").cuda())\n",[68,31999,32000],{"class":70,"line":3108},[68,32001,32002],{"class":302},"# 查看cuda和cudnn的版本\n",[68,32004,32005,32008,32010],{"class":70,"line":3114},[68,32006,32007],{"class":78},"cuda_version",[68,32009,1685],{"class":316},[68,32011,32012],{"class":78},"torch.version.cuda\n",[68,32014,32015,32017,32019,32022],{"class":70,"line":3119},[68,32016,31899],{"class":85},[68,32018,1640],{"class":78},[68,32020,32021],{"class":1742},"\"cuda version\"",[68,32023,32024],{"class":78},",cuda_version)\n",[68,32026,32027,32030,32032],{"class":70,"line":3133},[68,32028,32029],{"class":78},"cudnn_version",[68,32031,1685],{"class":316},[68,32033,32034],{"class":78},"torch.backends.cudnn.version()\n",[68,32036,32037,32039,32041,32044],{"class":70,"line":3138},[68,32038,31899],{"class":85},[68,32040,1640],{"class":78},[68,32042,32043],{"class":1742},"\"cudnn version\"",[68,32045,32046],{"class":78},",cudnn_version)\n",[170,32048,32049],{},[801,32050],{"alt":63,"src":32051},"\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",[170,32053,32054],{},"cuda:0 指的是一块显卡",[1553,32056,32057],{},"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":63,"searchDepth":82,"depth":82,"links":32059},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31766,"description":1564},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32066,"title":32067,"body":32068,"description":1564,"extension":1565,"meta":51872,"navigation":1567,"path":51873,"seo":51874,"stem":51875,"__hash__":51876},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32069,"toc":51866},[32070,32073,32077,32081,32084,32089,32094,32097,32102,32107,32112,32115,32119,32124,32128,32133,32136,32141,32144,32147,32150,32153,32158,32161,32166,32171,32176,32181,32184,32188,32191,32196,32800,32805,32808,32813,32816,32819,33283,33286,33289,33292,33295,35346,35349,35354,35359,36154,36157,36162,36940,36944,38603,38607,39321,39325,39329,39334,39339,39344,39347,39352,39357,39362,39367,39372,39376,39381,40663,40668,40671,40674,40677,40832,40835,40838,42054,42059,42754,42758,42762,42767,42772,42775,42780,42785,42790,42795,42800,42805,42810,42815,42820,42825,42830,42835,42840,42845,42850,42855,42860,42865,42870,42875,42880,42885,42890,42895,42900,42905,42910,42915,42920,42925,42929,42933,42936,44414,44418,46065,46069,46763,46767,46770,46773,47317,47320,47324,47327,48724,48728,48731,49309,51096,51100,51103,51863],[10,32071,32067],{"id":32072},"_2经典神经网络",[19,32074,32076],{"id":32075},"_21lenet与alexnet","2.1.LeNet与AlexNet",[245,32078,32080],{"id":32079},"_211原理介绍","2.1.1.原理介绍",[170,32082,32083],{},"LeNet-5",[263,32085,32086],{},[27,32087,32088],{},"原理",[170,32090,32091],{},[801,32092],{"alt":63,"src":32093},"\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",[170,32095,32096],{},"B是batch批次；C是channel通道",[263,32098,32099],{"start":82},[27,32100,32101],{},"网络参数详细",[170,32103,32104],{},[801,32105],{"alt":63,"src":32106},"\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",[170,32108,32109],{},[801,32110],{"alt":63,"src":32111},"\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",[170,32113,32114],{},"AlexNet",[263,32116,32117],{},[27,32118,32088],{},[170,32120,32121],{},[801,32122],{"alt":63,"src":32123},"\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",[263,32125,32126],{"start":82},[27,32127,32101],{},[170,32129,32130],{},[801,32131],{"alt":63,"src":32132},"\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",[170,32134,32135],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[170,32137,32138],{},[801,32139],{"alt":63,"src":32140},"\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",[170,32142,32143],{},"数据处理中的图像增强操作:",[170,32145,32146],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[170,32148,32149],{},"①增加数据量，保证训练数据充足；②防止过拟合",[170,32151,32152],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[170,32154,32155],{},[801,32156],{"alt":63,"src":32157},"\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",[170,32159,32160],{},"提升网络精确度的方法：LRN正则化",[170,32162,32163],{},[801,32164],{"alt":63,"src":32165},"\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",[170,32167,32168],{},[801,32169],{"alt":63,"src":32170},"\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",[263,32172,32173],{"start":98},[27,32174,32175],{},"AlexNet的总结",[170,32177,32178],{},[801,32179],{"alt":63,"src":32180},"\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",[170,32182,32183],{},"比LeNet模型要深一丢丢",[245,32185,32187],{"id":32186},"_212代码实现","2.1.2.代码实现",[170,32189,32190],{},"（1）LeNet",[263,32192,32193],{},[27,32194,32195],{},"模型搭建",[58,32197,32199],{"className":31862,"code":32198,"language":31864,"meta":63,"style":63},"# 导入库\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",[65,32200,32201,32206,32212,32217,32230,32235,32247,32251,32271,32276,32281,32292,32297,32316,32320,32325,32374,32386,32391,32420,32455,32482,32487,32499,32504,32524,32543,32562,32566,32571,32581,32598,32609,32624,32635,32646,32661,32676,32687,32694,32698,32712,32717,32740,32745,32750,32755,32759,32764,32769,32779],{"__ignoreMap":63},[68,32202,32203],{"class":70,"line":71},[68,32204,32205],{"class":302},"# 导入库\n",[68,32207,32208,32210],{"class":70,"line":82},[68,32209,31876],{"class":316},[68,32211,31879],{"class":78},[68,32213,32214],{"class":70,"line":98},[68,32215,32216],{"class":302},"# 导入神经网络层\n",[68,32218,32219,32222,32225,32227],{"class":70,"line":104},[68,32220,32221],{"class":316},"from",[68,32223,32224],{"class":78}," torch ",[68,32226,31876],{"class":316},[68,32228,32229],{"class":78}," nn\n",[68,32231,32232],{"class":70,"line":112},[68,32233,32234],{"class":302},"# 导入展示神经网络参数的包\n",[68,32236,32237,32239,32242,32244],{"class":70,"line":124},[68,32238,32221],{"class":316},[68,32240,32241],{"class":78}," torchsummary ",[68,32243,31876],{"class":316},[68,32245,32246],{"class":78}," summary\n",[68,32248,32249],{"class":70,"line":1496},[68,32250,3890],{"emptyLinePlaceholder":1567},[68,32252,32253,32255,32258,32260,32263,32265,32268],{"class":70,"line":1502},[68,32254,16182],{"class":316},[68,32256,32257],{"class":74}," LeNet",[68,32259,1640],{"class":78},[68,32261,32262],{"class":74},"nn",[68,32264,2186],{"class":78},[68,32266,32267],{"class":74},"Module",[68,32269,32270],{"class":78},"):\n",[68,32272,32273],{"class":70,"line":1510},[68,32274,32275],{"class":302},"    # 模型初始化:\n",[68,32277,32278],{"class":70,"line":1521},[68,32279,32280],{"class":302},"    # 定义一些网络层和激活函数\n",[68,32282,32283,32286,32289],{"class":70,"line":3103},[68,32284,32285],{"class":316},"    def",[68,32287,32288],{"class":85}," __init__",[68,32290,32291],{"class":78},"(self):\n",[68,32293,32294],{"class":70,"line":3108},[68,32295,32296],{"class":302},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[68,32298,32299,32302,32305,32308,32311,32314],{"class":70,"line":3114},[68,32300,32301],{"class":85},"        super",[68,32303,32304],{"class":78},"(LeNet,",[68,32306,32307],{"class":85},"self",[68,32309,32310],{"class":78},").",[68,32312,32313],{"class":85},"__init__",[68,32315,3466],{"class":78},[68,32317,32318],{"class":70,"line":3119},[68,32319,3890],{"emptyLinePlaceholder":1567},[68,32321,32322],{"class":70,"line":3133},[68,32323,32324],{"class":302},"        # 定义网络层\n",[68,32326,32327,32330,32333,32335,32338,32341,32343,32345,32347,32350,32352,32354,32356,32359,32361,32363,32365,32368,32370,32372],{"class":70,"line":3138},[68,32328,32329],{"class":85},"        self",[68,32331,32332],{"class":78},".c1",[68,32334,1685],{"class":316},[68,32336,32337],{"class":78},"nn.Conv2d(",[68,32339,32340],{"class":6705},"in_channels",[68,32342,1685],{"class":316},[68,32344,1846],{"class":85},[68,32346,2007],{"class":78},[68,32348,32349],{"class":6705},"out_channels",[68,32351,1685],{"class":316},[68,32353,1973],{"class":85},[68,32355,2007],{"class":78},[68,32357,32358],{"class":6705},"kernel_size",[68,32360,1685],{"class":316},[68,32362,1948],{"class":85},[68,32364,2007],{"class":78},[68,32366,32367],{"class":6705},"padding",[68,32369,1685],{"class":316},[68,32371,1715],{"class":85},[68,32373,1646],{"class":78},[68,32375,32376,32378,32381,32383],{"class":70,"line":3144},[68,32377,32329],{"class":85},[68,32379,32380],{"class":78},".sig",[68,32382,1685],{"class":316},[68,32384,32385],{"class":78},"nn.Sigmoid()\n",[68,32387,32388],{"class":70,"line":3165},[68,32389,32390],{"class":302},"        # 定义池化\n",[68,32392,32393,32395,32398,32400,32403,32405,32407,32409,32411,32414,32416,32418],{"class":70,"line":3170},[68,32394,32329],{"class":85},[68,32396,32397],{"class":78},".s2",[68,32399,1685],{"class":316},[68,32401,32402],{"class":78},"nn.AvgPool2d(",[68,32404,32358],{"class":6705},[68,32406,1685],{"class":316},[68,32408,1715],{"class":85},[68,32410,2007],{"class":78},[68,32412,32413],{"class":6705},"stride",[68,32415,1685],{"class":316},[68,32417,1715],{"class":85},[68,32419,1646],{"class":78},[68,32421,32422,32424,32427,32429,32431,32433,32435,32437,32439,32441,32443,32445,32447,32449,32451,32453],{"class":70,"line":3184},[68,32423,32329],{"class":85},[68,32425,32426],{"class":78},".c3",[68,32428,1685],{"class":316},[68,32430,32337],{"class":78},[68,32432,32340],{"class":6705},[68,32434,1685],{"class":316},[68,32436,1973],{"class":85},[68,32438,2007],{"class":78},[68,32440,32349],{"class":6705},[68,32442,1685],{"class":316},[68,32444,2229],{"class":85},[68,32446,2007],{"class":78},[68,32448,32358],{"class":6705},[68,32450,1685],{"class":316},[68,32452,1948],{"class":85},[68,32454,1646],{"class":78},[68,32456,32457,32459,32462,32464,32466,32468,32470,32472,32474,32476,32478,32480],{"class":70,"line":3189},[68,32458,32329],{"class":85},[68,32460,32461],{"class":78},".s4",[68,32463,1685],{"class":316},[68,32465,32402],{"class":78},[68,32467,32358],{"class":6705},[68,32469,1685],{"class":316},[68,32471,1715],{"class":85},[68,32473,2007],{"class":78},[68,32475,32413],{"class":6705},[68,32477,1685],{"class":316},[68,32479,1715],{"class":85},[68,32481,1646],{"class":78},[68,32483,32484],{"class":70,"line":3218},[68,32485,32486],{"class":302},"        # 定义平展层\n",[68,32488,32489,32491,32494,32496],{"class":70,"line":3223},[68,32490,32329],{"class":85},[68,32492,32493],{"class":78},".flatten",[68,32495,1685],{"class":316},[68,32497,32498],{"class":78},"nn.Flatten()\n",[68,32500,32501],{"class":70,"line":3240},[68,32502,32503],{"class":302},"        # 定义全连接层\n",[68,32505,32506,32508,32511,32513,32516,32518,32520,32522],{"class":70,"line":3245},[68,32507,32329],{"class":85},[68,32509,32510],{"class":78},".f5",[68,32512,1685],{"class":316},[68,32514,32515],{"class":78},"nn.Linear(",[68,32517,5477],{"class":85},[68,32519,2007],{"class":78},[68,32521,2444],{"class":85},[68,32523,1646],{"class":78},[68,32525,32526,32528,32531,32533,32535,32537,32539,32541],{"class":70,"line":3250},[68,32527,32329],{"class":85},[68,32529,32530],{"class":78},".f6",[68,32532,1685],{"class":316},[68,32534,32515],{"class":78},[68,32536,2444],{"class":85},[68,32538,2007],{"class":78},[68,32540,2338],{"class":85},[68,32542,1646],{"class":78},[68,32544,32545,32547,32550,32552,32554,32556,32558,32560],{"class":70,"line":3255},[68,32546,32329],{"class":85},[68,32548,32549],{"class":78},".f7",[68,32551,1685],{"class":316},[68,32553,32515],{"class":78},[68,32555,2338],{"class":85},[68,32557,2007],{"class":78},[68,32559,313],{"class":85},[68,32561,1646],{"class":78},[68,32563,32564],{"class":70,"line":3269},[68,32565,3890],{"emptyLinePlaceholder":1567},[68,32567,32568],{"class":70,"line":3274},[68,32569,32570],{"class":302},"    # 写工具->写前向传播\n",[68,32572,32573,32575,32578],{"class":70,"line":4067},[68,32574,32285],{"class":316},[68,32576,32577],{"class":74}," forward",[68,32579,32580],{"class":78},"(self,x):\n",[68,32582,32583,32586,32588,32590,32593,32595],{"class":70,"line":4081},[68,32584,32585],{"class":78},"        x",[68,32587,1685],{"class":316},[68,32589,32307],{"class":85},[68,32591,32592],{"class":78},".sig(",[68,32594,32307],{"class":85},[68,32596,32597],{"class":78},".c1(x))\n",[68,32599,32600,32602,32604,32606],{"class":70,"line":4089},[68,32601,32585],{"class":78},[68,32603,1685],{"class":316},[68,32605,32307],{"class":85},[68,32607,32608],{"class":78},".s2(x)\n",[68,32610,32611,32613,32615,32617,32619,32621],{"class":70,"line":4094},[68,32612,32585],{"class":78},[68,32614,1685],{"class":316},[68,32616,32307],{"class":85},[68,32618,32592],{"class":78},[68,32620,32307],{"class":85},[68,32622,32623],{"class":78},".c3(x))\n",[68,32625,32626,32628,32630,32632],{"class":70,"line":4100},[68,32627,32585],{"class":78},[68,32629,1685],{"class":316},[68,32631,32307],{"class":85},[68,32633,32634],{"class":78},".s4(x)\n",[68,32636,32637,32639,32641,32643],{"class":70,"line":4106},[68,32638,32585],{"class":78},[68,32640,1685],{"class":316},[68,32642,32307],{"class":85},[68,32644,32645],{"class":78},".flatten(x)\n",[68,32647,32648,32650,32652,32654,32656,32658],{"class":70,"line":4111},[68,32649,32585],{"class":78},[68,32651,1685],{"class":316},[68,32653,32307],{"class":85},[68,32655,32592],{"class":78},[68,32657,32307],{"class":85},[68,32659,32660],{"class":78},".f5(x))\n",[68,32662,32663,32665,32667,32669,32671,32673],{"class":70,"line":9437},[68,32664,32585],{"class":78},[68,32666,1685],{"class":316},[68,32668,32307],{"class":85},[68,32670,32592],{"class":78},[68,32672,32307],{"class":85},[68,32674,32675],{"class":78},".f6(x))\n",[68,32677,32678,32680,32682,32684],{"class":70,"line":9461},[68,32679,32585],{"class":78},[68,32681,1685],{"class":316},[68,32683,32307],{"class":85},[68,32685,32686],{"class":78},".f7(x)\n",[68,32688,32689,32691],{"class":70,"line":9466},[68,32690,16240],{"class":316},[68,32692,32693],{"class":78}," x\n",[68,32695,32696],{"class":70,"line":9472},[68,32697,3890],{"emptyLinePlaceholder":1567},[68,32699,32700,32702,32705,32707,32710],{"class":70,"line":9499},[68,32701,3023],{"class":316},[68,32703,32704],{"class":85}," __name__",[68,32706,4439],{"class":316},[68,32708,32709],{"class":1742},"\"__main__\"",[68,32711,5229],{"class":78},[68,32713,32714],{"class":70,"line":9504},[68,32715,32716],{"class":302},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[68,32718,32719,32722,32724,32726,32729,32731,32734,32736,32738],{"class":70,"line":9510},[68,32720,32721],{"class":78},"    device",[68,32723,1685],{"class":316},[68,32725,31935],{"class":78},[68,32727,32728],{"class":1742},"\"cuda\"",[68,32730,3195],{"class":316},[68,32732,32733],{"class":78}," torch.cuda.is_available() ",[68,32735,3192],{"class":316},[68,32737,31960],{"class":1742},[68,32739,1646],{"class":78},[68,32741,32742],{"class":70,"line":9522},[68,32743,32744],{"class":302},"    # 如果就是想指定用cpu用下方代码:\n",[68,32746,32747],{"class":70,"line":9534},[68,32748,32749],{"class":302},"    # device=\"cpu\"\n",[68,32751,32752],{"class":70,"line":9546},[68,32753,32754],{"class":302},"    # print(device)\n",[68,32756,32757],{"class":70,"line":11204},[68,32758,3890],{"emptyLinePlaceholder":1567},[68,32760,32761],{"class":70,"line":11229},[68,32762,32763],{"class":302},"    # 实例化模型\n",[68,32765,32766],{"class":70,"line":11252},[68,32767,32768],{"class":302},"    # 将模型放到设备中去运行\n",[68,32770,32771,32774,32776],{"class":70,"line":11276},[68,32772,32773],{"class":78},"    model",[68,32775,1685],{"class":316},[68,32777,32778],{"class":78},"LeNet().to(device)\n",[68,32780,32781,32784,32787,32789,32791,32793,32795,32797],{"class":70,"line":11281},[68,32782,32783],{"class":85},"    print",[68,32785,32786],{"class":78},"(summary(model,(",[68,32788,1846],{"class":85},[68,32790,2007],{"class":78},[68,32792,2528],{"class":85},[68,32794,2007],{"class":78},[68,32796,2528],{"class":85},[68,32798,32799],{"class":78},")))\n",[170,32801,32802],{},[801,32803],{"alt":63,"src":32804},"\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",[170,32806,32807],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[263,32809,32810],{"start":82},[27,32811,32812],{},"训练",[170,32814,32815],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[170,32817,32818],{},"在训练之前可以将数据展示看一下",[58,32820,32822],{"className":31862,"code":32821,"language":31864,"meta":63,"style":63},"# 建立画图的函数，用于展示数据\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",[65,32823,32824,32829,32834,32846,32858,32871,32876,32888,32893,32905,32910,32922,32926,32930,32951,32963,32968,32989,33000,33004,33009,33027,33038,33043,33054,33059,33070,33074,33079,33094,33107,33112,33117,33130,33143,33156,33161,33165,33170,33190,33207,33227,33240,33253,33263,33278],{"__ignoreMap":63},[68,32825,32826],{"class":70,"line":71},[68,32827,32828],{"class":302},"# 建立画图的函数，用于展示数据\n",[68,32830,32831],{"class":70,"line":82},[68,32832,32833],{"class":302},"# torchvision中包含很多内置的数据集\n",[68,32835,32836,32838,32841,32843],{"class":70,"line":98},[68,32837,32221],{"class":316},[68,32839,32840],{"class":78}," sklearn.externals.array_api_compat.torch ",[68,32842,31876],{"class":316},[68,32844,32845],{"class":78}," squeeze\n",[68,32847,32848,32850,32853,32855],{"class":70,"line":104},[68,32849,32221],{"class":316},[68,32851,32852],{"class":78}," torchvision.datasets ",[68,32854,31876],{"class":316},[68,32856,32857],{"class":78}," FashionMNIST\n",[68,32859,32860,32862,32865,32868],{"class":70,"line":112},[68,32861,31876],{"class":316},[68,32863,32864],{"class":78}," numpy ",[68,32866,32867],{"class":316},"as",[68,32869,32870],{"class":78}," np\n",[68,32872,32873],{"class":70,"line":124},[68,32874,32875],{"class":302},"# 引入处理数据集的包\n",[68,32877,32878,32880,32883,32885],{"class":70,"line":1496},[68,32879,32221],{"class":316},[68,32881,32882],{"class":78}," torchvision ",[68,32884,31876],{"class":316},[68,32886,32887],{"class":78}," transforms\n",[68,32889,32890],{"class":70,"line":1502},[68,32891,32892],{"class":302},"# 从torch库中引入数据处理的包\n",[68,32894,32895,32897,32900,32902],{"class":70,"line":1510},[68,32896,31876],{"class":316},[68,32898,32899],{"class":78}," torch.utils.data ",[68,32901,32867],{"class":316},[68,32903,32904],{"class":78}," Data\n",[68,32906,32907],{"class":70,"line":1521},[68,32908,32909],{"class":302},"# 导入画图的库\n",[68,32911,32912,32914,32917,32919],{"class":70,"line":3103},[68,32913,31876],{"class":316},[68,32915,32916],{"class":78}," matplotlib.pyplot ",[68,32918,32867],{"class":316},[68,32920,32921],{"class":78}," plt\n",[68,32923,32924],{"class":70,"line":3108},[68,32925,3890],{"emptyLinePlaceholder":1567},[68,32927,32928],{"class":70,"line":3114},[68,32929,3890],{"emptyLinePlaceholder":1567},[68,32931,32932,32935,32937,32940,32943,32945,32948],{"class":70,"line":3119},[68,32933,32934],{"class":78},"train_data",[68,32936,1685],{"class":316},[68,32938,32939],{"class":78},"FashionMNIST(",[68,32941,32942],{"class":6705},"root",[68,32944,1685],{"class":316},[68,32946,32947],{"class":1742},"'.\u002Fdata'",[68,32949,32950],{"class":78},",\n",[68,32952,32953,32956,32958,32961],{"class":70,"line":3133},[68,32954,32955],{"class":6705},"                        train",[68,32957,1685],{"class":316},[68,32959,32960],{"class":85},"True",[68,32962,32950],{"class":78},[68,32964,32965],{"class":70,"line":3138},[68,32966,32967],{"class":302},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[68,32969,32970,32973,32975,32978,32981,32983,32986],{"class":70,"line":3144},[68,32971,32972],{"class":6705},"                        transform",[68,32974,1685],{"class":316},[68,32976,32977],{"class":78},"transforms.Compose([transforms.Resize(",[68,32979,32980],{"class":6705},"size",[68,32982,1685],{"class":316},[68,32984,32985],{"class":85},"224",[68,32987,32988],{"class":78},"),transforms.ToTensor()]),\n",[68,32990,32991,32994,32996,32998],{"class":70,"line":3165},[68,32992,32993],{"class":6705},"                        download",[68,32995,1685],{"class":316},[68,32997,32960],{"class":85},[68,32999,1646],{"class":78},[68,33001,33002],{"class":70,"line":3170},[68,33003,3890],{"emptyLinePlaceholder":1567},[68,33005,33006],{"class":70,"line":3184},[68,33007,33008],{"class":302},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[68,33010,33011,33014,33016,33019,33022,33024],{"class":70,"line":3189},[68,33012,33013],{"class":78},"train_loader",[68,33015,1685],{"class":316},[68,33017,33018],{"class":78},"Data.DataLoader(",[68,33020,33021],{"class":6705},"dataset",[68,33023,1685],{"class":316},[68,33025,33026],{"class":78},"train_data,\n",[68,33028,33029,33032,33034,33036],{"class":70,"line":3218},[68,33030,33031],{"class":6705},"                             batch_size",[68,33033,1685],{"class":316},[68,33035,1832],{"class":85},[68,33037,32950],{"class":78},[68,33039,33040],{"class":70,"line":3223},[68,33041,33042],{"class":302},"                             # 数据是否打乱\n",[68,33044,33045,33048,33050,33052],{"class":70,"line":3240},[68,33046,33047],{"class":6705},"                             shuffle",[68,33049,1685],{"class":316},[68,33051,32960],{"class":85},[68,33053,32950],{"class":78},[68,33055,33056],{"class":70,"line":3245},[68,33057,33058],{"class":302},"                             # 规定加载数据的进程\n",[68,33060,33061,33064,33066,33068],{"class":70,"line":3250},[68,33062,33063],{"class":6705},"                             num_workers",[68,33065,1685],{"class":316},[68,33067,1248],{"class":85},[68,33069,1646],{"class":78},[68,33071,33072],{"class":70,"line":3255},[68,33073,3890],{"emptyLinePlaceholder":1567},[68,33075,33076],{"class":70,"line":3269},[68,33077,33078],{"class":302},"# 获得一个batch的数据\n",[68,33080,33081,33083,33086,33088,33091],{"class":70,"line":3274},[68,33082,4515],{"class":316},[68,33084,33085],{"class":78}," step,(b_x,b_y) ",[68,33087,27529],{"class":316},[68,33089,33090],{"class":85}," enumerate",[68,33092,33093],{"class":78},"(train_loader):\n",[68,33095,33096,33098,33101,33103,33105],{"class":70,"line":4067},[68,33097,4591],{"class":316},[68,33099,33100],{"class":78}," step ",[68,33102,2587],{"class":316},[68,33104,5583],{"class":85},[68,33106,5229],{"class":78},[68,33108,33109],{"class":70,"line":4081},[68,33110,33111],{"class":316},"        break\n",[68,33113,33114],{"class":70,"line":4089},[68,33115,33116],{"class":302},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[68,33118,33119,33122,33124,33127],{"class":70,"line":4094},[68,33120,33121],{"class":78},"batch_x",[68,33123,1685],{"class":316},[68,33125,33126],{"class":78},"b_x.squeeze().numpy()  ",[68,33128,33129],{"class":302},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[68,33131,33132,33135,33137,33140],{"class":70,"line":4100},[68,33133,33134],{"class":78},"batch_y",[68,33136,1685],{"class":316},[68,33138,33139],{"class":78},"b_y.numpy()   ",[68,33141,33142],{"class":302},"#将张量转换成功numpy数组\n",[68,33144,33145,33148,33150,33153],{"class":70,"line":4106},[68,33146,33147],{"class":78},"class_label",[68,33149,1685],{"class":316},[68,33151,33152],{"class":78},"train_data.classes  ",[68,33154,33155],{"class":302},"#训练集标签\n",[68,33157,33158],{"class":70,"line":4111},[68,33159,33160],{"class":302},"# print(class_label)\n",[68,33162,33163],{"class":70,"line":9437},[68,33164,3890],{"emptyLinePlaceholder":1567},[68,33166,33167],{"class":70,"line":9461},[68,33168,33169],{"class":302},"# 可视化一个batch的图像\n",[68,33171,33172,33175,33178,33180,33182,33184,33186,33188],{"class":70,"line":9466},[68,33173,33174],{"class":78},"plt.figure(",[68,33176,33177],{"class":6705},"figsize",[68,33179,1685],{"class":316},[68,33181,1640],{"class":78},[68,33183,2126],{"class":85},[68,33185,2007],{"class":78},[68,33187,1948],{"class":85},[68,33189,31981],{"class":78},[68,33191,33192,33194,33197,33199,33202,33204],{"class":70,"line":9472},[68,33193,4515],{"class":316},[68,33195,33196],{"class":78}," ii ",[68,33198,27529],{"class":316},[68,33200,33201],{"class":78}," np.arange(",[68,33203,8847],{"class":85},[68,33205,33206],{"class":78},"(batch_y)):\n",[68,33208,33209,33212,33214,33216,33218,33221,33223,33225],{"class":70,"line":9499},[68,33210,33211],{"class":78},"    plt.subplot(",[68,33213,1922],{"class":85},[68,33215,2007],{"class":78},[68,33217,2229],{"class":85},[68,33219,33220],{"class":78},",ii ",[68,33222,2109],{"class":316},[68,33224,26604],{"class":85},[68,33226,1646],{"class":78},[68,33228,33229,33232,33235,33237],{"class":70,"line":9504},[68,33230,33231],{"class":78},"    plt.imshow(batch_x[ii,:,:],",[68,33233,33234],{"class":6705},"cmap",[68,33236,1685],{"class":316},[68,33238,33239],{"class":78},"plt.cm.gray)\n",[68,33241,33242,33245,33247,33249,33251],{"class":70,"line":9510},[68,33243,33244],{"class":78},"    plt.title(class_label[batch_y[ii]],",[68,33246,32980],{"class":6705},[68,33248,1685],{"class":316},[68,33250,313],{"class":85},[68,33252,1646],{"class":78},[68,33254,33255,33258,33261],{"class":70,"line":9522},[68,33256,33257],{"class":78},"    plt.axis(",[68,33259,33260],{"class":1742},"\"off\"",[68,33262,1646],{"class":78},[68,33264,33265,33268,33271,33273,33276],{"class":70,"line":9534},[68,33266,33267],{"class":78},"    plt.subplots_adjust(",[68,33269,33270],{"class":6705},"wspace",[68,33272,1685],{"class":316},[68,33274,33275],{"class":85},"0.05",[68,33277,1646],{"class":78},[68,33279,33280],{"class":70,"line":9546},[68,33281,33282],{"class":78},"plt.show()\n",[170,33284,33285],{},"用matplotlib进行展示的过程可以后续再补",[170,33287,33288],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[170,33290,33291],{},"训练次数就是按照批次过整个训练集数据的次数",[170,33293,33294],{},"模型训练：",[58,33296,33298],{"className":31862,"code":33297,"language":31864,"meta":63,"style":63},"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",[65,33299,33300,33307,33314,33318,33330,33336,33347,33357,33367,33377,33387,33392,33404,33414,33418,33422,33427,33438,33451,33462,33479,33490,33529,33545,33557,33568,33573,33584,33600,33611,33622,33633,33640,33644,33649,33654,33658,33663,33673,33694,33698,33702,33707,33712,33717,33737,33741,33746,33756,33760,33765,33774,33779,33784,33789,33799,33803,33807,33812,33817,33827,33832,33842,33847,33856,33861,33870,33875,33884,33888,33893,33903,33907,33911,33916,33931,33959,33974,33978,33983,33988,33997,34002,34011,34016,34025,34030,34039,34044,34053,34058,34067,34072,34085,34090,34100,34105,34115,34121,34127,34133,34139,34150,34156,34176,34182,34193,34199,34205,34211,34217,34223,34229,34235,34255,34261,34277,34283,34297,34303,34318,34324,34333,34339,34348,34354,34360,34369,34375,34386,34392,34411,34417,34428,34434,34454,34470,34476,34490,34496,34502,34513,34519,34525,34535,34541,34552,34558,34568,34573,34579,34628,34675,34680,34686,34705,34711,34731,34737,34743,34753,34758,34764,34780,34825,34831,34837,34843,34854,34860,34866,34872,34890,34904,34913,34922,34931,34940,34946,34952,34960,34965,34971,34982,34988,35008,35014,35020,35026,35043,35049,35055,35061,35067,35073,35100,35124,35130,35136,35142,35153,35164,35170,35187,35210,35233,35239,35244,35253,35263,35269,35274,35280,35293,35299,35310,35321,35340],{"__ignoreMap":63},[68,33301,33302,33304],{"class":70,"line":71},[68,33303,31876],{"class":316},[68,33305,33306],{"class":78}," copy\n",[68,33308,33309,33311],{"class":70,"line":82},[68,33310,31876],{"class":316},[68,33312,33313],{"class":78}," time\n",[68,33315,33316],{"class":70,"line":98},[68,33317,3890],{"emptyLinePlaceholder":1567},[68,33319,33320,33322,33325,33327],{"class":70,"line":104},[68,33321,31876],{"class":316},[68,33323,33324],{"class":78}," pandas ",[68,33326,32867],{"class":316},[68,33328,33329],{"class":78}," pd\n",[68,33331,33332,33334],{"class":70,"line":112},[68,33333,31876],{"class":316},[68,33335,31879],{"class":78},[68,33337,33338,33340,33342,33344],{"class":70,"line":124},[68,33339,32221],{"class":316},[68,33341,32899],{"class":78},[68,33343,31876],{"class":316},[68,33345,33346],{"class":78}," Dataset\n",[68,33348,33349,33351,33353,33355],{"class":70,"line":1496},[68,33350,32221],{"class":316},[68,33352,32852],{"class":78},[68,33354,31876],{"class":316},[68,33356,32857],{"class":78},[68,33358,33359,33361,33363,33365],{"class":70,"line":1502},[68,33360,32221],{"class":316},[68,33362,32882],{"class":78},[68,33364,31876],{"class":316},[68,33366,32887],{"class":78},[68,33368,33369,33371,33373,33375],{"class":70,"line":1510},[68,33370,31876],{"class":316},[68,33372,32899],{"class":78},[68,33374,32867],{"class":316},[68,33376,32904],{"class":78},[68,33378,33379,33381,33383,33385],{"class":70,"line":1521},[68,33380,31876],{"class":316},[68,33382,32916],{"class":78},[68,33384,32867],{"class":316},[68,33386,32921],{"class":78},[68,33388,33389],{"class":70,"line":3103},[68,33390,33391],{"class":302},"# 导入模型\n",[68,33393,33394,33396,33399,33401],{"class":70,"line":3108},[68,33395,32221],{"class":316},[68,33397,33398],{"class":78}," model ",[68,33400,31876],{"class":316},[68,33402,33403],{"class":78}," LeNet\n",[68,33405,33406,33408,33410,33412],{"class":70,"line":3114},[68,33407,32221],{"class":316},[68,33409,32224],{"class":78},[68,33411,31876],{"class":316},[68,33413,32229],{"class":78},[68,33415,33416],{"class":70,"line":3119},[68,33417,3890],{"emptyLinePlaceholder":1567},[68,33419,33420],{"class":70,"line":3133},[68,33421,3890],{"emptyLinePlaceholder":1567},[68,33423,33424],{"class":70,"line":3138},[68,33425,33426],{"class":302},"# 处理训练集与验证集函数--->划分数据集\n",[68,33428,33429,33432,33435],{"class":70,"line":3144},[68,33430,33431],{"class":316},"def",[68,33433,33434],{"class":74}," train_val_data_process",[68,33436,33437],{"class":78},"():\n",[68,33439,33440,33443,33445,33447,33449],{"class":70,"line":3165},[68,33441,33442],{"class":78},"    train_data",[68,33444,1685],{"class":316},[68,33446,32939],{"class":78},[68,33448,32947],{"class":1742},[68,33450,32950],{"class":78},[68,33452,33453,33456,33458,33460],{"class":70,"line":3170},[68,33454,33455],{"class":6705},"                            train",[68,33457,1685],{"class":316},[68,33459,32960],{"class":85},[68,33461,32950],{"class":78},[68,33463,33464,33467,33469,33471,33473,33475,33477],{"class":70,"line":3184},[68,33465,33466],{"class":6705},"                            transform",[68,33468,1685],{"class":316},[68,33470,32977],{"class":78},[68,33472,32980],{"class":6705},[68,33474,1685],{"class":316},[68,33476,2528],{"class":85},[68,33478,32988],{"class":78},[68,33480,33481,33484,33486,33488],{"class":70,"line":3189},[68,33482,33483],{"class":6705},"                            download",[68,33485,1685],{"class":316},[68,33487,32960],{"class":85},[68,33489,1646],{"class":78},[68,33491,33492,33495,33497,33500,33503,33505,33508,33510,33512,33515,33517,33519,33522,33524,33526],{"class":70,"line":3218},[68,33493,33494],{"class":78},"    train_data,val_data",[68,33496,1685],{"class":316},[68,33498,33499],{"class":78},"Data.random_split(train_data,[",[68,33501,33502],{"class":85},"round",[68,33504,1640],{"class":78},[68,33506,33507],{"class":85},"0.8",[68,33509,2083],{"class":316},[68,33511,8847],{"class":85},[68,33513,33514],{"class":78},"(train_data)),",[68,33516,33502],{"class":85},[68,33518,1640],{"class":78},[68,33520,33521],{"class":85},"0.2",[68,33523,2083],{"class":316},[68,33525,8847],{"class":85},[68,33527,33528],{"class":78},"(train_data))])\n",[68,33530,33531,33534,33536,33539,33541,33543],{"class":70,"line":3223},[68,33532,33533],{"class":78},"    train_dataloader ",[68,33535,1685],{"class":316},[68,33537,33538],{"class":78}," Data.DataLoader(",[68,33540,33021],{"class":6705},[68,33542,1685],{"class":316},[68,33544,33026],{"class":78},[68,33546,33547,33550,33552,33555],{"class":70,"line":3240},[68,33548,33549],{"class":6705},"                                       batch_size",[68,33551,1685],{"class":316},[68,33553,33554],{"class":85},"128",[68,33556,32950],{"class":78},[68,33558,33559,33562,33564,33566],{"class":70,"line":3245},[68,33560,33561],{"class":6705},"                                       shuffle",[68,33563,1685],{"class":316},[68,33565,32960],{"class":85},[68,33567,32950],{"class":78},[68,33569,33570],{"class":70,"line":3250},[68,33571,33572],{"class":302},"                                       # 规定8个进程\n",[68,33574,33575,33578,33580,33582],{"class":70,"line":3255},[68,33576,33577],{"class":6705},"                                       num_workers",[68,33579,1685],{"class":316},[68,33581,2024],{"class":85},[68,33583,1646],{"class":78},[68,33585,33586,33589,33591,33593,33595,33597],{"class":70,"line":3269},[68,33587,33588],{"class":78},"    val_dataloader",[68,33590,1685],{"class":316},[68,33592,33018],{"class":78},[68,33594,33021],{"class":6705},[68,33596,1685],{"class":316},[68,33598,33599],{"class":78},"val_data,\n",[68,33601,33602,33605,33607,33609],{"class":70,"line":3274},[68,33603,33604],{"class":6705},"                                   batch_size",[68,33606,1685],{"class":316},[68,33608,33554],{"class":85},[68,33610,32950],{"class":78},[68,33612,33613,33616,33618,33620],{"class":70,"line":4067},[68,33614,33615],{"class":6705},"                                   shuffle",[68,33617,1685],{"class":316},[68,33619,32960],{"class":85},[68,33621,32950],{"class":78},[68,33623,33624,33627,33629,33631],{"class":70,"line":4081},[68,33625,33626],{"class":6705},"                                   num_workers",[68,33628,1685],{"class":316},[68,33630,2024],{"class":85},[68,33632,1646],{"class":78},[68,33634,33635,33637],{"class":70,"line":4089},[68,33636,5580],{"class":316},[68,33638,33639],{"class":78}," train_dataloader,val_dataloader\n",[68,33641,33642],{"class":70,"line":4094},[68,33643,3890],{"emptyLinePlaceholder":1567},[68,33645,33646],{"class":70,"line":4100},[68,33647,33648],{"class":302},"# 验证是否出错\n",[68,33650,33651],{"class":70,"line":4106},[68,33652,33653],{"class":302},"# train_val_data_process()\n",[68,33655,33656],{"class":70,"line":4111},[68,33657,3890],{"emptyLinePlaceholder":1567},[68,33659,33660],{"class":70,"line":9437},[68,33661,33662],{"class":302},"# 定义模型训练函数\n",[68,33664,33665,33667,33670],{"class":70,"line":9461},[68,33666,33431],{"class":316},[68,33668,33669],{"class":74}," train_model_process",[68,33671,33672],{"class":78},"(model,train_dataloader,val_dataloader,num_epochs):\n",[68,33674,33675,33677,33679,33681,33683,33685,33687,33689,33692],{"class":70,"line":9466},[68,33676,32721],{"class":78},[68,33678,1685],{"class":316},[68,33680,31935],{"class":78},[68,33682,32728],{"class":1742},[68,33684,3195],{"class":316},[68,33686,32733],{"class":78},[68,33688,3192],{"class":316},[68,33690,33691],{"class":1742}," 'cpu'",[68,33693,1646],{"class":78},[68,33695,33696],{"class":70,"line":9472},[68,33697,3890],{"emptyLinePlaceholder":1567},[68,33699,33700],{"class":70,"line":9499},[68,33701,3890],{"emptyLinePlaceholder":1567},[68,33703,33704],{"class":70,"line":9504},[68,33705,33706],{"class":302},"    # 定义优化器\n",[68,33708,33709],{"class":70,"line":9510},[68,33710,33711],{"class":302},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[68,33713,33714],{"class":70,"line":9522},[68,33715,33716],{"class":302},"    # lr为学习率\n",[68,33718,33719,33722,33724,33727,33730,33732,33735],{"class":70,"line":9534},[68,33720,33721],{"class":78},"    optimizer",[68,33723,1685],{"class":316},[68,33725,33726],{"class":78},"torch.optim.Adam(model.parameters(),",[68,33728,33729],{"class":6705},"lr",[68,33731,1685],{"class":316},[68,33733,33734],{"class":85},"0.001",[68,33736,1646],{"class":78},[68,33738,33739],{"class":70,"line":9546},[68,33740,3890],{"emptyLinePlaceholder":1567},[68,33742,33743],{"class":70,"line":11204},[68,33744,33745],{"class":302},"    # 定义损失函数使用交叉熵损失函数\n",[68,33747,33748,33751,33753],{"class":70,"line":11229},[68,33749,33750],{"class":78},"    criterion",[68,33752,1685],{"class":316},[68,33754,33755],{"class":78},"nn.CrossEntropyLoss()\n",[68,33757,33758],{"class":70,"line":11252},[68,33759,3890],{"emptyLinePlaceholder":1567},[68,33761,33762],{"class":70,"line":11276},[68,33763,33764],{"class":302},"    # 将模型放到GPU中进行训练\n",[68,33766,33767,33769,33771],{"class":70,"line":11281},[68,33768,32773],{"class":78},[68,33770,1685],{"class":316},[68,33772,33773],{"class":78},"model.to(device)\n",[68,33775,33776],{"class":70,"line":11286},[68,33777,33778],{"class":302},"    # 复制当前模型的参数\n",[68,33780,33781],{"class":70,"line":11291},[68,33782,33783],{"class":302},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[68,33785,33786],{"class":70,"line":11300},[68,33787,33788],{"class":302},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[68,33790,33791,33794,33796],{"class":70,"line":11305},[68,33792,33793],{"class":78},"    best_model_wts",[68,33795,1685],{"class":316},[68,33797,33798],{"class":78},"copy.deepcopy(model.state_dict())\n",[68,33800,33801],{"class":70,"line":11311},[68,33802,3890],{"emptyLinePlaceholder":1567},[68,33804,33805],{"class":70,"line":11332},[68,33806,3890],{"emptyLinePlaceholder":1567},[68,33808,33809],{"class":70,"line":11338},[68,33810,33811],{"class":302},"    # 初始化参数\n",[68,33813,33814],{"class":70,"line":11352},[68,33815,33816],{"class":302},"    # 最高准确度\n",[68,33818,33819,33822,33824],{"class":70,"line":11358},[68,33820,33821],{"class":78},"    best_acc",[68,33823,1685],{"class":316},[68,33825,33826],{"class":85},"0.0\n",[68,33828,33829],{"class":70,"line":11385},[68,33830,33831],{"class":302},"    # 训练集损失列表\n",[68,33833,33834,33837,33839],{"class":70,"line":11394},[68,33835,33836],{"class":78},"    train_loss_all",[68,33838,1685],{"class":316},[68,33840,33841],{"class":78},"[]\n",[68,33843,33844],{"class":70,"line":11400},[68,33845,33846],{"class":302},"    # 验证集函数列表\n",[68,33848,33849,33852,33854],{"class":70,"line":11408},[68,33850,33851],{"class":78},"    val_loss_all",[68,33853,1685],{"class":316},[68,33855,33841],{"class":78},[68,33857,33858],{"class":70,"line":11413},[68,33859,33860],{"class":302},"    # 训练集准确度列表\n",[68,33862,33863,33866,33868],{"class":70,"line":18091},[68,33864,33865],{"class":78},"    train_acc_all",[68,33867,1685],{"class":316},[68,33869,33841],{"class":78},[68,33871,33872],{"class":70,"line":18097},[68,33873,33874],{"class":302},"    # 验证集准确度列表\n",[68,33876,33877,33880,33882],{"class":70,"line":18120},[68,33878,33879],{"class":78},"    val_acc_all",[68,33881,1685],{"class":316},[68,33883,33841],{"class":78},[68,33885,33886],{"class":70,"line":18126},[68,33887,3890],{"emptyLinePlaceholder":1567},[68,33889,33890],{"class":70,"line":18149},[68,33891,33892],{"class":302},"    # 保存当前时间--->方便看每轮训练的时间\n",[68,33894,33895,33898,33900],{"class":70,"line":18163},[68,33896,33897],{"class":78},"    since",[68,33899,1685],{"class":316},[68,33901,33902],{"class":78},"time.time()\n",[68,33904,33905],{"class":70,"line":18183},[68,33906,3890],{"emptyLinePlaceholder":1567},[68,33908,33909],{"class":70,"line":18189},[68,33910,3890],{"emptyLinePlaceholder":1567},[68,33912,33913],{"class":70,"line":18200},[68,33914,33915],{"class":302},"    # 准备工作完成--->开始训练模型\n",[68,33917,33918,33920,33923,33925,33928],{"class":70,"line":18223},[68,33919,4691],{"class":316},[68,33921,33922],{"class":78}," epoch ",[68,33924,27529],{"class":316},[68,33926,33927],{"class":85}," range",[68,33929,33930],{"class":78},"(num_epochs):\n",[68,33932,33933,33936,33938,33941,33944,33946,33948,33950,33953,33955,33957],{"class":70,"line":18245},[68,33934,33935],{"class":85},"        print",[68,33937,1640],{"class":78},[68,33939,33940],{"class":1742},"\"Epoch ",[68,33942,33943],{"class":85},"{}",[68,33945,2212],{"class":1742},[68,33947,33943],{"class":85},[68,33949,1880],{"class":1742},[68,33951,33952],{"class":78},".format(epoch,num_epochs",[68,33954,2160],{"class":316},[68,33956,1846],{"class":85},[68,33958,31981],{"class":78},[68,33960,33961,33963,33965,33968,33970,33972],{"class":70,"line":18250},[68,33962,33935],{"class":85},[68,33964,1640],{"class":78},[68,33966,33967],{"class":1742},"\"-\"",[68,33969,2083],{"class":316},[68,33971,313],{"class":85},[68,33973,1646],{"class":78},[68,33975,33976],{"class":70,"line":18256},[68,33977,3890],{"emptyLinePlaceholder":1567},[68,33979,33980],{"class":70,"line":18270},[68,33981,33982],{"class":302},"        # 初始化参数\n",[68,33984,33985],{"class":70,"line":18283},[68,33986,33987],{"class":302},"        # 训练集损失函数\n",[68,33989,33990,33993,33995],{"class":70,"line":18288},[68,33991,33992],{"class":78},"        train_loss",[68,33994,1685],{"class":316},[68,33996,33826],{"class":85},[68,33998,33999],{"class":70,"line":18302},[68,34000,34001],{"class":302},"        # 训练集准确度\n",[68,34003,34004,34007,34009],{"class":70,"line":18307},[68,34005,34006],{"class":78},"        train_corrects",[68,34008,1685],{"class":316},[68,34010,4575],{"class":85},[68,34012,34013],{"class":70,"line":18313},[68,34014,34015],{"class":302},"        # 验证集损失函数\n",[68,34017,34018,34021,34023],{"class":70,"line":18318},[68,34019,34020],{"class":78},"        val_loss",[68,34022,1685],{"class":316},[68,34024,33826],{"class":85},[68,34026,34027],{"class":70,"line":18332},[68,34028,34029],{"class":302},"        # 验证集准确度\n",[68,34031,34032,34035,34037],{"class":70,"line":18337},[68,34033,34034],{"class":78},"        val_corrects",[68,34036,1685],{"class":316},[68,34038,4575],{"class":85},[68,34040,34041],{"class":70,"line":18342},[68,34042,34043],{"class":302},"        # 训练集样本数量\n",[68,34045,34046,34049,34051],{"class":70,"line":18356},[68,34047,34048],{"class":78},"        train_num",[68,34050,1685],{"class":316},[68,34052,4575],{"class":85},[68,34054,34055],{"class":70,"line":18368},[68,34056,34057],{"class":302},"        # 验证集样本数量\n",[68,34059,34060,34063,34065],{"class":70,"line":18373},[68,34061,34062],{"class":78},"        val_num",[68,34064,1685],{"class":316},[68,34066,4575],{"class":85},[68,34068,34069],{"class":70,"line":18386},[68,34070,34071],{"class":302},"        # 将数据放到设备,并开始训练\n",[68,34073,34074,34076,34078,34080,34082],{"class":70,"line":18391},[68,34075,4893],{"class":316},[68,34077,33085],{"class":78},[68,34079,27529],{"class":316},[68,34081,33090],{"class":85},[68,34083,34084],{"class":78},"(train_dataloader):\n",[68,34086,34087],{"class":70,"line":18396},[68,34088,34089],{"class":302},"            # 将特征放入到训练设备\n",[68,34091,34092,34095,34097],{"class":70,"line":18401},[68,34093,34094],{"class":78},"            b_x",[68,34096,1685],{"class":316},[68,34098,34099],{"class":78},"b_x.to(device)\n",[68,34101,34102],{"class":70,"line":18414},[68,34103,34104],{"class":302},"            # 将标签放入到训练设备当中\n",[68,34106,34107,34110,34112],{"class":70,"line":18419},[68,34108,34109],{"class":78},"            b_y",[68,34111,1685],{"class":316},[68,34113,34114],{"class":78},"b_y.to(device)\n",[68,34116,34118],{"class":70,"line":34117},98,[68,34119,34120],{"class":302},"            # 设置模型为训练模式\n",[68,34122,34124],{"class":70,"line":34123},99,[68,34125,34126],{"class":78},"            model.train()\n",[68,34128,34130],{"class":70,"line":34129},100,[68,34131,34132],{"class":302},"            # 将数据放到模型当中,开始前向传播\n",[68,34134,34136],{"class":70,"line":34135},101,[68,34137,34138],{"class":302},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[68,34140,34142,34145,34147],{"class":70,"line":34141},102,[68,34143,34144],{"class":78},"            output",[68,34146,1685],{"class":316},[68,34148,34149],{"class":78},"model(b_x)\n",[68,34151,34153],{"class":70,"line":34152},103,[68,34154,34155],{"class":302},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[68,34157,34159,34162,34164,34167,34170,34172,34174],{"class":70,"line":34158},104,[68,34160,34161],{"class":78},"            pre_lab",[68,34163,1685],{"class":316},[68,34165,34166],{"class":78},"torch.argmax(output,",[68,34168,34169],{"class":6705},"dim",[68,34171,1685],{"class":316},[68,34173,1846],{"class":85},[68,34175,1646],{"class":78},[68,34177,34179],{"class":70,"line":34178},105,[68,34180,34181],{"class":302},"            # 计算每一个batch的损失函数\n",[68,34183,34185,34188,34190],{"class":70,"line":34184},106,[68,34186,34187],{"class":78},"            loss",[68,34189,1685],{"class":316},[68,34191,34192],{"class":78},"criterion(output,b_y)\n",[68,34194,34196],{"class":70,"line":34195},107,[68,34197,34198],{"class":302},"            # 将梯度初始化为0\n",[68,34200,34202],{"class":70,"line":34201},108,[68,34203,34204],{"class":78},"            optimizer.zero_grad()\n",[68,34206,34208],{"class":70,"line":34207},109,[68,34209,34210],{"class":302},"            # 梯度置为0后再进行反向传播\n",[68,34212,34214],{"class":70,"line":34213},110,[68,34215,34216],{"class":78},"            loss.backward()\n",[68,34218,34220],{"class":70,"line":34219},111,[68,34221,34222],{"class":302},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[68,34224,34226],{"class":70,"line":34225},112,[68,34227,34228],{"class":78},"            optimizer.step()\n",[68,34230,34232],{"class":70,"line":34231},113,[68,34233,34234],{"class":302},"            # loss.item()指的是batch的平均损失\n",[68,34236,34238,34241,34243,34246,34248,34251,34253],{"class":70,"line":34237},114,[68,34239,34240],{"class":78},"            train_loss",[68,34242,10965],{"class":316},[68,34244,34245],{"class":78},"loss.item()",[68,34247,2083],{"class":316},[68,34249,34250],{"class":78},"b_x.size(",[68,34252,1248],{"class":85},[68,34254,1646],{"class":78},[68,34256,34258],{"class":70,"line":34257},115,[68,34259,34260],{"class":302},"            # 计算每个批次中正确预测的数量\n",[68,34262,34264,34267,34269,34272,34274],{"class":70,"line":34263},116,[68,34265,34266],{"class":78},"            train_corrects",[68,34268,10965],{"class":316},[68,34270,34271],{"class":78},"torch.sum(pre_lab",[68,34273,4439],{"class":316},[68,34275,34276],{"class":78},"b_y.data)\n",[68,34278,34280],{"class":70,"line":34279},117,[68,34281,34282],{"class":302},"            # 计算目前为止一共处理了多少样本\n",[68,34284,34286,34289,34291,34293,34295],{"class":70,"line":34285},118,[68,34287,34288],{"class":78},"            train_num",[68,34290,10965],{"class":316},[68,34292,34250],{"class":78},[68,34294,1248],{"class":85},[68,34296,1646],{"class":78},[68,34298,34300],{"class":70,"line":34299},119,[68,34301,34302],{"class":302},"        # 验证数据\n",[68,34304,34306,34308,34311,34313,34315],{"class":70,"line":34305},120,[68,34307,4893],{"class":316},[68,34309,34310],{"class":78}," step ,(b_x,b_y) ",[68,34312,27529],{"class":316},[68,34314,33090],{"class":85},[68,34316,34317],{"class":78},"(val_dataloader):\n",[68,34319,34321],{"class":70,"line":34320},121,[68,34322,34323],{"class":302},"            # 将特征放到验证设备当中\n",[68,34325,34327,34329,34331],{"class":70,"line":34326},122,[68,34328,34094],{"class":78},[68,34330,1685],{"class":316},[68,34332,34099],{"class":78},[68,34334,34336],{"class":70,"line":34335},123,[68,34337,34338],{"class":302},"            # 将标签放到放到训练设备当中\n",[68,34340,34342,34344,34346],{"class":70,"line":34341},124,[68,34343,34109],{"class":78},[68,34345,1685],{"class":316},[68,34347,34114],{"class":78},[68,34349,34351],{"class":70,"line":34350},125,[68,34352,34353],{"class":302},"            # 开启验证模式，设置模型为评估模式\n",[68,34355,34357],{"class":70,"line":34356},126,[68,34358,34359],{"class":78},"            model.eval()\n",[68,34361,34363,34366],{"class":70,"line":34362},127,[68,34364,34365],{"class":316},"            with",[68,34367,34368],{"class":78}," torch.no_grad():\n",[68,34370,34372],{"class":70,"line":34371},128,[68,34373,34374],{"class":302},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[68,34376,34378,34381,34383],{"class":70,"line":34377},129,[68,34379,34380],{"class":78},"                output ",[68,34382,1685],{"class":316},[68,34384,34385],{"class":78}," model(b_x)\n",[68,34387,34389],{"class":70,"line":34388},130,[68,34390,34391],{"class":302},"                # 查找每一行中最大值对应的下标\n",[68,34393,34395,34398,34400,34403,34405,34407,34409],{"class":70,"line":34394},131,[68,34396,34397],{"class":78},"                pre_lab ",[68,34399,1685],{"class":316},[68,34401,34402],{"class":78}," torch.argmax(output, ",[68,34404,34169],{"class":6705},[68,34406,1685],{"class":316},[68,34408,1846],{"class":85},[68,34410,1646],{"class":78},[68,34412,34414],{"class":70,"line":34413},132,[68,34415,34416],{"class":302},"                # 计算验证集上的当前 batch 损失\n",[68,34418,34420,34423,34425],{"class":70,"line":34419},133,[68,34421,34422],{"class":78},"                val_batch_loss ",[68,34424,1685],{"class":316},[68,34426,34427],{"class":78}," criterion(output, b_y)\n",[68,34429,34431],{"class":70,"line":34430},134,[68,34432,34433],{"class":302},"                # 对损失函数进行累加（按样本数加权）\n",[68,34435,34437,34440,34442,34445,34447,34450,34452],{"class":70,"line":34436},135,[68,34438,34439],{"class":78},"                val_loss ",[68,34441,10965],{"class":316},[68,34443,34444],{"class":78}," val_batch_loss.item() ",[68,34446,2083],{"class":316},[68,34448,34449],{"class":78}," b_x.size(",[68,34451,1248],{"class":85},[68,34453,1646],{"class":78},[68,34455,34457,34460,34462,34465,34467],{"class":70,"line":34456},136,[68,34458,34459],{"class":78},"                val_corrects ",[68,34461,10965],{"class":316},[68,34463,34464],{"class":78}," torch.sum(pre_lab ",[68,34466,4439],{"class":316},[68,34468,34469],{"class":78}," b_y.data)\n",[68,34471,34473],{"class":70,"line":34472},137,[68,34474,34475],{"class":302},"                # 当前用于验证的样本数量\n",[68,34477,34479,34482,34484,34486,34488],{"class":70,"line":34478},138,[68,34480,34481],{"class":78},"            val_num ",[68,34483,10965],{"class":316},[68,34485,34449],{"class":78},[68,34487,1248],{"class":85},[68,34489,1646],{"class":78},[68,34491,34493],{"class":70,"line":34492},139,[68,34494,34495],{"class":302},"        # 计算并保存每一次迭代的loss值和准确率\n",[68,34497,34499],{"class":70,"line":34498},140,[68,34500,34501],{"class":302},"        # 计算并保存训练集的loss值\n",[68,34503,34505,34508,34510],{"class":70,"line":34504},141,[68,34506,34507],{"class":78},"        train_loss_all.append(train_loss",[68,34509,2212],{"class":316},[68,34511,34512],{"class":78},"train_num)\n",[68,34514,34516],{"class":70,"line":34515},142,[68,34517,34518],{"class":302},"        # 取双精度\n",[68,34520,34522],{"class":70,"line":34521},143,[68,34523,34524],{"class":302},"        # 计算并保存训练集的准确率\n",[68,34526,34528,34531,34533],{"class":70,"line":34527},144,[68,34529,34530],{"class":78},"        train_acc_all.append(train_corrects.double().item()",[68,34532,2212],{"class":316},[68,34534,34512],{"class":78},[68,34536,34538],{"class":70,"line":34537},145,[68,34539,34540],{"class":302},"        # 计算并保存验证集的loss值\n",[68,34542,34544,34547,34549],{"class":70,"line":34543},146,[68,34545,34546],{"class":78},"        val_loss_all.append(val_loss",[68,34548,2212],{"class":316},[68,34550,34551],{"class":78},"val_num)\n",[68,34553,34555],{"class":70,"line":34554},147,[68,34556,34557],{"class":302},"        # 计算并保存验证集的准确率\n",[68,34559,34561,34564,34566],{"class":70,"line":34560},148,[68,34562,34563],{"class":78},"        val_acc_all.append(val_corrects.double().item()",[68,34565,2212],{"class":316},[68,34567,34551],{"class":78},[68,34569,34571],{"class":70,"line":34570},149,[68,34572,3890],{"emptyLinePlaceholder":1567},[68,34574,34576],{"class":70,"line":34575},150,[68,34577,34578],{"class":302},"        # 打印训练一轮的loss值和准确率\n",[68,34580,34582,34584,34586,34588,34590,34593,34595,34598,34600,34603,34605,34607,34609,34611,34614,34616,34618,34621,34623,34625],{"class":70,"line":34581},151,[68,34583,33935],{"class":85},[68,34585,1640],{"class":78},[68,34587,5082],{"class":1742},[68,34589,33943],{"class":85},[68,34591,34592],{"class":1742},"train loss:",[68,34594,2523],{"class":85},[68,34596,34597],{"class":316},":.4f",[68,34599,2573],{"class":85},[68,34601,34602],{"class":1742}," train acc:",[68,34604,2523],{"class":85},[68,34606,34597],{"class":316},[68,34608,2573],{"class":85},[68,34610,5082],{"class":1742},[68,34612,34613],{"class":78},".format(epoch,train_loss_all[",[68,34615,2160],{"class":316},[68,34617,1846],{"class":85},[68,34619,34620],{"class":78},"],train_acc_all[",[68,34622,2160],{"class":316},[68,34624,1846],{"class":85},[68,34626,34627],{"class":78},"]))\n",[68,34629,34631,34633,34635,34637,34639,34642,34644,34646,34648,34651,34653,34655,34657,34659,34662,34664,34666,34669,34671,34673],{"class":70,"line":34630},152,[68,34632,33935],{"class":85},[68,34634,1640],{"class":78},[68,34636,5082],{"class":1742},[68,34638,33943],{"class":85},[68,34640,34641],{"class":1742},"val loss:",[68,34643,2523],{"class":85},[68,34645,34597],{"class":316},[68,34647,2573],{"class":85},[68,34649,34650],{"class":1742}," val acc:",[68,34652,2523],{"class":85},[68,34654,34597],{"class":316},[68,34656,2573],{"class":85},[68,34658,5082],{"class":1742},[68,34660,34661],{"class":78},".format(epoch,val_loss_all[",[68,34663,2160],{"class":316},[68,34665,1846],{"class":85},[68,34667,34668],{"class":78},"],val_acc_all[",[68,34670,2160],{"class":316},[68,34672,1846],{"class":85},[68,34674,34627],{"class":78},[68,34676,34678],{"class":70,"line":34677},153,[68,34679,3890],{"emptyLinePlaceholder":1567},[68,34681,34683],{"class":70,"line":34682},154,[68,34684,34685],{"class":302},"        # 判断准确度--->保存最优模型\n",[68,34687,34689,34691,34694,34696,34698,34700,34702],{"class":70,"line":34688},155,[68,34690,3987],{"class":316},[68,34692,34693],{"class":78}," val_acc_all[",[68,34695,2160],{"class":316},[68,34697,1846],{"class":85},[68,34699,2567],{"class":78},[68,34701,2587],{"class":316},[68,34703,34704],{"class":78},"best_acc:\n",[68,34706,34708],{"class":70,"line":34707},156,[68,34709,34710],{"class":302},"            # 保存当前模型准确度\n",[68,34712,34714,34717,34719,34721,34724,34726,34728],{"class":70,"line":34713},157,[68,34715,34716],{"class":78},"            best_acc:",[68,34718,1679],{"class":85},[68,34720,1685],{"class":316},[68,34722,34723],{"class":78},"val_acc_all[",[68,34725,2160],{"class":316},[68,34727,1846],{"class":85},[68,34729,34730],{"class":78},"]\n",[68,34732,34734],{"class":70,"line":34733},158,[68,34735,34736],{"class":302},"            # 保存当前的准确度\n",[68,34738,34740],{"class":70,"line":34739},159,[68,34741,34742],{"class":302},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[68,34744,34746,34749,34751],{"class":70,"line":34745},160,[68,34747,34748],{"class":78},"            best_model_wts",[68,34750,1685],{"class":316},[68,34752,33798],{"class":78},[68,34754,34756],{"class":70,"line":34755},161,[68,34757,3890],{"emptyLinePlaceholder":1567},[68,34759,34761],{"class":70,"line":34760},162,[68,34762,34763],{"class":302},"        # 计算耗时\n",[68,34765,34767,34770,34772,34775,34777],{"class":70,"line":34766},163,[68,34768,34769],{"class":78},"        time_use",[68,34771,1685],{"class":316},[68,34773,34774],{"class":78},"time.time()",[68,34776,2160],{"class":316},[68,34778,34779],{"class":78},"since\n",[68,34781,34783,34785,34787,34790,34792,34795,34797,34799,34801,34803,34805,34808,34811,34814,34816,34819,34821,34823],{"class":70,"line":34782},164,[68,34784,33935],{"class":85},[68,34786,1640],{"class":78},[68,34788,34789],{"class":1742},"'训练和验证耗费的时间",[68,34791,2523],{"class":85},[68,34793,34794],{"class":316},":.0f",[68,34796,2573],{"class":85},[68,34798,2172],{"class":1742},[68,34800,2523],{"class":85},[68,34802,34794],{"class":316},[68,34804,2573],{"class":85},[68,34806,34807],{"class":1742},"s'",[68,34809,34810],{"class":78},".format(time_use",[68,34812,34813],{"class":316},"\u002F\u002F",[68,34815,2534],{"class":85},[68,34817,34818],{"class":78},",time_use",[68,34820,1957],{"class":316},[68,34822,2534],{"class":85},[68,34824,31981],{"class":78},[68,34826,34828],{"class":70,"line":34827},165,[68,34829,34830],{"class":302},"    # 选择最优参数\n",[68,34832,34834],{"class":70,"line":34833},166,[68,34835,34836],{"class":302},"    # 加载最高准确率下的模型参数\n",[68,34838,34840],{"class":70,"line":34839},167,[68,34841,34842],{"class":302},"    # model.load_state_dict(best_model_wts)\n",[68,34844,34846,34849,34852],{"class":70,"line":34845},168,[68,34847,34848],{"class":78},"    torch.save(model.state_dict(best_model_wts), ",[68,34850,34851],{"class":1742},"'.\u002Fbest_model.pth'",[68,34853,1646],{"class":78},[68,34855,34857],{"class":70,"line":34856},169,[68,34858,34859],{"class":302},"    # 或者写成\n",[68,34861,34863],{"class":70,"line":34862},170,[68,34864,34865],{"class":302},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[68,34867,34869],{"class":70,"line":34868},171,[68,34870,34871],{"class":302},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[68,34873,34875,34878,34880,34883,34886,34888],{"class":70,"line":34874},172,[68,34876,34877],{"class":78},"    train_process",[68,34879,1685],{"class":316},[68,34881,34882],{"class":78},"pd.DataFrame(",[68,34884,34885],{"class":6705},"data",[68,34887,1685],{"class":316},[68,34889,3038],{"class":78},[68,34891,34893,34896,34898,34901],{"class":70,"line":34892},173,[68,34894,34895],{"class":1742},"        \"epoch\"",[68,34897,2486],{"class":78},[68,34899,34900],{"class":85},"range",[68,34902,34903],{"class":78},"(num_epochs),\n",[68,34905,34907,34910],{"class":70,"line":34906},174,[68,34908,34909],{"class":1742},"        \"train_loss_all\"",[68,34911,34912],{"class":78},":train_loss_all,\n",[68,34914,34916,34919],{"class":70,"line":34915},175,[68,34917,34918],{"class":1742},"        \"val_loss_all\"",[68,34920,34921],{"class":78},":val_loss_all,\n",[68,34923,34925,34928],{"class":70,"line":34924},176,[68,34926,34927],{"class":1742},"        \"train_acc_all\"",[68,34929,34930],{"class":78},":train_acc_all,\n",[68,34932,34934,34937],{"class":70,"line":34933},177,[68,34935,34936],{"class":1742},"        \"val_acc_all\"",[68,34938,34939],{"class":78},":val_acc_all\n",[68,34941,34943],{"class":70,"line":34942},178,[68,34944,34945],{"class":78},"    })\n",[68,34947,34949],{"class":70,"line":34948},179,[68,34950,34951],{"class":302},"    # 返回训练保存的过程\n",[68,34953,34955,34957],{"class":70,"line":34954},180,[68,34956,5580],{"class":316},[68,34958,34959],{"class":78}," train_process\n",[68,34961,34963],{"class":70,"line":34962},181,[68,34964,3890],{"emptyLinePlaceholder":1567},[68,34966,34968],{"class":70,"line":34967},182,[68,34969,34970],{"class":302},"# 将loss值和精度按照图片的形式展示出来\n",[68,34972,34974,34976,34979],{"class":70,"line":34973},183,[68,34975,33431],{"class":316},[68,34977,34978],{"class":74}," matplot_acc_loss",[68,34980,34981],{"class":78},"(train_process):\n",[68,34983,34985],{"class":70,"line":34984},184,[68,34986,34987],{"class":302},"    # 设置图的大小\n",[68,34989,34991,34994,34996,34998,35000,35002,35004,35006],{"class":70,"line":34990},185,[68,34992,34993],{"class":78},"    plt.figure(",[68,34995,33177],{"class":6705},[68,34997,1685],{"class":316},[68,34999,1640],{"class":78},[68,35001,2126],{"class":85},[68,35003,2007],{"class":78},[68,35005,1922],{"class":85},[68,35007,31981],{"class":78},[68,35009,35011],{"class":70,"line":35010},186,[68,35012,35013],{"class":302},"    # 设置图中有几张图\n",[68,35015,35017],{"class":70,"line":35016},187,[68,35018,35019],{"class":302},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[68,35021,35023],{"class":70,"line":35022},188,[68,35024,35025],{"class":302},"    # ①loss图\n",[68,35027,35029,35031,35033,35035,35037,35039,35041],{"class":70,"line":35028},189,[68,35030,33211],{"class":78},[68,35032,1846],{"class":85},[68,35034,2007],{"class":78},[68,35036,1715],{"class":85},[68,35038,2007],{"class":78},[68,35040,1846],{"class":85},[68,35042,1646],{"class":78},[68,35044,35046],{"class":70,"line":35045},190,[68,35047,35048],{"class":302},"    # 补充:\n",[68,35050,35052],{"class":70,"line":35051},191,[68,35053,35054],{"class":302},"    # plt.subplot(nrows, ncols, index)\n",[68,35056,35058],{"class":70,"line":35057},192,[68,35059,35060],{"class":302},"    # nrows：行数\n",[68,35062,35064],{"class":70,"line":35063},193,[68,35065,35066],{"class":302},"    # ncols：列数\n",[68,35068,35070],{"class":70,"line":35069},194,[68,35071,35072],{"class":302},"    # index：目前选中第几个子图（从1开始）\n",[68,35074,35076,35079,35082,35085,35088,35090,35093,35095,35098],{"class":70,"line":35075},195,[68,35077,35078],{"class":78},"    plt.plot(train_process[",[68,35080,35081],{"class":1742},"\"epoch\"",[68,35083,35084],{"class":78},"],train_process.train_loss_all,",[68,35086,35087],{"class":1742},"'ro-'",[68,35089,2007],{"class":78},[68,35091,35092],{"class":6705},"label",[68,35094,1685],{"class":316},[68,35096,35097],{"class":1742},"'train loss'",[68,35099,1646],{"class":78},[68,35101,35103,35105,35107,35110,35113,35115,35117,35119,35122],{"class":70,"line":35102},196,[68,35104,35078],{"class":78},[68,35106,35081],{"class":1742},[68,35108,35109],{"class":78},"],train_process.val_loss_all,",[68,35111,35112],{"class":1742},"'bs--'",[68,35114,2007],{"class":78},[68,35116,35092],{"class":6705},[68,35118,1685],{"class":316},[68,35120,35121],{"class":1742},"'val loss'",[68,35123,1646],{"class":78},[68,35125,35127],{"class":70,"line":35126},197,[68,35128,35129],{"class":302},"    # 添加一个图例\n",[68,35131,35133],{"class":70,"line":35132},198,[68,35134,35135],{"class":78},"    plt.legend()\n",[68,35137,35139],{"class":70,"line":35138},199,[68,35140,35141],{"class":302},"    # 给轴添加标签\n",[68,35143,35145,35148,35151],{"class":70,"line":35144},200,[68,35146,35147],{"class":78},"    plt.xlabel(",[68,35149,35150],{"class":1742},"'epoch'",[68,35152,1646],{"class":78},[68,35154,35156,35159,35162],{"class":70,"line":35155},201,[68,35157,35158],{"class":78},"    plt.ylabel(",[68,35160,35161],{"class":1742},"'loss'",[68,35163,1646],{"class":78},[68,35165,35167],{"class":70,"line":35166},202,[68,35168,35169],{"class":302},"    # ②准确度图\n",[68,35171,35173,35175,35177,35179,35181,35183,35185],{"class":70,"line":35172},203,[68,35174,33211],{"class":78},[68,35176,1846],{"class":85},[68,35178,2007],{"class":78},[68,35180,1715],{"class":85},[68,35182,2007],{"class":78},[68,35184,1715],{"class":85},[68,35186,1646],{"class":78},[68,35188,35190,35192,35194,35197,35199,35201,35203,35205,35208],{"class":70,"line":35189},204,[68,35191,35078],{"class":78},[68,35193,35081],{"class":1742},[68,35195,35196],{"class":78},"],train_process.train_acc_all,",[68,35198,35087],{"class":1742},[68,35200,2007],{"class":78},[68,35202,35092],{"class":6705},[68,35204,1685],{"class":316},[68,35206,35207],{"class":1742},"'train acc'",[68,35209,1646],{"class":78},[68,35211,35213,35215,35217,35220,35222,35224,35226,35228,35231],{"class":70,"line":35212},205,[68,35214,35078],{"class":78},[68,35216,35081],{"class":1742},[68,35218,35219],{"class":78},"],train_process.val_acc_all,",[68,35221,35112],{"class":1742},[68,35223,2007],{"class":78},[68,35225,35092],{"class":6705},[68,35227,1685],{"class":316},[68,35229,35230],{"class":1742},"'val acc'",[68,35232,1646],{"class":78},[68,35234,35236],{"class":70,"line":35235},206,[68,35237,35238],{"class":302},"    # 添加图例\n",[68,35240,35242],{"class":70,"line":35241},207,[68,35243,35135],{"class":78},[68,35245,35247,35249,35251],{"class":70,"line":35246},208,[68,35248,35147],{"class":78},[68,35250,35081],{"class":1742},[68,35252,1646],{"class":78},[68,35254,35256,35258,35261],{"class":70,"line":35255},209,[68,35257,35158],{"class":78},[68,35259,35260],{"class":1742},"\"acc\"",[68,35262,1646],{"class":78},[68,35264,35266],{"class":70,"line":35265},210,[68,35267,35268],{"class":78},"    plt.show()\n",[68,35270,35272],{"class":70,"line":35271},211,[68,35273,3890],{"emptyLinePlaceholder":1567},[68,35275,35277],{"class":70,"line":35276},212,[68,35278,35279],{"class":302},"# 正式开始训练:\n",[68,35281,35283,35285,35287,35289,35291],{"class":70,"line":35282},213,[68,35284,3023],{"class":316},[68,35286,32704],{"class":85},[68,35288,4439],{"class":316},[68,35290,32709],{"class":1742},[68,35292,5229],{"class":78},[68,35294,35296],{"class":70,"line":35295},214,[68,35297,35298],{"class":302},"    # 将模型实例化\n",[68,35300,35302,35305,35307],{"class":70,"line":35301},215,[68,35303,35304],{"class":78},"    LeNet",[68,35306,1685],{"class":316},[68,35308,35309],{"class":78},"LeNet()\n",[68,35311,35313,35316,35318],{"class":70,"line":35312},216,[68,35314,35315],{"class":78},"    train_dataloader,val_dataloader",[68,35317,1685],{"class":316},[68,35319,35320],{"class":78},"train_val_data_process()\n",[68,35322,35324,35326,35328,35331,35334,35336,35338],{"class":70,"line":35323},217,[68,35325,34877],{"class":78},[68,35327,1685],{"class":316},[68,35329,35330],{"class":78},"train_model_process(LeNet,train_dataloader,val_dataloader,",[68,35332,35333],{"class":6705},"num_epochs",[68,35335,1685],{"class":316},[68,35337,333],{"class":85},[68,35339,1646],{"class":78},[68,35341,35343],{"class":70,"line":35342},218,[68,35344,35345],{"class":78},"    matplot_acc_loss(train_process)\n",[170,35347,35348],{},"画图的补充点学习：",[170,35350,35351],{},[801,35352],{"alt":63,"src":35353},"\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",[263,35355,35356],{"start":98},[27,35357,35358],{},"测试",[58,35360,35362],{"className":31862,"code":35361,"language":31864,"meta":63,"style":63},"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",[65,35363,35364,35370,35380,35392,35402,35407,35417,35427,35431,35436,35445,35462,35474,35491,35502,35518,35523,35534,35545,35556,35563,35567,35572,35582,35587,35604,35612,35616,35621,35630,35639,35643,35648,35653,35658,35665,35670,35682,35692,35702,35707,35711,35716,35725,35730,35746,35751,35756,35761,35775,35780,35794,35798,35803,35818,35823,35835,35839,35844,35856,35861,35869,35874,35879,35889,35894,35903,35908,35913,35917,35922,35927,35943,35951,35956,35961,36020,36026,36031,36042,36050,36058,36062,36067,36071,36076,36084,36089,36105,36110,36120,36130],{"__ignoreMap":63},[68,35365,35366,35368],{"class":70,"line":71},[68,35367,31876],{"class":316},[68,35369,31879],{"class":78},[68,35371,35372,35374,35376,35378],{"class":70,"line":82},[68,35373,31876],{"class":316},[68,35375,32899],{"class":78},[68,35377,32867],{"class":316},[68,35379,32904],{"class":78},[68,35381,35382,35384,35387,35389],{"class":70,"line":98},[68,35383,32221],{"class":316},[68,35385,35386],{"class":78}," jupyter_client.consoleapp ",[68,35388,31876],{"class":316},[68,35390,35391],{"class":78}," classes\n",[68,35393,35394,35396,35398,35400],{"class":70,"line":104},[68,35395,32221],{"class":316},[68,35397,32882],{"class":78},[68,35399,31876],{"class":316},[68,35401,32887],{"class":78},[68,35403,35404],{"class":70,"line":112},[68,35405,35406],{"class":302},"# 导入数据集\n",[68,35408,35409,35411,35413,35415],{"class":70,"line":124},[68,35410,32221],{"class":316},[68,35412,32852],{"class":78},[68,35414,31876],{"class":316},[68,35416,32857],{"class":78},[68,35418,35419,35421,35423,35425],{"class":70,"line":1496},[68,35420,32221],{"class":316},[68,35422,33398],{"class":78},[68,35424,31876],{"class":316},[68,35426,33403],{"class":78},[68,35428,35429],{"class":70,"line":1502},[68,35430,3890],{"emptyLinePlaceholder":1567},[68,35432,35433],{"class":70,"line":1510},[68,35434,35435],{"class":302},"# 测试数据处理\n",[68,35437,35438,35440,35443],{"class":70,"line":1521},[68,35439,33431],{"class":316},[68,35441,35442],{"class":74}," test_data_process",[68,35444,33437],{"class":78},[68,35446,35447,35450,35452,35454,35456,35458,35460],{"class":70,"line":3103},[68,35448,35449],{"class":78},"    test_data",[68,35451,1685],{"class":316},[68,35453,32939],{"class":78},[68,35455,32942],{"class":6705},[68,35457,1685],{"class":316},[68,35459,32947],{"class":1742},[68,35461,32950],{"class":78},[68,35463,35464,35467,35469,35472],{"class":70,"line":3108},[68,35465,35466],{"class":6705},"                           train",[68,35468,1685],{"class":316},[68,35470,35471],{"class":85},"False",[68,35473,32950],{"class":78},[68,35475,35476,35479,35481,35483,35485,35487,35489],{"class":70,"line":3114},[68,35477,35478],{"class":6705},"                           transform",[68,35480,1685],{"class":316},[68,35482,32977],{"class":78},[68,35484,32980],{"class":6705},[68,35486,1685],{"class":316},[68,35488,2528],{"class":85},[68,35490,32988],{"class":78},[68,35492,35493,35496,35498,35500],{"class":70,"line":3119},[68,35494,35495],{"class":6705},"                           download",[68,35497,1685],{"class":316},[68,35499,32960],{"class":85},[68,35501,1646],{"class":78},[68,35503,35504,35507,35509,35511,35513,35515],{"class":70,"line":3133},[68,35505,35506],{"class":78},"    test_dataloader",[68,35508,1685],{"class":316},[68,35510,33018],{"class":78},[68,35512,33021],{"class":6705},[68,35514,1685],{"class":316},[68,35516,35517],{"class":78},"test_data,\n",[68,35519,35520],{"class":70,"line":3138},[68,35521,35522],{"class":302},"                                    # 这里是一张一张进行测试\n",[68,35524,35525,35528,35530,35532],{"class":70,"line":3144},[68,35526,35527],{"class":6705},"                                    batch_size",[68,35529,1685],{"class":316},[68,35531,1846],{"class":85},[68,35533,32950],{"class":78},[68,35535,35536,35539,35541,35543],{"class":70,"line":3165},[68,35537,35538],{"class":6705},"                                    shuffle",[68,35540,1685],{"class":316},[68,35542,32960],{"class":85},[68,35544,32950],{"class":78},[68,35546,35547,35550,35552,35554],{"class":70,"line":3170},[68,35548,35549],{"class":6705},"                                    num_workers",[68,35551,1685],{"class":316},[68,35553,1248],{"class":85},[68,35555,1646],{"class":78},[68,35557,35558,35560],{"class":70,"line":3184},[68,35559,5580],{"class":316},[68,35561,35562],{"class":78}," test_dataloader\n",[68,35564,35565],{"class":70,"line":3189},[68,35566,3890],{"emptyLinePlaceholder":1567},[68,35568,35569],{"class":70,"line":3218},[68,35570,35571],{"class":302},"# 定义模型测试函数\n",[68,35573,35574,35576,35579],{"class":70,"line":3223},[68,35575,33431],{"class":316},[68,35577,35578],{"class":74}," test_model_process",[68,35580,35581],{"class":78},"(model,test_dataloader):\n",[68,35583,35584],{"class":70,"line":3240},[68,35585,35586],{"class":302},"    # 将模型放到设备当中，先进行判断\n",[68,35588,35589,35591,35593,35595,35597,35599,35601],{"class":70,"line":3245},[68,35590,32721],{"class":78},[68,35592,1685],{"class":316},[68,35594,32728],{"class":1742},[68,35596,3195],{"class":316},[68,35598,32733],{"class":78},[68,35600,3192],{"class":316},[68,35602,35603],{"class":1742}," \"cpu\"\n",[68,35605,35606,35608,35610],{"class":70,"line":3250},[68,35607,32773],{"class":78},[68,35609,1685],{"class":316},[68,35611,33773],{"class":78},[68,35613,35614],{"class":70,"line":3255},[68,35615,3890],{"emptyLinePlaceholder":1567},[68,35617,35618],{"class":70,"line":3269},[68,35619,35620],{"class":302},"    # 设置初始化参数\n",[68,35622,35623,35626,35628],{"class":70,"line":3274},[68,35624,35625],{"class":78},"    test_corrects",[68,35627,1685],{"class":316},[68,35629,33826],{"class":85},[68,35631,35632,35635,35637],{"class":70,"line":4067},[68,35633,35634],{"class":78},"    test_num",[68,35636,1685],{"class":316},[68,35638,4575],{"class":85},[68,35640,35641],{"class":70,"line":4081},[68,35642,3890],{"emptyLinePlaceholder":1567},[68,35644,35645],{"class":70,"line":4089},[68,35646,35647],{"class":302},"    # 进行模型测试\n",[68,35649,35650],{"class":70,"line":4094},[68,35651,35652],{"class":302},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[68,35654,35655],{"class":70,"line":4100},[68,35656,35657],{"class":302},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[68,35659,35660,35663],{"class":70,"line":4106},[68,35661,35662],{"class":316},"    with",[68,35664,34368],{"class":78},[68,35666,35667],{"class":70,"line":4111},[68,35668,35669],{"class":302},"        # 从数据中进行\n",[68,35671,35672,35674,35677,35679],{"class":70,"line":9437},[68,35673,4893],{"class":316},[68,35675,35676],{"class":78}," test_data_x,test_data_y ",[68,35678,27529],{"class":316},[68,35680,35681],{"class":78}," test_dataloader:\n",[68,35683,35684,35687,35689],{"class":70,"line":9461},[68,35685,35686],{"class":78},"            test_data_x",[68,35688,1685],{"class":316},[68,35690,35691],{"class":78},"test_data_x.to(device)\n",[68,35693,35694,35697,35699],{"class":70,"line":9466},[68,35695,35696],{"class":78},"            test_data_y",[68,35698,1685],{"class":316},[68,35700,35701],{"class":78},"test_data_y.to(device)\n",[68,35703,35704],{"class":70,"line":9472},[68,35705,35706],{"class":302},"            # 设置为验证模式\n",[68,35708,35709],{"class":70,"line":9499},[68,35710,34359],{"class":78},[68,35712,35713],{"class":70,"line":9504},[68,35714,35715],{"class":302},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[68,35717,35718,35720,35722],{"class":70,"line":9510},[68,35719,34144],{"class":78},[68,35721,1685],{"class":316},[68,35723,35724],{"class":78},"model(test_data_x)\n",[68,35726,35727],{"class":70,"line":9522},[68,35728,35729],{"class":302},"            # 查找每一行中最大值对应的下标\n",[68,35731,35732,35734,35736,35738,35740,35742,35744],{"class":70,"line":9534},[68,35733,34161],{"class":78},[68,35735,1685],{"class":316},[68,35737,34166],{"class":78},[68,35739,34169],{"class":6705},[68,35741,1685],{"class":316},[68,35743,1846],{"class":85},[68,35745,1646],{"class":78},[68,35747,35748],{"class":70,"line":9546},[68,35749,35750],{"class":302},"            # 计算正确率\n",[68,35752,35753],{"class":70,"line":11204},[68,35754,35755],{"class":302},"            # .data表示是一个不带梯度信息的tensor\n",[68,35757,35758],{"class":70,"line":11229},[68,35759,35760],{"class":302},"            # 如果预测正确，则准确度test_corrects加1\n",[68,35762,35763,35766,35768,35770,35772],{"class":70,"line":11252},[68,35764,35765],{"class":78},"            test_corrects",[68,35767,10965],{"class":316},[68,35769,34271],{"class":78},[68,35771,4439],{"class":316},[68,35773,35774],{"class":78},"test_data_y.data)\n",[68,35776,35777],{"class":70,"line":11276},[68,35778,35779],{"class":302},"            # 将所有的测试样本进行累计\n",[68,35781,35782,35785,35787,35790,35792],{"class":70,"line":11281},[68,35783,35784],{"class":78},"            test_num",[68,35786,10965],{"class":316},[68,35788,35789],{"class":78},"test_data_x.size(",[68,35791,1248],{"class":85},[68,35793,1646],{"class":78},[68,35795,35796],{"class":70,"line":11286},[68,35797,3890],{"emptyLinePlaceholder":1567},[68,35799,35800],{"class":70,"line":11291},[68,35801,35802],{"class":302},"        # 计算准确度\n",[68,35804,35805,35808,35810,35813,35815],{"class":70,"line":11300},[68,35806,35807],{"class":78},"        test_acc",[68,35809,1685],{"class":316},[68,35811,35812],{"class":78},"test_corrects.double().item()",[68,35814,2212],{"class":316},[68,35816,35817],{"class":78},"test_num\n",[68,35819,35820],{"class":70,"line":11305},[68,35821,35822],{"class":302},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[68,35824,35825,35827,35829,35832],{"class":70,"line":11311},[68,35826,33935],{"class":85},[68,35828,1640],{"class":78},[68,35830,35831],{"class":1742},"\"测试的准确率：\"",[68,35833,35834],{"class":78},",test_acc)\n",[68,35836,35837],{"class":70,"line":11332},[68,35838,3890],{"emptyLinePlaceholder":1567},[68,35840,35841],{"class":70,"line":11338},[68,35842,35843],{"class":302},"# 实现模型的测试功能\n",[68,35845,35846,35848,35850,35852,35854],{"class":70,"line":11352},[68,35847,3023],{"class":316},[68,35849,32704],{"class":85},[68,35851,4439],{"class":316},[68,35853,32709],{"class":1742},[68,35855,5229],{"class":78},[68,35857,35858],{"class":70,"line":11358},[68,35859,35860],{"class":302},"    # 加载模型\n",[68,35862,35863,35865,35867],{"class":70,"line":11385},[68,35864,32773],{"class":78},[68,35866,1685],{"class":316},[68,35868,35309],{"class":78},[68,35870,35871],{"class":70,"line":11394},[68,35872,35873],{"class":302},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[68,35875,35876],{"class":70,"line":11400},[68,35877,35878],{"class":302},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[68,35880,35881,35884,35887],{"class":70,"line":11408},[68,35882,35883],{"class":78},"    model.load_state_dict(torch.load(",[68,35885,35886],{"class":1742},"'best_model.pth'",[68,35888,31981],{"class":78},[68,35890,35891],{"class":70,"line":11413},[68,35892,35893],{"class":302},"    # 数据加载\n",[68,35895,35896,35898,35900],{"class":70,"line":18091},[68,35897,35506],{"class":78},[68,35899,1685],{"class":316},[68,35901,35902],{"class":78},"test_data_process()\n",[68,35904,35905],{"class":70,"line":18097},[68,35906,35907],{"class":302},"    # 加载模型测试的函数\n",[68,35909,35910],{"class":70,"line":18120},[68,35911,35912],{"class":78},"    test_model_process(model,test_dataloader)\n",[68,35914,35915],{"class":70,"line":18126},[68,35916,3890],{"emptyLinePlaceholder":1567},[68,35918,35919],{"class":70,"line":18149},[68,35920,35921],{"class":302},"    # 验证集推理实现：\n",[68,35923,35924],{"class":70,"line":18163},[68,35925,35926],{"class":302},"    # 加载数据加载的更详细一些\n",[68,35928,35929,35931,35933,35935,35937,35939,35941],{"class":70,"line":18183},[68,35930,32721],{"class":78},[68,35932,1685],{"class":316},[68,35934,32728],{"class":1742},[68,35936,3195],{"class":316},[68,35938,32733],{"class":78},[68,35940,3192],{"class":316},[68,35942,35603],{"class":1742},[68,35944,35945,35947,35949],{"class":70,"line":18189},[68,35946,32773],{"class":78},[68,35948,1685],{"class":316},[68,35950,33773],{"class":78},[68,35952,35953],{"class":70,"line":18200},[68,35954,35955],{"class":302},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[68,35957,35958],{"class":70,"line":18223},[68,35959,35960],{"class":302},"    # 顺序不可改变\n",[68,35962,35963,35966,35968,35970,35973,35975,35978,35980,35983,35985,35988,35990,35993,35995,35998,36000,36003,36005,36008,36010,36013,36015,36018],{"class":70,"line":18245},[68,35964,35965],{"class":78},"    classes",[68,35967,1685],{"class":316},[68,35969,2517],{"class":78},[68,35971,35972],{"class":1742},"'T-shirt\u002Ftop'",[68,35974,2007],{"class":78},[68,35976,35977],{"class":1742},"'Trouser'",[68,35979,2007],{"class":78},[68,35981,35982],{"class":1742},"'Pullover'",[68,35984,2007],{"class":78},[68,35986,35987],{"class":1742},"'Dress'",[68,35989,2007],{"class":78},[68,35991,35992],{"class":1742},"'Coat'",[68,35994,2007],{"class":78},[68,35996,35997],{"class":1742},"'Sandal'",[68,35999,2007],{"class":78},[68,36001,36002],{"class":1742},"'Shirt'",[68,36004,2007],{"class":78},[68,36006,36007],{"class":1742},"'Sneaker'",[68,36009,2007],{"class":78},[68,36011,36012],{"class":1742},"'Bag'",[68,36014,2007],{"class":78},[68,36016,36017],{"class":1742},"'Ankle boot'",[68,36019,34730],{"class":78},[68,36021,36022,36024],{"class":70,"line":18250},[68,36023,35662],{"class":316},[68,36025,34368],{"class":78},[68,36027,36028],{"class":70,"line":18256},[68,36029,36030],{"class":302},"        # 将数据和标签都放到设备当中\n",[68,36032,36033,36035,36038,36040],{"class":70,"line":18270},[68,36034,4893],{"class":316},[68,36036,36037],{"class":78}," b_x,b_y ",[68,36039,27529],{"class":316},[68,36041,35681],{"class":78},[68,36043,36044,36046,36048],{"class":70,"line":18283},[68,36045,34094],{"class":78},[68,36047,1685],{"class":316},[68,36049,34099],{"class":78},[68,36051,36052,36054,36056],{"class":70,"line":18288},[68,36053,34109],{"class":78},[68,36055,1685],{"class":316},[68,36057,34114],{"class":78},[68,36059,36060],{"class":70,"line":18302},[68,36061,3890],{"emptyLinePlaceholder":1567},[68,36063,36064],{"class":70,"line":18307},[68,36065,36066],{"class":302},"            # 设置模型为验证模式\n",[68,36068,36069],{"class":70,"line":18313},[68,36070,34359],{"class":78},[68,36072,36073],{"class":70,"line":18318},[68,36074,36075],{"class":302},"            # 模型推理结果\n",[68,36077,36078,36080,36082],{"class":70,"line":18332},[68,36079,34144],{"class":78},[68,36081,1685],{"class":316},[68,36083,34149],{"class":78},[68,36085,36086],{"class":70,"line":18337},[68,36087,36088],{"class":302},"            # 获取最大下标，最大下标就是类别号\n",[68,36090,36091,36093,36095,36097,36099,36101,36103],{"class":70,"line":18342},[68,36092,34161],{"class":78},[68,36094,1685],{"class":316},[68,36096,34166],{"class":78},[68,36098,34169],{"class":6705},[68,36100,1685],{"class":316},[68,36102,1846],{"class":85},[68,36104,1646],{"class":78},[68,36106,36107],{"class":70,"line":18356},[68,36108,36109],{"class":302},"            # 取出张量中的数值\n",[68,36111,36112,36115,36117],{"class":70,"line":18368},[68,36113,36114],{"class":78},"            result",[68,36116,1685],{"class":316},[68,36118,36119],{"class":78},"pre_lab.item()\n",[68,36121,36122,36125,36127],{"class":70,"line":18373},[68,36123,36124],{"class":78},"            label",[68,36126,1685],{"class":316},[68,36128,36129],{"class":78},"b_y.item()\n",[68,36131,36132,36135,36137,36140,36143,36146,36148,36151],{"class":70,"line":18386},[68,36133,36134],{"class":85},"            print",[68,36136,1640],{"class":78},[68,36138,36139],{"class":1742},"\"预测值：\"",[68,36141,36142],{"class":78},",classes[result],",[68,36144,36145],{"class":1742},"\"------\"",[68,36147,2007],{"class":78},[68,36149,36150],{"class":1742},"\"真实值：\"",[68,36152,36153],{"class":78},",classes[label])\n",[170,36155,36156],{},"（2）AlexNet",[263,36158,36159],{},[27,36160,36161],{},"神经网络构建",[58,36163,36165],{"className":31862,"code":36164,"language":31864,"meta":63,"style":63},"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",[65,36166,36167,36173,36183,36193,36205,36209,36226,36234,36249,36261,36303,36330,36373,36399,36443,36486,36529,36556,36560,36570,36575,36603,36622,36641,36645,36650,36658,36673,36683,36697,36707,36722,36737,36752,36763,36767,36772,36782,36797,36802,36816,36831,36843,36848,36859,36864,36870,36875,36887,36907,36912,36921],{"__ignoreMap":63},[68,36168,36169,36171],{"class":70,"line":71},[68,36170,31876],{"class":316},[68,36172,31879],{"class":78},[68,36174,36175,36177,36179,36181],{"class":70,"line":82},[68,36176,32221],{"class":316},[68,36178,32224],{"class":78},[68,36180,31876],{"class":316},[68,36182,32229],{"class":78},[68,36184,36185,36187,36189,36191],{"class":70,"line":98},[68,36186,32221],{"class":316},[68,36188,32241],{"class":78},[68,36190,31876],{"class":316},[68,36192,32246],{"class":78},[68,36194,36195,36197,36200,36202],{"class":70,"line":104},[68,36196,31876],{"class":316},[68,36198,36199],{"class":78}," torch.nn.functional ",[68,36201,32867],{"class":316},[68,36203,36204],{"class":78}," F\n",[68,36206,36207],{"class":70,"line":112},[68,36208,3890],{"emptyLinePlaceholder":1567},[68,36210,36211,36213,36216,36218,36220,36222,36224],{"class":70,"line":124},[68,36212,16182],{"class":316},[68,36214,36215],{"class":74}," AlexNet",[68,36217,1640],{"class":78},[68,36219,32262],{"class":74},[68,36221,2186],{"class":78},[68,36223,32267],{"class":74},[68,36225,32270],{"class":78},[68,36227,36228,36230,36232],{"class":70,"line":1496},[68,36229,32285],{"class":316},[68,36231,32288],{"class":85},[68,36233,32291],{"class":78},[68,36235,36236,36238,36241,36243,36245,36247],{"class":70,"line":1502},[68,36237,32301],{"class":85},[68,36239,36240],{"class":78},"(AlexNet,",[68,36242,32307],{"class":85},[68,36244,32310],{"class":78},[68,36246,32313],{"class":85},[68,36248,3466],{"class":78},[68,36250,36251,36253,36256,36258],{"class":70,"line":1510},[68,36252,32329],{"class":85},[68,36254,36255],{"class":78},".ReLu",[68,36257,1685],{"class":316},[68,36259,36260],{"class":78},"nn.ReLU()\n",[68,36262,36263,36265,36267,36269,36271,36273,36275,36277,36279,36281,36283,36285,36287,36289,36291,36293,36295,36297,36299,36301],{"class":70,"line":1521},[68,36264,32329],{"class":85},[68,36266,32332],{"class":78},[68,36268,1685],{"class":316},[68,36270,32337],{"class":78},[68,36272,32340],{"class":6705},[68,36274,1685],{"class":316},[68,36276,1846],{"class":85},[68,36278,2007],{"class":78},[68,36280,32349],{"class":6705},[68,36282,1685],{"class":316},[68,36284,1838],{"class":85},[68,36286,2007],{"class":78},[68,36288,32358],{"class":6705},[68,36290,1685],{"class":316},[68,36292,2100],{"class":85},[68,36294,2007],{"class":78},[68,36296,32413],{"class":6705},[68,36298,1685],{"class":316},[68,36300,1922],{"class":85},[68,36302,1646],{"class":78},[68,36304,36305,36307,36309,36311,36314,36316,36318,36320,36322,36324,36326,36328],{"class":70,"line":3103},[68,36306,32329],{"class":85},[68,36308,32397],{"class":78},[68,36310,1685],{"class":316},[68,36312,36313],{"class":78},"nn.MaxPool2d(",[68,36315,32358],{"class":6705},[68,36317,1685],{"class":316},[68,36319,1709],{"class":85},[68,36321,2007],{"class":78},[68,36323,32413],{"class":6705},[68,36325,1685],{"class":316},[68,36327,1715],{"class":85},[68,36329,1646],{"class":78},[68,36331,36332,36334,36336,36338,36340,36342,36344,36346,36348,36350,36352,36355,36357,36359,36361,36363,36365,36367,36369,36371],{"class":70,"line":3108},[68,36333,32329],{"class":85},[68,36335,32426],{"class":78},[68,36337,1685],{"class":316},[68,36339,32337],{"class":78},[68,36341,32340],{"class":6705},[68,36343,1685],{"class":316},[68,36345,1838],{"class":85},[68,36347,2007],{"class":78},[68,36349,32349],{"class":6705},[68,36351,1685],{"class":316},[68,36353,36354],{"class":85},"256",[68,36356,2007],{"class":78},[68,36358,32358],{"class":6705},[68,36360,1685],{"class":316},[68,36362,1948],{"class":85},[68,36364,2007],{"class":78},[68,36366,32367],{"class":6705},[68,36368,1685],{"class":316},[68,36370,1715],{"class":85},[68,36372,1646],{"class":78},[68,36374,36375,36377,36379,36381,36383,36385,36387,36389,36391,36393,36395,36397],{"class":70,"line":3114},[68,36376,32329],{"class":85},[68,36378,32461],{"class":78},[68,36380,1685],{"class":316},[68,36382,36313],{"class":78},[68,36384,32358],{"class":6705},[68,36386,1685],{"class":316},[68,36388,1709],{"class":85},[68,36390,2007],{"class":78},[68,36392,32413],{"class":6705},[68,36394,1685],{"class":316},[68,36396,1715],{"class":85},[68,36398,1646],{"class":78},[68,36400,36401,36403,36406,36408,36410,36412,36414,36416,36418,36420,36422,36425,36427,36429,36431,36433,36435,36437,36439,36441],{"class":70,"line":3119},[68,36402,32329],{"class":85},[68,36404,36405],{"class":78},".c5",[68,36407,1685],{"class":316},[68,36409,32337],{"class":78},[68,36411,32340],{"class":6705},[68,36413,1685],{"class":316},[68,36415,36354],{"class":85},[68,36417,2007],{"class":78},[68,36419,32349],{"class":6705},[68,36421,1685],{"class":316},[68,36423,36424],{"class":85},"384",[68,36426,2007],{"class":78},[68,36428,32358],{"class":6705},[68,36430,1685],{"class":316},[68,36432,1709],{"class":85},[68,36434,2007],{"class":78},[68,36436,32367],{"class":6705},[68,36438,1685],{"class":316},[68,36440,1846],{"class":85},[68,36442,1646],{"class":78},[68,36444,36445,36447,36450,36452,36454,36456,36458,36460,36462,36464,36466,36468,36470,36472,36474,36476,36478,36480,36482,36484],{"class":70,"line":3133},[68,36446,32329],{"class":85},[68,36448,36449],{"class":78},".c6",[68,36451,1685],{"class":316},[68,36453,32337],{"class":78},[68,36455,32340],{"class":6705},[68,36457,1685],{"class":316},[68,36459,36424],{"class":85},[68,36461,2007],{"class":78},[68,36463,32349],{"class":6705},[68,36465,1685],{"class":316},[68,36467,36424],{"class":85},[68,36469,2007],{"class":78},[68,36471,32358],{"class":6705},[68,36473,1685],{"class":316},[68,36475,1709],{"class":85},[68,36477,2007],{"class":78},[68,36479,32367],{"class":6705},[68,36481,1685],{"class":316},[68,36483,1846],{"class":85},[68,36485,1646],{"class":78},[68,36487,36488,36490,36493,36495,36497,36499,36501,36503,36505,36507,36509,36511,36513,36515,36517,36519,36521,36523,36525,36527],{"class":70,"line":3138},[68,36489,32329],{"class":85},[68,36491,36492],{"class":78},".c7",[68,36494,1685],{"class":316},[68,36496,32337],{"class":78},[68,36498,32340],{"class":6705},[68,36500,1685],{"class":316},[68,36502,36424],{"class":85},[68,36504,2007],{"class":78},[68,36506,32349],{"class":6705},[68,36508,1685],{"class":316},[68,36510,36354],{"class":85},[68,36512,2007],{"class":78},[68,36514,32358],{"class":6705},[68,36516,1685],{"class":316},[68,36518,1709],{"class":85},[68,36520,2007],{"class":78},[68,36522,32367],{"class":6705},[68,36524,1685],{"class":316},[68,36526,1846],{"class":85},[68,36528,1646],{"class":78},[68,36530,36531,36533,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554],{"class":70,"line":3144},[68,36532,32329],{"class":85},[68,36534,36535],{"class":78},".s8",[68,36537,1685],{"class":316},[68,36539,36313],{"class":78},[68,36541,32358],{"class":6705},[68,36543,1685],{"class":316},[68,36545,1709],{"class":85},[68,36547,2007],{"class":78},[68,36549,32413],{"class":6705},[68,36551,1685],{"class":316},[68,36553,1715],{"class":85},[68,36555,1646],{"class":78},[68,36557,36558],{"class":70,"line":3165},[68,36559,32486],{"class":302},[68,36561,36562,36564,36566,36568],{"class":70,"line":3170},[68,36563,32329],{"class":85},[68,36565,32493],{"class":78},[68,36567,1685],{"class":316},[68,36569,32498],{"class":78},[68,36571,36572],{"class":70,"line":3184},[68,36573,36574],{"class":302},"       # 定义全连接层\n",[68,36576,36577,36579,36582,36584,36586,36588,36590,36592,36594,36596,36598,36601],{"class":70,"line":3189},[68,36578,32329],{"class":85},[68,36580,36581],{"class":78},".f1",[68,36583,1685],{"class":316},[68,36585,32515],{"class":78},[68,36587,1973],{"class":85},[68,36589,2083],{"class":316},[68,36591,1973],{"class":85},[68,36593,2083],{"class":316},[68,36595,36354],{"class":85},[68,36597,2007],{"class":78},[68,36599,36600],{"class":85},"4096",[68,36602,1646],{"class":78},[68,36604,36605,36607,36610,36612,36614,36616,36618,36620],{"class":70,"line":3218},[68,36606,32329],{"class":85},[68,36608,36609],{"class":78},".f2",[68,36611,1685],{"class":316},[68,36613,32515],{"class":78},[68,36615,36600],{"class":85},[68,36617,2007],{"class":78},[68,36619,36600],{"class":85},[68,36621,1646],{"class":78},[68,36623,36624,36626,36629,36631,36633,36635,36637,36639],{"class":70,"line":3223},[68,36625,32329],{"class":85},[68,36627,36628],{"class":78},".f3",[68,36630,1685],{"class":316},[68,36632,32515],{"class":78},[68,36634,36600],{"class":85},[68,36636,2007],{"class":78},[68,36638,313],{"class":85},[68,36640,1646],{"class":78},[68,36642,36643],{"class":70,"line":3240},[68,36644,3890],{"emptyLinePlaceholder":1567},[68,36646,36647],{"class":70,"line":3245},[68,36648,36649],{"class":302},"    # 定义前向传播\n",[68,36651,36652,36654,36656],{"class":70,"line":3250},[68,36653,32285],{"class":316},[68,36655,32577],{"class":74},[68,36657,32580],{"class":78},[68,36659,36660,36662,36664,36666,36669,36671],{"class":70,"line":3255},[68,36661,32585],{"class":78},[68,36663,1685],{"class":316},[68,36665,32307],{"class":85},[68,36667,36668],{"class":78},".ReLu(",[68,36670,32307],{"class":85},[68,36672,32597],{"class":78},[68,36674,36675,36677,36679,36681],{"class":70,"line":3269},[68,36676,32585],{"class":78},[68,36678,1685],{"class":316},[68,36680,32307],{"class":85},[68,36682,32608],{"class":78},[68,36684,36685,36687,36689,36691,36693,36695],{"class":70,"line":3274},[68,36686,32585],{"class":78},[68,36688,1685],{"class":316},[68,36690,32307],{"class":85},[68,36692,36668],{"class":78},[68,36694,32307],{"class":85},[68,36696,32623],{"class":78},[68,36698,36699,36701,36703,36705],{"class":70,"line":4067},[68,36700,32585],{"class":78},[68,36702,1685],{"class":316},[68,36704,32307],{"class":85},[68,36706,32634],{"class":78},[68,36708,36709,36711,36713,36715,36717,36719],{"class":70,"line":4081},[68,36710,32585],{"class":78},[68,36712,1685],{"class":316},[68,36714,32307],{"class":85},[68,36716,36668],{"class":78},[68,36718,32307],{"class":85},[68,36720,36721],{"class":78},".c5(x))\n",[68,36723,36724,36726,36728,36730,36732,36734],{"class":70,"line":4089},[68,36725,32585],{"class":78},[68,36727,1685],{"class":316},[68,36729,32307],{"class":85},[68,36731,36668],{"class":78},[68,36733,32307],{"class":85},[68,36735,36736],{"class":78},".c6(x))\n",[68,36738,36739,36741,36743,36745,36747,36749],{"class":70,"line":4094},[68,36740,32585],{"class":78},[68,36742,1685],{"class":316},[68,36744,32307],{"class":85},[68,36746,36668],{"class":78},[68,36748,32307],{"class":85},[68,36750,36751],{"class":78},".c7(x))\n",[68,36753,36754,36756,36758,36760],{"class":70,"line":4100},[68,36755,32585],{"class":78},[68,36757,1685],{"class":316},[68,36759,32307],{"class":85},[68,36761,36762],{"class":78},".s8(x)\n",[68,36764,36765],{"class":70,"line":4106},[68,36766,3890],{"emptyLinePlaceholder":1567},[68,36768,36769],{"class":70,"line":4111},[68,36770,36771],{"class":302},"        # 展平加线性全连接层\n",[68,36773,36774,36776,36778,36780],{"class":70,"line":9437},[68,36775,32585],{"class":78},[68,36777,1685],{"class":316},[68,36779,32307],{"class":85},[68,36781,32645],{"class":78},[68,36783,36784,36786,36788,36790,36792,36794],{"class":70,"line":9461},[68,36785,32585],{"class":78},[68,36787,1685],{"class":316},[68,36789,32307],{"class":85},[68,36791,36668],{"class":78},[68,36793,32307],{"class":85},[68,36795,36796],{"class":78},".f1(x))\n",[68,36798,36799],{"class":70,"line":9466},[68,36800,36801],{"class":302},"        # 还需要dropout对神经元随机进行失活\n",[68,36803,36804,36806,36808,36811,36814],{"class":70,"line":9472},[68,36805,32585],{"class":78},[68,36807,1685],{"class":316},[68,36809,36810],{"class":78},"F.dropout(x,",[68,36812,36813],{"class":85},"0.5",[68,36815,1646],{"class":78},[68,36817,36818,36820,36822,36824,36826,36828],{"class":70,"line":9499},[68,36819,32585],{"class":78},[68,36821,1685],{"class":316},[68,36823,32307],{"class":85},[68,36825,36668],{"class":78},[68,36827,32307],{"class":85},[68,36829,36830],{"class":78},".f2(x))\n",[68,36832,36833,36835,36837,36839,36841],{"class":70,"line":9504},[68,36834,32585],{"class":78},[68,36836,1685],{"class":316},[68,36838,36810],{"class":78},[68,36840,36813],{"class":85},[68,36842,1646],{"class":78},[68,36844,36845],{"class":70,"line":9510},[68,36846,36847],{"class":302},"        # 直接输出\n",[68,36849,36850,36852,36854,36856],{"class":70,"line":9522},[68,36851,32585],{"class":78},[68,36853,1685],{"class":316},[68,36855,32307],{"class":85},[68,36857,36858],{"class":78},".f3(x)\n",[68,36860,36861],{"class":70,"line":9534},[68,36862,36863],{"class":302},"        # 前向传播输出\n",[68,36865,36866,36868],{"class":70,"line":9546},[68,36867,16240],{"class":316},[68,36869,32693],{"class":78},[68,36871,36872],{"class":70,"line":11204},[68,36873,36874],{"class":302},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[68,36876,36877,36879,36881,36883,36885],{"class":70,"line":11229},[68,36878,3023],{"class":316},[68,36880,32704],{"class":85},[68,36882,4439],{"class":316},[68,36884,32709],{"class":1742},[68,36886,5229],{"class":78},[68,36888,36889,36891,36893,36895,36897,36899,36901,36903,36905],{"class":70,"line":11252},[68,36890,32721],{"class":78},[68,36892,1685],{"class":316},[68,36894,31935],{"class":78},[68,36896,32728],{"class":1742},[68,36898,3195],{"class":316},[68,36900,32733],{"class":78},[68,36902,3192],{"class":316},[68,36904,31960],{"class":1742},[68,36906,1646],{"class":78},[68,36908,36909],{"class":70,"line":11276},[68,36910,36911],{"class":302},"    # 模型实例化，然后将实例化的模型放到设备中\n",[68,36913,36914,36916,36918],{"class":70,"line":11281},[68,36915,32773],{"class":78},[68,36917,1685],{"class":316},[68,36919,36920],{"class":78},"AlexNet().to(device)\n",[68,36922,36923,36925,36927,36929,36931,36934,36936,36938],{"class":70,"line":11286},[68,36924,32783],{"class":85},[68,36926,32786],{"class":78},[68,36928,1846],{"class":85},[68,36930,2007],{"class":78},[68,36932,36933],{"class":85},"227",[68,36935,2007],{"class":78},[68,36937,36933],{"class":85},[68,36939,32799],{"class":78},[263,36941,36942],{"start":82},[27,36943,32812],{},[58,36945,36947],{"className":31862,"code":36946,"language":31864,"meta":63,"style":63},"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",[65,36948,36949,36955,36961,36971,36977,36987,36997,37007,37017,37027,37031,37042,37052,37056,37060,37064,37072,37084,37094,37110,37120,37152,37166,37176,37186,37190,37200,37214,37224,37234,37244,37250,37254,37258,37262,37266,37270,37278,37298,37302,37306,37310,37314,37318,37334,37338,37342,37350,37354,37358,37366,37370,37374,37378,37386,37390,37394,37398,37402,37410,37414,37422,37426,37434,37438,37446,37450,37458,37462,37466,37474,37478,37482,37486,37498,37522,37536,37540,37544,37548,37556,37560,37568,37572,37580,37584,37592,37596,37604,37608,37616,37620,37632,37636,37644,37648,37656,37660,37664,37668,37672,37680,37684,37700,37704,37712,37716,37720,37724,37728,37732,37736,37740,37756,37760,37772,37776,37788,37792,37804,37808,37816,37820,37828,37832,37836,37841,37847,37851,37860,37864,37881,37885,37894,37898,37916,37929,37934,37947,37951,37955,37963,37967,37971,37979,37983,37991,37995,38003,38007,38011,38053,38095,38099,38103,38119,38123,38139,38143,38147,38155,38159,38163,38175,38213,38218,38223,38232,38236,38250,38260,38266,38272,38278,38284,38288,38292,38298,38302,38306,38314,38318,38336,38340,38344,38348,38364,38368,38372,38376,38380,38384,38404,38424,38428,38432,38436,38444,38452,38456,38472,38492,38512,38516,38520,38528,38536,38540,38544,38548,38560,38564,38574,38582,38599],{"__ignoreMap":63},[68,36950,36951,36953],{"class":70,"line":71},[68,36952,31876],{"class":316},[68,36954,33306],{"class":78},[68,36956,36957,36959],{"class":70,"line":82},[68,36958,31876],{"class":316},[68,36960,33313],{"class":78},[68,36962,36963,36965,36967,36969],{"class":70,"line":98},[68,36964,31876],{"class":316},[68,36966,33324],{"class":78},[68,36968,32867],{"class":316},[68,36970,33329],{"class":78},[68,36972,36973,36975],{"class":70,"line":104},[68,36974,31876],{"class":316},[68,36976,31879],{"class":78},[68,36978,36979,36981,36983,36985],{"class":70,"line":112},[68,36980,32221],{"class":316},[68,36982,32899],{"class":78},[68,36984,31876],{"class":316},[68,36986,33346],{"class":78},[68,36988,36989,36991,36993,36995],{"class":70,"line":124},[68,36990,32221],{"class":316},[68,36992,32852],{"class":78},[68,36994,31876],{"class":316},[68,36996,32857],{"class":78},[68,36998,36999,37001,37003,37005],{"class":70,"line":1496},[68,37000,32221],{"class":316},[68,37002,32882],{"class":78},[68,37004,31876],{"class":316},[68,37006,32887],{"class":78},[68,37008,37009,37011,37013,37015],{"class":70,"line":1502},[68,37010,31876],{"class":316},[68,37012,32899],{"class":78},[68,37014,32867],{"class":316},[68,37016,32904],{"class":78},[68,37018,37019,37021,37023,37025],{"class":70,"line":1510},[68,37020,31876],{"class":316},[68,37022,32916],{"class":78},[68,37024,32867],{"class":316},[68,37026,32921],{"class":78},[68,37028,37029],{"class":70,"line":1521},[68,37030,33391],{"class":302},[68,37032,37033,37035,37037,37039],{"class":70,"line":3103},[68,37034,32221],{"class":316},[68,37036,33398],{"class":78},[68,37038,31876],{"class":316},[68,37040,37041],{"class":78}," AlexNet\n",[68,37043,37044,37046,37048,37050],{"class":70,"line":3108},[68,37045,32221],{"class":316},[68,37047,32224],{"class":78},[68,37049,31876],{"class":316},[68,37051,32229],{"class":78},[68,37053,37054],{"class":70,"line":3114},[68,37055,3890],{"emptyLinePlaceholder":1567},[68,37057,37058],{"class":70,"line":3119},[68,37059,3890],{"emptyLinePlaceholder":1567},[68,37061,37062],{"class":70,"line":3133},[68,37063,33426],{"class":302},[68,37065,37066,37068,37070],{"class":70,"line":3138},[68,37067,33431],{"class":316},[68,37069,33434],{"class":74},[68,37071,33437],{"class":78},[68,37073,37074,37076,37078,37080,37082],{"class":70,"line":3144},[68,37075,33442],{"class":78},[68,37077,1685],{"class":316},[68,37079,32939],{"class":78},[68,37081,32947],{"class":1742},[68,37083,32950],{"class":78},[68,37085,37086,37088,37090,37092],{"class":70,"line":3165},[68,37087,33455],{"class":6705},[68,37089,1685],{"class":316},[68,37091,32960],{"class":85},[68,37093,32950],{"class":78},[68,37095,37096,37098,37100,37102,37104,37106,37108],{"class":70,"line":3170},[68,37097,33466],{"class":6705},[68,37099,1685],{"class":316},[68,37101,32977],{"class":78},[68,37103,32980],{"class":6705},[68,37105,1685],{"class":316},[68,37107,36933],{"class":85},[68,37109,32988],{"class":78},[68,37111,37112,37114,37116,37118],{"class":70,"line":3184},[68,37113,33483],{"class":6705},[68,37115,1685],{"class":316},[68,37117,32960],{"class":85},[68,37119,1646],{"class":78},[68,37121,37122,37124,37126,37128,37130,37132,37134,37136,37138,37140,37142,37144,37146,37148,37150],{"class":70,"line":3189},[68,37123,33494],{"class":78},[68,37125,1685],{"class":316},[68,37127,33499],{"class":78},[68,37129,33502],{"class":85},[68,37131,1640],{"class":78},[68,37133,33507],{"class":85},[68,37135,2083],{"class":316},[68,37137,8847],{"class":85},[68,37139,33514],{"class":78},[68,37141,33502],{"class":85},[68,37143,1640],{"class":78},[68,37145,33521],{"class":85},[68,37147,2083],{"class":316},[68,37149,8847],{"class":85},[68,37151,33528],{"class":78},[68,37153,37154,37156,37158,37160,37162,37164],{"class":70,"line":3218},[68,37155,33533],{"class":78},[68,37157,1685],{"class":316},[68,37159,33538],{"class":78},[68,37161,33021],{"class":6705},[68,37163,1685],{"class":316},[68,37165,33026],{"class":78},[68,37167,37168,37170,37172,37174],{"class":70,"line":3223},[68,37169,33549],{"class":6705},[68,37171,1685],{"class":316},[68,37173,33554],{"class":85},[68,37175,32950],{"class":78},[68,37177,37178,37180,37182,37184],{"class":70,"line":3240},[68,37179,33561],{"class":6705},[68,37181,1685],{"class":316},[68,37183,32960],{"class":85},[68,37185,32950],{"class":78},[68,37187,37188],{"class":70,"line":3245},[68,37189,33572],{"class":302},[68,37191,37192,37194,37196,37198],{"class":70,"line":3250},[68,37193,33577],{"class":6705},[68,37195,1685],{"class":316},[68,37197,2024],{"class":85},[68,37199,1646],{"class":78},[68,37201,37202,37204,37206,37208,37210,37212],{"class":70,"line":3255},[68,37203,33588],{"class":78},[68,37205,1685],{"class":316},[68,37207,33018],{"class":78},[68,37209,33021],{"class":6705},[68,37211,1685],{"class":316},[68,37213,33599],{"class":78},[68,37215,37216,37218,37220,37222],{"class":70,"line":3269},[68,37217,33604],{"class":6705},[68,37219,1685],{"class":316},[68,37221,33554],{"class":85},[68,37223,32950],{"class":78},[68,37225,37226,37228,37230,37232],{"class":70,"line":3274},[68,37227,33615],{"class":6705},[68,37229,1685],{"class":316},[68,37231,32960],{"class":85},[68,37233,32950],{"class":78},[68,37235,37236,37238,37240,37242],{"class":70,"line":4067},[68,37237,33626],{"class":6705},[68,37239,1685],{"class":316},[68,37241,2024],{"class":85},[68,37243,1646],{"class":78},[68,37245,37246,37248],{"class":70,"line":4081},[68,37247,5580],{"class":316},[68,37249,33639],{"class":78},[68,37251,37252],{"class":70,"line":4089},[68,37253,3890],{"emptyLinePlaceholder":1567},[68,37255,37256],{"class":70,"line":4094},[68,37257,33648],{"class":302},[68,37259,37260],{"class":70,"line":4100},[68,37261,33653],{"class":302},[68,37263,37264],{"class":70,"line":4106},[68,37265,3890],{"emptyLinePlaceholder":1567},[68,37267,37268],{"class":70,"line":4111},[68,37269,33662],{"class":302},[68,37271,37272,37274,37276],{"class":70,"line":9437},[68,37273,33431],{"class":316},[68,37275,33669],{"class":74},[68,37277,33672],{"class":78},[68,37279,37280,37282,37284,37286,37288,37290,37292,37294,37296],{"class":70,"line":9461},[68,37281,32721],{"class":78},[68,37283,1685],{"class":316},[68,37285,31935],{"class":78},[68,37287,32728],{"class":1742},[68,37289,3195],{"class":316},[68,37291,32733],{"class":78},[68,37293,3192],{"class":316},[68,37295,33691],{"class":1742},[68,37297,1646],{"class":78},[68,37299,37300],{"class":70,"line":9466},[68,37301,3890],{"emptyLinePlaceholder":1567},[68,37303,37304],{"class":70,"line":9472},[68,37305,3890],{"emptyLinePlaceholder":1567},[68,37307,37308],{"class":70,"line":9499},[68,37309,33706],{"class":302},[68,37311,37312],{"class":70,"line":9504},[68,37313,33711],{"class":302},[68,37315,37316],{"class":70,"line":9510},[68,37317,33716],{"class":302},[68,37319,37320,37322,37324,37326,37328,37330,37332],{"class":70,"line":9522},[68,37321,33721],{"class":78},[68,37323,1685],{"class":316},[68,37325,33726],{"class":78},[68,37327,33729],{"class":6705},[68,37329,1685],{"class":316},[68,37331,33734],{"class":85},[68,37333,1646],{"class":78},[68,37335,37336],{"class":70,"line":9534},[68,37337,3890],{"emptyLinePlaceholder":1567},[68,37339,37340],{"class":70,"line":9546},[68,37341,33745],{"class":302},[68,37343,37344,37346,37348],{"class":70,"line":11204},[68,37345,33750],{"class":78},[68,37347,1685],{"class":316},[68,37349,33755],{"class":78},[68,37351,37352],{"class":70,"line":11229},[68,37353,3890],{"emptyLinePlaceholder":1567},[68,37355,37356],{"class":70,"line":11252},[68,37357,33764],{"class":302},[68,37359,37360,37362,37364],{"class":70,"line":11276},[68,37361,32773],{"class":78},[68,37363,1685],{"class":316},[68,37365,33773],{"class":78},[68,37367,37368],{"class":70,"line":11281},[68,37369,33778],{"class":302},[68,37371,37372],{"class":70,"line":11286},[68,37373,33783],{"class":302},[68,37375,37376],{"class":70,"line":11291},[68,37377,33788],{"class":302},[68,37379,37380,37382,37384],{"class":70,"line":11300},[68,37381,33793],{"class":78},[68,37383,1685],{"class":316},[68,37385,33798],{"class":78},[68,37387,37388],{"class":70,"line":11305},[68,37389,3890],{"emptyLinePlaceholder":1567},[68,37391,37392],{"class":70,"line":11311},[68,37393,3890],{"emptyLinePlaceholder":1567},[68,37395,37396],{"class":70,"line":11332},[68,37397,33811],{"class":302},[68,37399,37400],{"class":70,"line":11338},[68,37401,33816],{"class":302},[68,37403,37404,37406,37408],{"class":70,"line":11352},[68,37405,33821],{"class":78},[68,37407,1685],{"class":316},[68,37409,33826],{"class":85},[68,37411,37412],{"class":70,"line":11358},[68,37413,33831],{"class":302},[68,37415,37416,37418,37420],{"class":70,"line":11385},[68,37417,33836],{"class":78},[68,37419,1685],{"class":316},[68,37421,33841],{"class":78},[68,37423,37424],{"class":70,"line":11394},[68,37425,33846],{"class":302},[68,37427,37428,37430,37432],{"class":70,"line":11400},[68,37429,33851],{"class":78},[68,37431,1685],{"class":316},[68,37433,33841],{"class":78},[68,37435,37436],{"class":70,"line":11408},[68,37437,33860],{"class":302},[68,37439,37440,37442,37444],{"class":70,"line":11413},[68,37441,33865],{"class":78},[68,37443,1685],{"class":316},[68,37445,33841],{"class":78},[68,37447,37448],{"class":70,"line":18091},[68,37449,33874],{"class":302},[68,37451,37452,37454,37456],{"class":70,"line":18097},[68,37453,33879],{"class":78},[68,37455,1685],{"class":316},[68,37457,33841],{"class":78},[68,37459,37460],{"class":70,"line":18120},[68,37461,3890],{"emptyLinePlaceholder":1567},[68,37463,37464],{"class":70,"line":18126},[68,37465,33892],{"class":302},[68,37467,37468,37470,37472],{"class":70,"line":18149},[68,37469,33897],{"class":78},[68,37471,1685],{"class":316},[68,37473,33902],{"class":78},[68,37475,37476],{"class":70,"line":18163},[68,37477,3890],{"emptyLinePlaceholder":1567},[68,37479,37480],{"class":70,"line":18183},[68,37481,3890],{"emptyLinePlaceholder":1567},[68,37483,37484],{"class":70,"line":18189},[68,37485,33915],{"class":302},[68,37487,37488,37490,37492,37494,37496],{"class":70,"line":18200},[68,37489,4691],{"class":316},[68,37491,33922],{"class":78},[68,37493,27529],{"class":316},[68,37495,33927],{"class":85},[68,37497,33930],{"class":78},[68,37499,37500,37502,37504,37506,37508,37510,37512,37514,37516,37518,37520],{"class":70,"line":18223},[68,37501,33935],{"class":85},[68,37503,1640],{"class":78},[68,37505,33940],{"class":1742},[68,37507,33943],{"class":85},[68,37509,2212],{"class":1742},[68,37511,33943],{"class":85},[68,37513,1880],{"class":1742},[68,37515,33952],{"class":78},[68,37517,2160],{"class":316},[68,37519,1846],{"class":85},[68,37521,31981],{"class":78},[68,37523,37524,37526,37528,37530,37532,37534],{"class":70,"line":18245},[68,37525,33935],{"class":85},[68,37527,1640],{"class":78},[68,37529,33967],{"class":1742},[68,37531,2083],{"class":316},[68,37533,313],{"class":85},[68,37535,1646],{"class":78},[68,37537,37538],{"class":70,"line":18250},[68,37539,3890],{"emptyLinePlaceholder":1567},[68,37541,37542],{"class":70,"line":18256},[68,37543,33982],{"class":302},[68,37545,37546],{"class":70,"line":18270},[68,37547,33987],{"class":302},[68,37549,37550,37552,37554],{"class":70,"line":18283},[68,37551,33992],{"class":78},[68,37553,1685],{"class":316},[68,37555,33826],{"class":85},[68,37557,37558],{"class":70,"line":18288},[68,37559,34001],{"class":302},[68,37561,37562,37564,37566],{"class":70,"line":18302},[68,37563,34006],{"class":78},[68,37565,1685],{"class":316},[68,37567,4575],{"class":85},[68,37569,37570],{"class":70,"line":18307},[68,37571,34015],{"class":302},[68,37573,37574,37576,37578],{"class":70,"line":18313},[68,37575,34020],{"class":78},[68,37577,1685],{"class":316},[68,37579,33826],{"class":85},[68,37581,37582],{"class":70,"line":18318},[68,37583,34029],{"class":302},[68,37585,37586,37588,37590],{"class":70,"line":18332},[68,37587,34034],{"class":78},[68,37589,1685],{"class":316},[68,37591,4575],{"class":85},[68,37593,37594],{"class":70,"line":18337},[68,37595,34043],{"class":302},[68,37597,37598,37600,37602],{"class":70,"line":18342},[68,37599,34048],{"class":78},[68,37601,1685],{"class":316},[68,37603,4575],{"class":85},[68,37605,37606],{"class":70,"line":18356},[68,37607,34057],{"class":302},[68,37609,37610,37612,37614],{"class":70,"line":18368},[68,37611,34062],{"class":78},[68,37613,1685],{"class":316},[68,37615,4575],{"class":85},[68,37617,37618],{"class":70,"line":18373},[68,37619,34071],{"class":302},[68,37621,37622,37624,37626,37628,37630],{"class":70,"line":18386},[68,37623,4893],{"class":316},[68,37625,33085],{"class":78},[68,37627,27529],{"class":316},[68,37629,33090],{"class":85},[68,37631,34084],{"class":78},[68,37633,37634],{"class":70,"line":18391},[68,37635,34089],{"class":302},[68,37637,37638,37640,37642],{"class":70,"line":18396},[68,37639,34094],{"class":78},[68,37641,1685],{"class":316},[68,37643,34099],{"class":78},[68,37645,37646],{"class":70,"line":18401},[68,37647,34104],{"class":302},[68,37649,37650,37652,37654],{"class":70,"line":18414},[68,37651,34109],{"class":78},[68,37653,1685],{"class":316},[68,37655,34114],{"class":78},[68,37657,37658],{"class":70,"line":18419},[68,37659,34120],{"class":302},[68,37661,37662],{"class":70,"line":34117},[68,37663,34126],{"class":78},[68,37665,37666],{"class":70,"line":34123},[68,37667,34132],{"class":302},[68,37669,37670],{"class":70,"line":34129},[68,37671,34138],{"class":302},[68,37673,37674,37676,37678],{"class":70,"line":34135},[68,37675,34144],{"class":78},[68,37677,1685],{"class":316},[68,37679,34149],{"class":78},[68,37681,37682],{"class":70,"line":34141},[68,37683,34155],{"class":302},[68,37685,37686,37688,37690,37692,37694,37696,37698],{"class":70,"line":34152},[68,37687,34161],{"class":78},[68,37689,1685],{"class":316},[68,37691,34166],{"class":78},[68,37693,34169],{"class":6705},[68,37695,1685],{"class":316},[68,37697,1846],{"class":85},[68,37699,1646],{"class":78},[68,37701,37702],{"class":70,"line":34158},[68,37703,34181],{"class":302},[68,37705,37706,37708,37710],{"class":70,"line":34178},[68,37707,34187],{"class":78},[68,37709,1685],{"class":316},[68,37711,34192],{"class":78},[68,37713,37714],{"class":70,"line":34184},[68,37715,34198],{"class":302},[68,37717,37718],{"class":70,"line":34195},[68,37719,34204],{"class":78},[68,37721,37722],{"class":70,"line":34201},[68,37723,34210],{"class":302},[68,37725,37726],{"class":70,"line":34207},[68,37727,34216],{"class":78},[68,37729,37730],{"class":70,"line":34213},[68,37731,34222],{"class":302},[68,37733,37734],{"class":70,"line":34219},[68,37735,34228],{"class":78},[68,37737,37738],{"class":70,"line":34225},[68,37739,34234],{"class":302},[68,37741,37742,37744,37746,37748,37750,37752,37754],{"class":70,"line":34231},[68,37743,34240],{"class":78},[68,37745,10965],{"class":316},[68,37747,34245],{"class":78},[68,37749,2083],{"class":316},[68,37751,34250],{"class":78},[68,37753,1248],{"class":85},[68,37755,1646],{"class":78},[68,37757,37758],{"class":70,"line":34237},[68,37759,34260],{"class":302},[68,37761,37762,37764,37766,37768,37770],{"class":70,"line":34257},[68,37763,34266],{"class":78},[68,37765,10965],{"class":316},[68,37767,34271],{"class":78},[68,37769,4439],{"class":316},[68,37771,34276],{"class":78},[68,37773,37774],{"class":70,"line":34263},[68,37775,34282],{"class":302},[68,37777,37778,37780,37782,37784,37786],{"class":70,"line":34279},[68,37779,34288],{"class":78},[68,37781,10965],{"class":316},[68,37783,34250],{"class":78},[68,37785,1248],{"class":85},[68,37787,1646],{"class":78},[68,37789,37790],{"class":70,"line":34285},[68,37791,34302],{"class":302},[68,37793,37794,37796,37798,37800,37802],{"class":70,"line":34299},[68,37795,4893],{"class":316},[68,37797,34310],{"class":78},[68,37799,27529],{"class":316},[68,37801,33090],{"class":85},[68,37803,34317],{"class":78},[68,37805,37806],{"class":70,"line":34305},[68,37807,34323],{"class":302},[68,37809,37810,37812,37814],{"class":70,"line":34320},[68,37811,34094],{"class":78},[68,37813,1685],{"class":316},[68,37815,34099],{"class":78},[68,37817,37818],{"class":70,"line":34326},[68,37819,34338],{"class":302},[68,37821,37822,37824,37826],{"class":70,"line":34335},[68,37823,34109],{"class":78},[68,37825,1685],{"class":316},[68,37827,34114],{"class":78},[68,37829,37830],{"class":70,"line":34341},[68,37831,34353],{"class":302},[68,37833,37834],{"class":70,"line":34350},[68,37835,34359],{"class":78},[68,37837,37838],{"class":70,"line":34356},[68,37839,37840],{"class":302},"            # 验证时不计算梯度以节省内存\u002F计算\n",[68,37842,37843,37845],{"class":70,"line":34362},[68,37844,34365],{"class":316},[68,37846,34368],{"class":78},[68,37848,37849],{"class":70,"line":34371},[68,37850,34374],{"class":302},[68,37852,37853,37856,37858],{"class":70,"line":34377},[68,37854,37855],{"class":78},"                output",[68,37857,1685],{"class":316},[68,37859,34149],{"class":78},[68,37861,37862],{"class":70,"line":34388},[68,37863,34391],{"class":302},[68,37865,37866,37869,37871,37873,37875,37877,37879],{"class":70,"line":34394},[68,37867,37868],{"class":78},"                pre_lab",[68,37870,1685],{"class":316},[68,37872,34166],{"class":78},[68,37874,34169],{"class":6705},[68,37876,1685],{"class":316},[68,37878,1846],{"class":85},[68,37880,1646],{"class":78},[68,37882,37883],{"class":70,"line":34413},[68,37884,34416],{"class":302},[68,37886,37887,37890,37892],{"class":70,"line":34419},[68,37888,37889],{"class":78},"                val_batch_loss",[68,37891,1685],{"class":316},[68,37893,34192],{"class":78},[68,37895,37896],{"class":70,"line":34430},[68,37897,34433],{"class":302},[68,37899,37900,37903,37905,37908,37910,37912,37914],{"class":70,"line":34436},[68,37901,37902],{"class":78},"                val_loss",[68,37904,10965],{"class":316},[68,37906,37907],{"class":78},"val_batch_loss.item()",[68,37909,2083],{"class":316},[68,37911,34250],{"class":78},[68,37913,1248],{"class":85},[68,37915,1646],{"class":78},[68,37917,37918,37921,37923,37925,37927],{"class":70,"line":34456},[68,37919,37920],{"class":78},"                val_corrects",[68,37922,10965],{"class":316},[68,37924,34271],{"class":78},[68,37926,4439],{"class":316},[68,37928,34276],{"class":78},[68,37930,37931],{"class":70,"line":34472},[68,37932,37933],{"class":302},"            # 当前用于验证的样本数量\n",[68,37935,37936,37939,37941,37943,37945],{"class":70,"line":34478},[68,37937,37938],{"class":78},"            val_num",[68,37940,10965],{"class":316},[68,37942,34250],{"class":78},[68,37944,1248],{"class":85},[68,37946,1646],{"class":78},[68,37948,37949],{"class":70,"line":34492},[68,37950,34495],{"class":302},[68,37952,37953],{"class":70,"line":34498},[68,37954,34501],{"class":302},[68,37956,37957,37959,37961],{"class":70,"line":34504},[68,37958,34507],{"class":78},[68,37960,2212],{"class":316},[68,37962,34512],{"class":78},[68,37964,37965],{"class":70,"line":34515},[68,37966,34518],{"class":302},[68,37968,37969],{"class":70,"line":34521},[68,37970,34524],{"class":302},[68,37972,37973,37975,37977],{"class":70,"line":34527},[68,37974,34530],{"class":78},[68,37976,2212],{"class":316},[68,37978,34512],{"class":78},[68,37980,37981],{"class":70,"line":34537},[68,37982,34540],{"class":302},[68,37984,37985,37987,37989],{"class":70,"line":34543},[68,37986,34546],{"class":78},[68,37988,2212],{"class":316},[68,37990,34551],{"class":78},[68,37992,37993],{"class":70,"line":34554},[68,37994,34557],{"class":302},[68,37996,37997,37999,38001],{"class":70,"line":34560},[68,37998,34563],{"class":78},[68,38000,2212],{"class":316},[68,38002,34551],{"class":78},[68,38004,38005],{"class":70,"line":34570},[68,38006,3890],{"emptyLinePlaceholder":1567},[68,38008,38009],{"class":70,"line":34575},[68,38010,34578],{"class":302},[68,38012,38013,38015,38017,38019,38021,38023,38025,38027,38029,38031,38033,38035,38037,38039,38041,38043,38045,38047,38049,38051],{"class":70,"line":34581},[68,38014,33935],{"class":85},[68,38016,1640],{"class":78},[68,38018,5082],{"class":1742},[68,38020,33943],{"class":85},[68,38022,34592],{"class":1742},[68,38024,2523],{"class":85},[68,38026,34597],{"class":316},[68,38028,2573],{"class":85},[68,38030,34602],{"class":1742},[68,38032,2523],{"class":85},[68,38034,34597],{"class":316},[68,38036,2573],{"class":85},[68,38038,5082],{"class":1742},[68,38040,34613],{"class":78},[68,38042,2160],{"class":316},[68,38044,1846],{"class":85},[68,38046,34620],{"class":78},[68,38048,2160],{"class":316},[68,38050,1846],{"class":85},[68,38052,34627],{"class":78},[68,38054,38055,38057,38059,38061,38063,38065,38067,38069,38071,38073,38075,38077,38079,38081,38083,38085,38087,38089,38091,38093],{"class":70,"line":34630},[68,38056,33935],{"class":85},[68,38058,1640],{"class":78},[68,38060,5082],{"class":1742},[68,38062,33943],{"class":85},[68,38064,34641],{"class":1742},[68,38066,2523],{"class":85},[68,38068,34597],{"class":316},[68,38070,2573],{"class":85},[68,38072,34650],{"class":1742},[68,38074,2523],{"class":85},[68,38076,34597],{"class":316},[68,38078,2573],{"class":85},[68,38080,5082],{"class":1742},[68,38082,34661],{"class":78},[68,38084,2160],{"class":316},[68,38086,1846],{"class":85},[68,38088,34668],{"class":78},[68,38090,2160],{"class":316},[68,38092,1846],{"class":85},[68,38094,34627],{"class":78},[68,38096,38097],{"class":70,"line":34677},[68,38098,3890],{"emptyLinePlaceholder":1567},[68,38100,38101],{"class":70,"line":34682},[68,38102,34685],{"class":302},[68,38104,38105,38107,38109,38111,38113,38115,38117],{"class":70,"line":34688},[68,38106,3987],{"class":316},[68,38108,34693],{"class":78},[68,38110,2160],{"class":316},[68,38112,1846],{"class":85},[68,38114,2567],{"class":78},[68,38116,2587],{"class":316},[68,38118,34704],{"class":78},[68,38120,38121],{"class":70,"line":34707},[68,38122,34710],{"class":302},[68,38124,38125,38127,38129,38131,38133,38135,38137],{"class":70,"line":34713},[68,38126,34716],{"class":78},[68,38128,1679],{"class":85},[68,38130,1685],{"class":316},[68,38132,34723],{"class":78},[68,38134,2160],{"class":316},[68,38136,1846],{"class":85},[68,38138,34730],{"class":78},[68,38140,38141],{"class":70,"line":34733},[68,38142,34736],{"class":302},[68,38144,38145],{"class":70,"line":34739},[68,38146,34742],{"class":302},[68,38148,38149,38151,38153],{"class":70,"line":34745},[68,38150,34748],{"class":78},[68,38152,1685],{"class":316},[68,38154,33798],{"class":78},[68,38156,38157],{"class":70,"line":34755},[68,38158,3890],{"emptyLinePlaceholder":1567},[68,38160,38161],{"class":70,"line":34760},[68,38162,34763],{"class":302},[68,38164,38165,38167,38169,38171,38173],{"class":70,"line":34766},[68,38166,34769],{"class":78},[68,38168,1685],{"class":316},[68,38170,34774],{"class":78},[68,38172,2160],{"class":316},[68,38174,34779],{"class":78},[68,38176,38177,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201,38203,38205,38207,38209,38211],{"class":70,"line":34782},[68,38178,33935],{"class":85},[68,38180,1640],{"class":78},[68,38182,34789],{"class":1742},[68,38184,2523],{"class":85},[68,38186,34794],{"class":316},[68,38188,2573],{"class":85},[68,38190,2172],{"class":1742},[68,38192,2523],{"class":85},[68,38194,34794],{"class":316},[68,38196,2573],{"class":85},[68,38198,34807],{"class":1742},[68,38200,34810],{"class":78},[68,38202,34813],{"class":316},[68,38204,2534],{"class":85},[68,38206,34818],{"class":78},[68,38208,1957],{"class":316},[68,38210,2534],{"class":85},[68,38212,31981],{"class":78},[68,38214,38215],{"class":70,"line":34827},[68,38216,38217],{"class":302},"    # 选择最优参数并保存\n",[68,38219,38220],{"class":70,"line":34833},[68,38221,38222],{"class":302},"    # 保存最佳模型权重字典\n",[68,38224,38225,38228,38230],{"class":70,"line":34839},[68,38226,38227],{"class":78},"    torch.save(best_model_wts,",[68,38229,34851],{"class":1742},[68,38231,1646],{"class":78},[68,38233,38234],{"class":70,"line":34845},[68,38235,34871],{"class":302},[68,38237,38238,38240,38242,38244,38246,38248],{"class":70,"line":34856},[68,38239,34877],{"class":78},[68,38241,1685],{"class":316},[68,38243,34882],{"class":78},[68,38245,34885],{"class":6705},[68,38247,1685],{"class":316},[68,38249,3038],{"class":78},[68,38251,38252,38254,38256,38258],{"class":70,"line":34862},[68,38253,34895],{"class":1742},[68,38255,2486],{"class":78},[68,38257,34900],{"class":85},[68,38259,34903],{"class":78},[68,38261,38262,38264],{"class":70,"line":34868},[68,38263,34909],{"class":1742},[68,38265,34912],{"class":78},[68,38267,38268,38270],{"class":70,"line":34874},[68,38269,34918],{"class":1742},[68,38271,34921],{"class":78},[68,38273,38274,38276],{"class":70,"line":34892},[68,38275,34927],{"class":1742},[68,38277,34930],{"class":78},[68,38279,38280,38282],{"class":70,"line":34906},[68,38281,34936],{"class":1742},[68,38283,34939],{"class":78},[68,38285,38286],{"class":70,"line":34915},[68,38287,34945],{"class":78},[68,38289,38290],{"class":70,"line":34924},[68,38291,34951],{"class":302},[68,38293,38294,38296],{"class":70,"line":34933},[68,38295,5580],{"class":316},[68,38297,34959],{"class":78},[68,38299,38300],{"class":70,"line":34942},[68,38301,3890],{"emptyLinePlaceholder":1567},[68,38303,38304],{"class":70,"line":34948},[68,38305,34970],{"class":302},[68,38307,38308,38310,38312],{"class":70,"line":34954},[68,38309,33431],{"class":316},[68,38311,34978],{"class":74},[68,38313,34981],{"class":78},[68,38315,38316],{"class":70,"line":34962},[68,38317,34987],{"class":302},[68,38319,38320,38322,38324,38326,38328,38330,38332,38334],{"class":70,"line":34967},[68,38321,34993],{"class":78},[68,38323,33177],{"class":6705},[68,38325,1685],{"class":316},[68,38327,1640],{"class":78},[68,38329,2126],{"class":85},[68,38331,2007],{"class":78},[68,38333,1922],{"class":85},[68,38335,31981],{"class":78},[68,38337,38338],{"class":70,"line":34973},[68,38339,35013],{"class":302},[68,38341,38342],{"class":70,"line":34984},[68,38343,35019],{"class":302},[68,38345,38346],{"class":70,"line":34990},[68,38347,35025],{"class":302},[68,38349,38350,38352,38354,38356,38358,38360,38362],{"class":70,"line":35010},[68,38351,33211],{"class":78},[68,38353,1846],{"class":85},[68,38355,2007],{"class":78},[68,38357,1715],{"class":85},[68,38359,2007],{"class":78},[68,38361,1846],{"class":85},[68,38363,1646],{"class":78},[68,38365,38366],{"class":70,"line":35016},[68,38367,35048],{"class":302},[68,38369,38370],{"class":70,"line":35022},[68,38371,35054],{"class":302},[68,38373,38374],{"class":70,"line":35028},[68,38375,35060],{"class":302},[68,38377,38378],{"class":70,"line":35045},[68,38379,35066],{"class":302},[68,38381,38382],{"class":70,"line":35051},[68,38383,35072],{"class":302},[68,38385,38386,38388,38390,38392,38394,38396,38398,38400,38402],{"class":70,"line":35057},[68,38387,35078],{"class":78},[68,38389,35081],{"class":1742},[68,38391,35084],{"class":78},[68,38393,35087],{"class":1742},[68,38395,2007],{"class":78},[68,38397,35092],{"class":6705},[68,38399,1685],{"class":316},[68,38401,35097],{"class":1742},[68,38403,1646],{"class":78},[68,38405,38406,38408,38410,38412,38414,38416,38418,38420,38422],{"class":70,"line":35063},[68,38407,35078],{"class":78},[68,38409,35081],{"class":1742},[68,38411,35109],{"class":78},[68,38413,35112],{"class":1742},[68,38415,2007],{"class":78},[68,38417,35092],{"class":6705},[68,38419,1685],{"class":316},[68,38421,35121],{"class":1742},[68,38423,1646],{"class":78},[68,38425,38426],{"class":70,"line":35069},[68,38427,35129],{"class":302},[68,38429,38430],{"class":70,"line":35075},[68,38431,35135],{"class":78},[68,38433,38434],{"class":70,"line":35102},[68,38435,35141],{"class":302},[68,38437,38438,38440,38442],{"class":70,"line":35126},[68,38439,35147],{"class":78},[68,38441,35150],{"class":1742},[68,38443,1646],{"class":78},[68,38445,38446,38448,38450],{"class":70,"line":35132},[68,38447,35158],{"class":78},[68,38449,35161],{"class":1742},[68,38451,1646],{"class":78},[68,38453,38454],{"class":70,"line":35138},[68,38455,35169],{"class":302},[68,38457,38458,38460,38462,38464,38466,38468,38470],{"class":70,"line":35144},[68,38459,33211],{"class":78},[68,38461,1846],{"class":85},[68,38463,2007],{"class":78},[68,38465,1715],{"class":85},[68,38467,2007],{"class":78},[68,38469,1715],{"class":85},[68,38471,1646],{"class":78},[68,38473,38474,38476,38478,38480,38482,38484,38486,38488,38490],{"class":70,"line":35155},[68,38475,35078],{"class":78},[68,38477,35081],{"class":1742},[68,38479,35196],{"class":78},[68,38481,35087],{"class":1742},[68,38483,2007],{"class":78},[68,38485,35092],{"class":6705},[68,38487,1685],{"class":316},[68,38489,35207],{"class":1742},[68,38491,1646],{"class":78},[68,38493,38494,38496,38498,38500,38502,38504,38506,38508,38510],{"class":70,"line":35166},[68,38495,35078],{"class":78},[68,38497,35081],{"class":1742},[68,38499,35219],{"class":78},[68,38501,35112],{"class":1742},[68,38503,2007],{"class":78},[68,38505,35092],{"class":6705},[68,38507,1685],{"class":316},[68,38509,35230],{"class":1742},[68,38511,1646],{"class":78},[68,38513,38514],{"class":70,"line":35172},[68,38515,35238],{"class":302},[68,38517,38518],{"class":70,"line":35189},[68,38519,35135],{"class":78},[68,38521,38522,38524,38526],{"class":70,"line":35212},[68,38523,35147],{"class":78},[68,38525,35081],{"class":1742},[68,38527,1646],{"class":78},[68,38529,38530,38532,38534],{"class":70,"line":35235},[68,38531,35158],{"class":78},[68,38533,35260],{"class":1742},[68,38535,1646],{"class":78},[68,38537,38538],{"class":70,"line":35241},[68,38539,35268],{"class":78},[68,38541,38542],{"class":70,"line":35246},[68,38543,3890],{"emptyLinePlaceholder":1567},[68,38545,38546],{"class":70,"line":35255},[68,38547,35279],{"class":302},[68,38549,38550,38552,38554,38556,38558],{"class":70,"line":35265},[68,38551,3023],{"class":316},[68,38553,32704],{"class":85},[68,38555,4439],{"class":316},[68,38557,32709],{"class":1742},[68,38559,5229],{"class":78},[68,38561,38562],{"class":70,"line":35271},[68,38563,35298],{"class":302},[68,38565,38566,38569,38571],{"class":70,"line":35276},[68,38567,38568],{"class":78},"    AlexNet",[68,38570,1685],{"class":316},[68,38572,38573],{"class":78},"AlexNet()\n",[68,38575,38576,38578,38580],{"class":70,"line":35282},[68,38577,35315],{"class":78},[68,38579,1685],{"class":316},[68,38581,35320],{"class":78},[68,38583,38584,38586,38588,38591,38593,38595,38597],{"class":70,"line":35295},[68,38585,34877],{"class":78},[68,38587,1685],{"class":316},[68,38589,38590],{"class":78},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[68,38592,35333],{"class":6705},[68,38594,1685],{"class":316},[68,38596,333],{"class":85},[68,38598,1646],{"class":78},[68,38600,38601],{"class":70,"line":35301},[68,38602,35345],{"class":78},[263,38604,38605],{"start":98},[27,38606,35358],{},[58,38608,38610],{"className":31862,"code":38609,"language":31864,"meta":63,"style":63},"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",[65,38611,38612,38618,38628,38638,38648,38652,38662,38672,38683,38687,38691,38695,38703,38719,38729,38745,38755,38769,38773,38783,38793,38803,38809,38813,38817,38825,38829,38845,38853,38857,38861,38869,38877,38881,38885,38889,38893,38899,38903,38913,38921,38929,38933,38937,38941,38949,38953,38969,38973,38977,38981,38993,38997,39009,39013,39017,39029,39033,39043,39047,39051,39063,39067,39075,39079,39083,39091,39095,39103,39107,39111,39115,39119,39123,39139,39147,39151,39155,39203,39209,39213,39223,39231,39239,39243,39247,39251,39255,39263,39267,39283,39287,39295,39303],{"__ignoreMap":63},[68,38613,38614,38616],{"class":70,"line":71},[68,38615,31876],{"class":316},[68,38617,31879],{"class":78},[68,38619,38620,38622,38624,38626],{"class":70,"line":82},[68,38621,31876],{"class":316},[68,38623,32899],{"class":78},[68,38625,32867],{"class":316},[68,38627,32904],{"class":78},[68,38629,38630,38632,38634,38636],{"class":70,"line":98},[68,38631,32221],{"class":316},[68,38633,35386],{"class":78},[68,38635,31876],{"class":316},[68,38637,35391],{"class":78},[68,38639,38640,38642,38644,38646],{"class":70,"line":104},[68,38641,32221],{"class":316},[68,38643,32882],{"class":78},[68,38645,31876],{"class":316},[68,38647,32887],{"class":78},[68,38649,38650],{"class":70,"line":112},[68,38651,35406],{"class":302},[68,38653,38654,38656,38658,38660],{"class":70,"line":124},[68,38655,32221],{"class":316},[68,38657,32852],{"class":78},[68,38659,31876],{"class":316},[68,38661,32857],{"class":78},[68,38663,38664,38666,38668,38670],{"class":70,"line":1496},[68,38665,32221],{"class":316},[68,38667,33398],{"class":78},[68,38669,31876],{"class":316},[68,38671,37041],{"class":78},[68,38673,38674,38676,38679,38681],{"class":70,"line":1502},[68,38675,32221],{"class":316},[68,38677,38678],{"class":78}," 练习.AlexNet.model ",[68,38680,31876],{"class":316},[68,38682,37041],{"class":78},[68,38684,38685],{"class":70,"line":1510},[68,38686,3890],{"emptyLinePlaceholder":1567},[68,38688,38689],{"class":70,"line":1521},[68,38690,3890],{"emptyLinePlaceholder":1567},[68,38692,38693],{"class":70,"line":3103},[68,38694,35435],{"class":302},[68,38696,38697,38699,38701],{"class":70,"line":3108},[68,38698,33431],{"class":316},[68,38700,35442],{"class":74},[68,38702,33437],{"class":78},[68,38704,38705,38707,38709,38711,38713,38715,38717],{"class":70,"line":3114},[68,38706,35449],{"class":78},[68,38708,1685],{"class":316},[68,38710,32939],{"class":78},[68,38712,32942],{"class":6705},[68,38714,1685],{"class":316},[68,38716,32947],{"class":1742},[68,38718,32950],{"class":78},[68,38720,38721,38723,38725,38727],{"class":70,"line":3119},[68,38722,35466],{"class":6705},[68,38724,1685],{"class":316},[68,38726,35471],{"class":85},[68,38728,32950],{"class":78},[68,38730,38731,38733,38735,38737,38739,38741,38743],{"class":70,"line":3133},[68,38732,35478],{"class":6705},[68,38734,1685],{"class":316},[68,38736,32977],{"class":78},[68,38738,32980],{"class":6705},[68,38740,1685],{"class":316},[68,38742,36933],{"class":85},[68,38744,32988],{"class":78},[68,38746,38747,38749,38751,38753],{"class":70,"line":3138},[68,38748,35495],{"class":6705},[68,38750,1685],{"class":316},[68,38752,32960],{"class":85},[68,38754,1646],{"class":78},[68,38756,38757,38759,38761,38763,38765,38767],{"class":70,"line":3144},[68,38758,35506],{"class":78},[68,38760,1685],{"class":316},[68,38762,33018],{"class":78},[68,38764,33021],{"class":6705},[68,38766,1685],{"class":316},[68,38768,35517],{"class":78},[68,38770,38771],{"class":70,"line":3165},[68,38772,35522],{"class":302},[68,38774,38775,38777,38779,38781],{"class":70,"line":3170},[68,38776,35527],{"class":6705},[68,38778,1685],{"class":316},[68,38780,1846],{"class":85},[68,38782,32950],{"class":78},[68,38784,38785,38787,38789,38791],{"class":70,"line":3184},[68,38786,35538],{"class":6705},[68,38788,1685],{"class":316},[68,38790,32960],{"class":85},[68,38792,32950],{"class":78},[68,38794,38795,38797,38799,38801],{"class":70,"line":3189},[68,38796,35549],{"class":6705},[68,38798,1685],{"class":316},[68,38800,1248],{"class":85},[68,38802,1646],{"class":78},[68,38804,38805,38807],{"class":70,"line":3218},[68,38806,5580],{"class":316},[68,38808,35562],{"class":78},[68,38810,38811],{"class":70,"line":3223},[68,38812,3890],{"emptyLinePlaceholder":1567},[68,38814,38815],{"class":70,"line":3240},[68,38816,35571],{"class":302},[68,38818,38819,38821,38823],{"class":70,"line":3245},[68,38820,33431],{"class":316},[68,38822,35578],{"class":74},[68,38824,35581],{"class":78},[68,38826,38827],{"class":70,"line":3250},[68,38828,35586],{"class":302},[68,38830,38831,38833,38835,38837,38839,38841,38843],{"class":70,"line":3255},[68,38832,32721],{"class":78},[68,38834,1685],{"class":316},[68,38836,32728],{"class":1742},[68,38838,3195],{"class":316},[68,38840,32733],{"class":78},[68,38842,3192],{"class":316},[68,38844,35603],{"class":1742},[68,38846,38847,38849,38851],{"class":70,"line":3269},[68,38848,32773],{"class":78},[68,38850,1685],{"class":316},[68,38852,33773],{"class":78},[68,38854,38855],{"class":70,"line":3274},[68,38856,3890],{"emptyLinePlaceholder":1567},[68,38858,38859],{"class":70,"line":4067},[68,38860,35620],{"class":302},[68,38862,38863,38865,38867],{"class":70,"line":4081},[68,38864,35625],{"class":78},[68,38866,1685],{"class":316},[68,38868,33826],{"class":85},[68,38870,38871,38873,38875],{"class":70,"line":4089},[68,38872,35634],{"class":78},[68,38874,1685],{"class":316},[68,38876,4575],{"class":85},[68,38878,38879],{"class":70,"line":4094},[68,38880,3890],{"emptyLinePlaceholder":1567},[68,38882,38883],{"class":70,"line":4100},[68,38884,35647],{"class":302},[68,38886,38887],{"class":70,"line":4106},[68,38888,35652],{"class":302},[68,38890,38891],{"class":70,"line":4111},[68,38892,35657],{"class":302},[68,38894,38895,38897],{"class":70,"line":9437},[68,38896,35662],{"class":316},[68,38898,34368],{"class":78},[68,38900,38901],{"class":70,"line":9461},[68,38902,35669],{"class":302},[68,38904,38905,38907,38909,38911],{"class":70,"line":9466},[68,38906,4893],{"class":316},[68,38908,35676],{"class":78},[68,38910,27529],{"class":316},[68,38912,35681],{"class":78},[68,38914,38915,38917,38919],{"class":70,"line":9472},[68,38916,35686],{"class":78},[68,38918,1685],{"class":316},[68,38920,35691],{"class":78},[68,38922,38923,38925,38927],{"class":70,"line":9499},[68,38924,35696],{"class":78},[68,38926,1685],{"class":316},[68,38928,35701],{"class":78},[68,38930,38931],{"class":70,"line":9504},[68,38932,35706],{"class":302},[68,38934,38935],{"class":70,"line":9510},[68,38936,34359],{"class":78},[68,38938,38939],{"class":70,"line":9522},[68,38940,35715],{"class":302},[68,38942,38943,38945,38947],{"class":70,"line":9534},[68,38944,34144],{"class":78},[68,38946,1685],{"class":316},[68,38948,35724],{"class":78},[68,38950,38951],{"class":70,"line":9546},[68,38952,35729],{"class":302},[68,38954,38955,38957,38959,38961,38963,38965,38967],{"class":70,"line":11204},[68,38956,34161],{"class":78},[68,38958,1685],{"class":316},[68,38960,34166],{"class":78},[68,38962,34169],{"class":6705},[68,38964,1685],{"class":316},[68,38966,1846],{"class":85},[68,38968,1646],{"class":78},[68,38970,38971],{"class":70,"line":11229},[68,38972,35750],{"class":302},[68,38974,38975],{"class":70,"line":11252},[68,38976,35755],{"class":302},[68,38978,38979],{"class":70,"line":11276},[68,38980,35760],{"class":302},[68,38982,38983,38985,38987,38989,38991],{"class":70,"line":11281},[68,38984,35765],{"class":78},[68,38986,10965],{"class":316},[68,38988,34271],{"class":78},[68,38990,4439],{"class":316},[68,38992,35774],{"class":78},[68,38994,38995],{"class":70,"line":11286},[68,38996,35779],{"class":302},[68,38998,38999,39001,39003,39005,39007],{"class":70,"line":11291},[68,39000,35784],{"class":78},[68,39002,10965],{"class":316},[68,39004,35789],{"class":78},[68,39006,1248],{"class":85},[68,39008,1646],{"class":78},[68,39010,39011],{"class":70,"line":11300},[68,39012,3890],{"emptyLinePlaceholder":1567},[68,39014,39015],{"class":70,"line":11305},[68,39016,35802],{"class":302},[68,39018,39019,39021,39023,39025,39027],{"class":70,"line":11311},[68,39020,35807],{"class":78},[68,39022,1685],{"class":316},[68,39024,35812],{"class":78},[68,39026,2212],{"class":316},[68,39028,35817],{"class":78},[68,39030,39031],{"class":70,"line":11332},[68,39032,35822],{"class":302},[68,39034,39035,39037,39039,39041],{"class":70,"line":11338},[68,39036,33935],{"class":85},[68,39038,1640],{"class":78},[68,39040,35831],{"class":1742},[68,39042,35834],{"class":78},[68,39044,39045],{"class":70,"line":11352},[68,39046,3890],{"emptyLinePlaceholder":1567},[68,39048,39049],{"class":70,"line":11358},[68,39050,35843],{"class":302},[68,39052,39053,39055,39057,39059,39061],{"class":70,"line":11385},[68,39054,3023],{"class":316},[68,39056,32704],{"class":85},[68,39058,4439],{"class":316},[68,39060,32709],{"class":1742},[68,39062,5229],{"class":78},[68,39064,39065],{"class":70,"line":11394},[68,39066,35860],{"class":302},[68,39068,39069,39071,39073],{"class":70,"line":11400},[68,39070,32773],{"class":78},[68,39072,1685],{"class":316},[68,39074,38573],{"class":78},[68,39076,39077],{"class":70,"line":11408},[68,39078,35873],{"class":302},[68,39080,39081],{"class":70,"line":11413},[68,39082,35878],{"class":302},[68,39084,39085,39087,39089],{"class":70,"line":18091},[68,39086,35883],{"class":78},[68,39088,35886],{"class":1742},[68,39090,31981],{"class":78},[68,39092,39093],{"class":70,"line":18097},[68,39094,35893],{"class":302},[68,39096,39097,39099,39101],{"class":70,"line":18120},[68,39098,35506],{"class":78},[68,39100,1685],{"class":316},[68,39102,35902],{"class":78},[68,39104,39105],{"class":70,"line":18126},[68,39106,35907],{"class":302},[68,39108,39109],{"class":70,"line":18149},[68,39110,35912],{"class":78},[68,39112,39113],{"class":70,"line":18163},[68,39114,3890],{"emptyLinePlaceholder":1567},[68,39116,39117],{"class":70,"line":18183},[68,39118,35921],{"class":302},[68,39120,39121],{"class":70,"line":18189},[68,39122,35926],{"class":302},[68,39124,39125,39127,39129,39131,39133,39135,39137],{"class":70,"line":18200},[68,39126,32721],{"class":78},[68,39128,1685],{"class":316},[68,39130,32728],{"class":1742},[68,39132,3195],{"class":316},[68,39134,32733],{"class":78},[68,39136,3192],{"class":316},[68,39138,35603],{"class":1742},[68,39140,39141,39143,39145],{"class":70,"line":18223},[68,39142,32773],{"class":78},[68,39144,1685],{"class":316},[68,39146,33773],{"class":78},[68,39148,39149],{"class":70,"line":18245},[68,39150,35955],{"class":302},[68,39152,39153],{"class":70,"line":18250},[68,39154,35960],{"class":302},[68,39156,39157,39159,39161,39163,39165,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199,39201],{"class":70,"line":18256},[68,39158,35965],{"class":78},[68,39160,1685],{"class":316},[68,39162,2517],{"class":78},[68,39164,35972],{"class":1742},[68,39166,2007],{"class":78},[68,39168,35977],{"class":1742},[68,39170,2007],{"class":78},[68,39172,35982],{"class":1742},[68,39174,2007],{"class":78},[68,39176,35987],{"class":1742},[68,39178,2007],{"class":78},[68,39180,35992],{"class":1742},[68,39182,2007],{"class":78},[68,39184,35997],{"class":1742},[68,39186,2007],{"class":78},[68,39188,36002],{"class":1742},[68,39190,2007],{"class":78},[68,39192,36007],{"class":1742},[68,39194,2007],{"class":78},[68,39196,36012],{"class":1742},[68,39198,2007],{"class":78},[68,39200,36017],{"class":1742},[68,39202,34730],{"class":78},[68,39204,39205,39207],{"class":70,"line":18270},[68,39206,35662],{"class":316},[68,39208,34368],{"class":78},[68,39210,39211],{"class":70,"line":18283},[68,39212,36030],{"class":302},[68,39214,39215,39217,39219,39221],{"class":70,"line":18288},[68,39216,4893],{"class":316},[68,39218,36037],{"class":78},[68,39220,27529],{"class":316},[68,39222,35681],{"class":78},[68,39224,39225,39227,39229],{"class":70,"line":18302},[68,39226,34094],{"class":78},[68,39228,1685],{"class":316},[68,39230,34099],{"class":78},[68,39232,39233,39235,39237],{"class":70,"line":18307},[68,39234,34109],{"class":78},[68,39236,1685],{"class":316},[68,39238,34114],{"class":78},[68,39240,39241],{"class":70,"line":18313},[68,39242,3890],{"emptyLinePlaceholder":1567},[68,39244,39245],{"class":70,"line":18318},[68,39246,36066],{"class":302},[68,39248,39249],{"class":70,"line":18332},[68,39250,34359],{"class":78},[68,39252,39253],{"class":70,"line":18337},[68,39254,36075],{"class":302},[68,39256,39257,39259,39261],{"class":70,"line":18342},[68,39258,34144],{"class":78},[68,39260,1685],{"class":316},[68,39262,34149],{"class":78},[68,39264,39265],{"class":70,"line":18356},[68,39266,36088],{"class":302},[68,39268,39269,39271,39273,39275,39277,39279,39281],{"class":70,"line":18368},[68,39270,34161],{"class":78},[68,39272,1685],{"class":316},[68,39274,34166],{"class":78},[68,39276,34169],{"class":6705},[68,39278,1685],{"class":316},[68,39280,1846],{"class":85},[68,39282,1646],{"class":78},[68,39284,39285],{"class":70,"line":18373},[68,39286,36109],{"class":302},[68,39288,39289,39291,39293],{"class":70,"line":18386},[68,39290,36114],{"class":78},[68,39292,1685],{"class":316},[68,39294,36119],{"class":78},[68,39296,39297,39299,39301],{"class":70,"line":18391},[68,39298,36124],{"class":78},[68,39300,1685],{"class":316},[68,39302,36129],{"class":78},[68,39304,39305,39307,39309,39311,39313,39315,39317,39319],{"class":70,"line":18396},[68,39306,36134],{"class":85},[68,39308,1640],{"class":78},[68,39310,36139],{"class":1742},[68,39312,36142],{"class":78},[68,39314,36145],{"class":1742},[68,39316,2007],{"class":78},[68,39318,36150],{"class":1742},[68,39320,36153],{"class":78},[19,39322,39324],{"id":39323},"_22vgg","2.2.VGG",[245,39326,39328],{"id":39327},"_221原理","2.2.1.原理",[170,39330,39331],{},[801,39332],{"alt":63,"src":39333},"\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",[170,39335,39336],{},[801,39337],{"alt":63,"src":39338},"\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",[170,39340,39341],{},[801,39342],{"alt":63,"src":39343},"\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",[170,39345,39346],{},"参数详细描述：",[170,39348,39349],{},[801,39350],{"alt":63,"src":39351},"\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",[170,39353,39354],{},[801,39355],{"alt":63,"src":39356},"\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",[170,39358,39359],{},[801,39360],{"alt":63,"src":39361},"\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",[170,39363,39364],{},[801,39365],{"alt":63,"src":39366},"\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",[170,39368,39369],{},[801,39370],{"alt":63,"src":39371},"\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",[245,39373,39375],{"id":39374},"_222代码实现","2.2.2.代码实现",[263,39377,39378],{},[27,39379,39380],{},"网络搭建",[58,39382,39384],{"className":31862,"code":39383,"language":31864,"meta":63,"style":63},"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",[65,39385,39386,39392,39404,39414,39424,39428,39445,39453,39472,39477,39482,39494,39532,39537,39573,39577,39606,39611,39616,39627,39663,39667,39703,39707,39735,39739,39744,39755,39791,39795,39831,39835,39871,39875,39903,39907,39912,39923,39960,39964,40000,40004,40040,40044,40072,40076,40081,40092,40128,40132,40168,40172,40208,40212,40240,40244,40249,40260,40265,40270,40275,40296,40300,40312,40316,40328,40332,40336,40341,40346,40361,40366,40376,40381,40396,40401,40420,40425,40434,40439,40449,40454,40459,40473,40478,40492,40500,40504,40508,40516,40527,40538,40549,40560,40571,40582,40588,40592,40597,40610,40630,40636,40645],{"__ignoreMap":63},[68,39387,39388,39390],{"class":70,"line":71},[68,39389,31876],{"class":316},[68,39391,31879],{"class":78},[68,39393,39394,39396,39399,39401],{"class":70,"line":82},[68,39395,32221],{"class":316},[68,39397,39398],{"class":78}," sympy.core.sympify ",[68,39400,31876],{"class":316},[68,39402,39403],{"class":78}," kernS\n",[68,39405,39406,39408,39410,39412],{"class":70,"line":98},[68,39407,32221],{"class":316},[68,39409,32224],{"class":78},[68,39411,31876],{"class":316},[68,39413,32229],{"class":78},[68,39415,39416,39418,39420,39422],{"class":70,"line":104},[68,39417,32221],{"class":316},[68,39419,32241],{"class":78},[68,39421,31876],{"class":316},[68,39423,32246],{"class":78},[68,39425,39426],{"class":70,"line":112},[68,39427,3890],{"emptyLinePlaceholder":1567},[68,39429,39430,39432,39435,39437,39439,39441,39443],{"class":70,"line":124},[68,39431,16182],{"class":316},[68,39433,39434],{"class":74}," VGG16",[68,39436,1640],{"class":78},[68,39438,32262],{"class":74},[68,39440,2186],{"class":78},[68,39442,32267],{"class":74},[68,39444,32270],{"class":78},[68,39446,39447,39449,39451],{"class":70,"line":1496},[68,39448,32285],{"class":316},[68,39450,32288],{"class":85},[68,39452,32291],{"class":78},[68,39454,39455,39457,39459,39462,39464,39466,39468,39470],{"class":70,"line":1502},[68,39456,32301],{"class":85},[68,39458,1640],{"class":78},[68,39460,39461],{"class":85},"VGG16",[68,39463,13923],{"class":78},[68,39465,32307],{"class":85},[68,39467,32310],{"class":78},[68,39469,32313],{"class":85},[68,39471,3466],{"class":78},[68,39473,39474],{"class":70,"line":1510},[68,39475,39476],{"class":302},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[68,39478,39479],{"class":70,"line":1521},[68,39480,39481],{"class":302},"        # 这里用的是灰度图\n",[68,39483,39484,39486,39489,39491],{"class":70,"line":3103},[68,39485,32329],{"class":85},[68,39487,39488],{"class":78},".block1",[68,39490,1685],{"class":316},[68,39492,39493],{"class":78},"nn.Sequential(\n",[68,39495,39496,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529],{"class":70,"line":3108},[68,39497,39498],{"class":78},"            nn.Conv2d(",[68,39500,32340],{"class":6705},[68,39502,1685],{"class":316},[68,39504,1846],{"class":85},[68,39506,2007],{"class":78},[68,39508,32349],{"class":6705},[68,39510,1685],{"class":316},[68,39512,1832],{"class":85},[68,39514,2007],{"class":78},[68,39516,32358],{"class":6705},[68,39518,1685],{"class":316},[68,39520,1709],{"class":85},[68,39522,2007],{"class":78},[68,39524,32367],{"class":6705},[68,39526,1685],{"class":316},[68,39528,1846],{"class":85},[68,39530,39531],{"class":78},"),\n",[68,39533,39534],{"class":70,"line":3114},[68,39535,39536],{"class":78},"            nn.ReLU(),\n",[68,39538,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571],{"class":70,"line":3119},[68,39540,39498],{"class":78},[68,39542,32340],{"class":6705},[68,39544,1685],{"class":316},[68,39546,1832],{"class":85},[68,39548,2007],{"class":78},[68,39550,32349],{"class":6705},[68,39552,1685],{"class":316},[68,39554,1832],{"class":85},[68,39556,2007],{"class":78},[68,39558,32358],{"class":6705},[68,39560,1685],{"class":316},[68,39562,1709],{"class":85},[68,39564,2007],{"class":78},[68,39566,32367],{"class":6705},[68,39568,1685],{"class":316},[68,39570,1846],{"class":85},[68,39572,39531],{"class":78},[68,39574,39575],{"class":70,"line":3133},[68,39576,39536],{"class":78},[68,39578,39579,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604],{"class":70,"line":3138},[68,39580,39581],{"class":78},"            nn.MaxPool2d(",[68,39583,32358],{"class":6705},[68,39585,1685],{"class":316},[68,39587,1715],{"class":85},[68,39589,2007],{"class":78},[68,39591,32413],{"class":6705},[68,39593,1685],{"class":316},[68,39595,1715],{"class":85},[68,39597,2007],{"class":78},[68,39599,32367],{"class":6705},[68,39601,1685],{"class":316},[68,39603,1248],{"class":85},[68,39605,1646],{"class":78},[68,39607,39608],{"class":70,"line":3144},[68,39609,39610],{"class":78},"        )\n",[68,39612,39613],{"class":70,"line":3165},[68,39614,39615],{"class":302},"        # 第二层\n",[68,39617,39618,39620,39623,39625],{"class":70,"line":3170},[68,39619,32329],{"class":85},[68,39621,39622],{"class":78},".block2",[68,39624,1685],{"class":316},[68,39626,39493],{"class":78},[68,39628,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661],{"class":70,"line":3184},[68,39630,39498],{"class":78},[68,39632,32340],{"class":6705},[68,39634,1685],{"class":316},[68,39636,1832],{"class":85},[68,39638,2007],{"class":78},[68,39640,32349],{"class":6705},[68,39642,1685],{"class":316},[68,39644,33554],{"class":85},[68,39646,2007],{"class":78},[68,39648,32358],{"class":6705},[68,39650,1685],{"class":316},[68,39652,1709],{"class":85},[68,39654,2007],{"class":78},[68,39656,32367],{"class":6705},[68,39658,1685],{"class":316},[68,39660,1846],{"class":85},[68,39662,39531],{"class":78},[68,39664,39665],{"class":70,"line":3189},[68,39666,39536],{"class":78},[68,39668,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701],{"class":70,"line":3218},[68,39670,39498],{"class":78},[68,39672,32340],{"class":6705},[68,39674,1685],{"class":316},[68,39676,33554],{"class":85},[68,39678,2007],{"class":78},[68,39680,32349],{"class":6705},[68,39682,1685],{"class":316},[68,39684,33554],{"class":85},[68,39686,2007],{"class":78},[68,39688,32358],{"class":6705},[68,39690,1685],{"class":316},[68,39692,1709],{"class":85},[68,39694,2007],{"class":78},[68,39696,32367],{"class":6705},[68,39698,1685],{"class":316},[68,39700,1846],{"class":85},[68,39702,39531],{"class":78},[68,39704,39705],{"class":70,"line":3223},[68,39706,39536],{"class":78},[68,39708,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733],{"class":70,"line":3240},[68,39710,39581],{"class":78},[68,39712,32358],{"class":6705},[68,39714,1685],{"class":316},[68,39716,1715],{"class":85},[68,39718,2007],{"class":78},[68,39720,32413],{"class":6705},[68,39722,1685],{"class":316},[68,39724,1715],{"class":85},[68,39726,2007],{"class":78},[68,39728,32367],{"class":6705},[68,39730,1685],{"class":316},[68,39732,1248],{"class":85},[68,39734,1646],{"class":78},[68,39736,39737],{"class":70,"line":3245},[68,39738,39610],{"class":78},[68,39740,39741],{"class":70,"line":3250},[68,39742,39743],{"class":302},"        # 第三层\n",[68,39745,39746,39748,39751,39753],{"class":70,"line":3255},[68,39747,32329],{"class":85},[68,39749,39750],{"class":78},".block3",[68,39752,1685],{"class":316},[68,39754,39493],{"class":78},[68,39756,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789],{"class":70,"line":3269},[68,39758,39498],{"class":78},[68,39760,32340],{"class":6705},[68,39762,1685],{"class":316},[68,39764,33554],{"class":85},[68,39766,2007],{"class":78},[68,39768,32349],{"class":6705},[68,39770,1685],{"class":316},[68,39772,36354],{"class":85},[68,39774,2007],{"class":78},[68,39776,32358],{"class":6705},[68,39778,1685],{"class":316},[68,39780,1709],{"class":85},[68,39782,2007],{"class":78},[68,39784,32367],{"class":6705},[68,39786,1685],{"class":316},[68,39788,1846],{"class":85},[68,39790,39531],{"class":78},[68,39792,39793],{"class":70,"line":3274},[68,39794,39536],{"class":78},[68,39796,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829],{"class":70,"line":4067},[68,39798,39498],{"class":78},[68,39800,32340],{"class":6705},[68,39802,1685],{"class":316},[68,39804,36354],{"class":85},[68,39806,2007],{"class":78},[68,39808,32349],{"class":6705},[68,39810,1685],{"class":316},[68,39812,36354],{"class":85},[68,39814,2007],{"class":78},[68,39816,32358],{"class":6705},[68,39818,1685],{"class":316},[68,39820,1709],{"class":85},[68,39822,2007],{"class":78},[68,39824,32367],{"class":6705},[68,39826,1685],{"class":316},[68,39828,1846],{"class":85},[68,39830,39531],{"class":78},[68,39832,39833],{"class":70,"line":4081},[68,39834,39536],{"class":78},[68,39836,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869],{"class":70,"line":4089},[68,39838,39498],{"class":78},[68,39840,32340],{"class":6705},[68,39842,1685],{"class":316},[68,39844,36354],{"class":85},[68,39846,2007],{"class":78},[68,39848,32349],{"class":6705},[68,39850,1685],{"class":316},[68,39852,36354],{"class":85},[68,39854,2007],{"class":78},[68,39856,32358],{"class":6705},[68,39858,1685],{"class":316},[68,39860,1709],{"class":85},[68,39862,2007],{"class":78},[68,39864,32367],{"class":6705},[68,39866,1685],{"class":316},[68,39868,1846],{"class":85},[68,39870,39531],{"class":78},[68,39872,39873],{"class":70,"line":4094},[68,39874,39536],{"class":78},[68,39876,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901],{"class":70,"line":4100},[68,39878,39581],{"class":78},[68,39880,32358],{"class":6705},[68,39882,1685],{"class":316},[68,39884,1715],{"class":85},[68,39886,2007],{"class":78},[68,39888,32413],{"class":6705},[68,39890,1685],{"class":316},[68,39892,1715],{"class":85},[68,39894,2007],{"class":78},[68,39896,32367],{"class":6705},[68,39898,1685],{"class":316},[68,39900,1248],{"class":85},[68,39902,1646],{"class":78},[68,39904,39905],{"class":70,"line":4106},[68,39906,39610],{"class":78},[68,39908,39909],{"class":70,"line":4111},[68,39910,39911],{"class":302},"        # 第四层\n",[68,39913,39914,39916,39919,39921],{"class":70,"line":9437},[68,39915,32329],{"class":85},[68,39917,39918],{"class":78},".block4",[68,39920,1685],{"class":316},[68,39922,39493],{"class":78},[68,39924,39925,39927,39929,39931,39933,39935,39937,39939,39942,39944,39946,39948,39950,39952,39954,39956,39958],{"class":70,"line":9461},[68,39926,39498],{"class":78},[68,39928,32340],{"class":6705},[68,39930,1685],{"class":316},[68,39932,36354],{"class":85},[68,39934,2007],{"class":78},[68,39936,32349],{"class":6705},[68,39938,1685],{"class":316},[68,39940,39941],{"class":85},"512",[68,39943,2007],{"class":78},[68,39945,32358],{"class":6705},[68,39947,1685],{"class":316},[68,39949,1709],{"class":85},[68,39951,2007],{"class":78},[68,39953,32367],{"class":6705},[68,39955,1685],{"class":316},[68,39957,1846],{"class":85},[68,39959,39531],{"class":78},[68,39961,39962],{"class":70,"line":9466},[68,39963,39536],{"class":78},[68,39965,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998],{"class":70,"line":9472},[68,39967,39498],{"class":78},[68,39969,32340],{"class":6705},[68,39971,1685],{"class":316},[68,39973,39941],{"class":85},[68,39975,2007],{"class":78},[68,39977,32349],{"class":6705},[68,39979,1685],{"class":316},[68,39981,39941],{"class":85},[68,39983,2007],{"class":78},[68,39985,32358],{"class":6705},[68,39987,1685],{"class":316},[68,39989,1709],{"class":85},[68,39991,2007],{"class":78},[68,39993,32367],{"class":6705},[68,39995,1685],{"class":316},[68,39997,1846],{"class":85},[68,39999,39531],{"class":78},[68,40001,40002],{"class":70,"line":9499},[68,40003,39536],{"class":78},[68,40005,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038],{"class":70,"line":9504},[68,40007,39498],{"class":78},[68,40009,32340],{"class":6705},[68,40011,1685],{"class":316},[68,40013,39941],{"class":85},[68,40015,2007],{"class":78},[68,40017,32349],{"class":6705},[68,40019,1685],{"class":316},[68,40021,39941],{"class":85},[68,40023,2007],{"class":78},[68,40025,32358],{"class":6705},[68,40027,1685],{"class":316},[68,40029,1709],{"class":85},[68,40031,2007],{"class":78},[68,40033,32367],{"class":6705},[68,40035,1685],{"class":316},[68,40037,1846],{"class":85},[68,40039,39531],{"class":78},[68,40041,40042],{"class":70,"line":9510},[68,40043,39536],{"class":78},[68,40045,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070],{"class":70,"line":9522},[68,40047,39581],{"class":78},[68,40049,32358],{"class":6705},[68,40051,1685],{"class":316},[68,40053,1715],{"class":85},[68,40055,2007],{"class":78},[68,40057,32413],{"class":6705},[68,40059,1685],{"class":316},[68,40061,1715],{"class":85},[68,40063,2007],{"class":78},[68,40065,32367],{"class":6705},[68,40067,1685],{"class":316},[68,40069,1248],{"class":85},[68,40071,1646],{"class":78},[68,40073,40074],{"class":70,"line":9534},[68,40075,39610],{"class":78},[68,40077,40078],{"class":70,"line":9546},[68,40079,40080],{"class":302},"        # 第五层\n",[68,40082,40083,40085,40088,40090],{"class":70,"line":11204},[68,40084,32329],{"class":85},[68,40086,40087],{"class":78},".block5",[68,40089,1685],{"class":316},[68,40091,39493],{"class":78},[68,40093,40094,40096,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126],{"class":70,"line":11229},[68,40095,39498],{"class":78},[68,40097,32340],{"class":6705},[68,40099,1685],{"class":316},[68,40101,39941],{"class":85},[68,40103,2007],{"class":78},[68,40105,32349],{"class":6705},[68,40107,1685],{"class":316},[68,40109,39941],{"class":85},[68,40111,2007],{"class":78},[68,40113,32358],{"class":6705},[68,40115,1685],{"class":316},[68,40117,1709],{"class":85},[68,40119,2007],{"class":78},[68,40121,32367],{"class":6705},[68,40123,1685],{"class":316},[68,40125,1846],{"class":85},[68,40127,39531],{"class":78},[68,40129,40130],{"class":70,"line":11252},[68,40131,39536],{"class":78},[68,40133,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166],{"class":70,"line":11276},[68,40135,39498],{"class":78},[68,40137,32340],{"class":6705},[68,40139,1685],{"class":316},[68,40141,39941],{"class":85},[68,40143,2007],{"class":78},[68,40145,32349],{"class":6705},[68,40147,1685],{"class":316},[68,40149,39941],{"class":85},[68,40151,2007],{"class":78},[68,40153,32358],{"class":6705},[68,40155,1685],{"class":316},[68,40157,1709],{"class":85},[68,40159,2007],{"class":78},[68,40161,32367],{"class":6705},[68,40163,1685],{"class":316},[68,40165,1846],{"class":85},[68,40167,39531],{"class":78},[68,40169,40170],{"class":70,"line":11281},[68,40171,39536],{"class":78},[68,40173,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206],{"class":70,"line":11286},[68,40175,39498],{"class":78},[68,40177,32340],{"class":6705},[68,40179,1685],{"class":316},[68,40181,39941],{"class":85},[68,40183,2007],{"class":78},[68,40185,32349],{"class":6705},[68,40187,1685],{"class":316},[68,40189,39941],{"class":85},[68,40191,2007],{"class":78},[68,40193,32358],{"class":6705},[68,40195,1685],{"class":316},[68,40197,1709],{"class":85},[68,40199,2007],{"class":78},[68,40201,32367],{"class":6705},[68,40203,1685],{"class":316},[68,40205,1846],{"class":85},[68,40207,39531],{"class":78},[68,40209,40210],{"class":70,"line":11291},[68,40211,39536],{"class":78},[68,40213,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238],{"class":70,"line":11300},[68,40215,39581],{"class":78},[68,40217,32358],{"class":6705},[68,40219,1685],{"class":316},[68,40221,1715],{"class":85},[68,40223,2007],{"class":78},[68,40225,32413],{"class":6705},[68,40227,1685],{"class":316},[68,40229,1715],{"class":85},[68,40231,2007],{"class":78},[68,40233,32367],{"class":6705},[68,40235,1685],{"class":316},[68,40237,1248],{"class":85},[68,40239,1646],{"class":78},[68,40241,40242],{"class":70,"line":11305},[68,40243,39610],{"class":78},[68,40245,40246],{"class":70,"line":11311},[68,40247,40248],{"class":302},"        # 全连接层\n",[68,40250,40251,40253,40256,40258],{"class":70,"line":11332},[68,40252,32329],{"class":85},[68,40254,40255],{"class":78},".block6",[68,40257,1685],{"class":316},[68,40259,39493],{"class":78},[68,40261,40262],{"class":70,"line":11338},[68,40263,40264],{"class":302},"            # 平展操作\n",[68,40266,40267],{"class":70,"line":11352},[68,40268,40269],{"class":302},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[68,40271,40272],{"class":70,"line":11358},[68,40273,40274],{"class":78},"            nn.Flatten(),\n",[68,40276,40277,40280,40282,40284,40286,40288,40290,40292,40294],{"class":70,"line":11385},[68,40278,40279],{"class":78},"            nn.Linear(",[68,40281,1998],{"class":85},[68,40283,2083],{"class":316},[68,40285,1998],{"class":85},[68,40287,2083],{"class":316},[68,40289,39941],{"class":85},[68,40291,2007],{"class":78},[68,40293,36354],{"class":85},[68,40295,39531],{"class":78},[68,40297,40298],{"class":70,"line":11394},[68,40299,39536],{"class":78},[68,40301,40302,40304,40306,40308,40310],{"class":70,"line":11400},[68,40303,40279],{"class":78},[68,40305,36354],{"class":85},[68,40307,2007],{"class":78},[68,40309,33554],{"class":85},[68,40311,39531],{"class":78},[68,40313,40314],{"class":70,"line":11408},[68,40315,39536],{"class":78},[68,40317,40318,40320,40322,40324,40326],{"class":70,"line":11413},[68,40319,40279],{"class":78},[68,40321,33554],{"class":85},[68,40323,2007],{"class":78},[68,40325,313],{"class":85},[68,40327,1646],{"class":78},[68,40329,40330],{"class":70,"line":18091},[68,40331,39610],{"class":78},[68,40333,40334],{"class":70,"line":18097},[68,40335,3890],{"emptyLinePlaceholder":1567},[68,40337,40338],{"class":70,"line":18120},[68,40339,40340],{"class":302},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,40342,40343],{"class":70,"line":18126},[68,40344,40345],{"class":302},"        # 循环遍历模型\n",[68,40347,40348,40350,40353,40355,40358],{"class":70,"line":18149},[68,40349,4893],{"class":316},[68,40351,40352],{"class":78}," m ",[68,40354,27529],{"class":316},[68,40356,40357],{"class":85}," self",[68,40359,40360],{"class":78},".modules():\n",[68,40362,40363],{"class":70,"line":18163},[68,40364,40365],{"class":302},"            # print(m)\n",[68,40367,40368,40370,40373],{"class":70,"line":18183},[68,40369,6132],{"class":316},[68,40371,40372],{"class":85}," isinstance",[68,40374,40375],{"class":78},"(m,nn.Conv2d):\n",[68,40377,40378],{"class":70,"line":18189},[68,40379,40380],{"class":302},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,40382,40383,40386,40389,40391,40394],{"class":70,"line":18200},[68,40384,40385],{"class":78},"                nn.init.kaiming_normal_(m.weight,",[68,40387,40388],{"class":6705},"nonlinearity",[68,40390,1685],{"class":316},[68,40392,40393],{"class":1742},"'relu'",[68,40395,1646],{"class":78},[68,40397,40398],{"class":70,"line":18223},[68,40399,40400],{"class":302},"                # 判断b参数是否存在\n",[68,40402,40403,40406,40409,40412,40415,40418],{"class":70,"line":18245},[68,40404,40405],{"class":316},"                if",[68,40407,40408],{"class":78}," m.bias ",[68,40410,40411],{"class":316},"is",[68,40413,40414],{"class":316}," not",[68,40416,40417],{"class":85}," None",[68,40419,5229],{"class":78},[68,40421,40422],{"class":70,"line":18250},[68,40423,40424],{"class":302},"                    # 如果参数不存在的化初始化b=0\n",[68,40426,40427,40430,40432],{"class":70,"line":18256},[68,40428,40429],{"class":78},"                    nn.init.constant_(m.bias,",[68,40431,1248],{"class":85},[68,40433,1646],{"class":78},[68,40435,40436],{"class":70,"line":18270},[68,40437,40438],{"class":302},"            # 全连接层初始化\n",[68,40440,40441,40444,40446],{"class":70,"line":18283},[68,40442,40443],{"class":316},"            elif",[68,40445,40372],{"class":85},[68,40447,40448],{"class":78},"(m,nn.Linear):\n",[68,40450,40451],{"class":70,"line":18288},[68,40452,40453],{"class":302},"                # 这个初始化方法是利用的是正太分布的方式\n",[68,40455,40456],{"class":70,"line":18302},[68,40457,40458],{"class":302},"                # 均值为0，方差为0.01\n",[68,40460,40461,40464,40466,40468,40471],{"class":70,"line":18307},[68,40462,40463],{"class":78},"                nn.init.normal_(m.weight,",[68,40465,1248],{"class":85},[68,40467,2007],{"class":78},[68,40469,40470],{"class":85},"0.01",[68,40472,1646],{"class":78},[68,40474,40475],{"class":70,"line":18313},[68,40476,40477],{"class":302},"                # 初始化b参数\n",[68,40479,40480,40482,40484,40486,40488,40490],{"class":70,"line":18318},[68,40481,40405],{"class":316},[68,40483,40408],{"class":78},[68,40485,40411],{"class":316},[68,40487,40414],{"class":316},[68,40489,40417],{"class":85},[68,40491,5229],{"class":78},[68,40493,40494,40496,40498],{"class":70,"line":18332},[68,40495,40429],{"class":78},[68,40497,1248],{"class":85},[68,40499,1646],{"class":78},[68,40501,40502],{"class":70,"line":18337},[68,40503,3890],{"emptyLinePlaceholder":1567},[68,40505,40506],{"class":70,"line":18342},[68,40507,36649],{"class":302},[68,40509,40510,40512,40514],{"class":70,"line":18356},[68,40511,32285],{"class":316},[68,40513,32577],{"class":74},[68,40515,32580],{"class":78},[68,40517,40518,40520,40522,40524],{"class":70,"line":18368},[68,40519,32585],{"class":78},[68,40521,1685],{"class":316},[68,40523,32307],{"class":85},[68,40525,40526],{"class":78},".block1(x)\n",[68,40528,40529,40531,40533,40535],{"class":70,"line":18373},[68,40530,32585],{"class":78},[68,40532,1685],{"class":316},[68,40534,32307],{"class":85},[68,40536,40537],{"class":78},".block2(x)\n",[68,40539,40540,40542,40544,40546],{"class":70,"line":18386},[68,40541,32585],{"class":78},[68,40543,1685],{"class":316},[68,40545,32307],{"class":85},[68,40547,40548],{"class":78},".block3(x)\n",[68,40550,40551,40553,40555,40557],{"class":70,"line":18391},[68,40552,32585],{"class":78},[68,40554,1685],{"class":316},[68,40556,32307],{"class":85},[68,40558,40559],{"class":78},".block4(x)\n",[68,40561,40562,40564,40566,40568],{"class":70,"line":18396},[68,40563,32585],{"class":78},[68,40565,1685],{"class":316},[68,40567,32307],{"class":85},[68,40569,40570],{"class":78},".block5(x)\n",[68,40572,40573,40575,40577,40579],{"class":70,"line":18401},[68,40574,32585],{"class":78},[68,40576,1685],{"class":316},[68,40578,32307],{"class":85},[68,40580,40581],{"class":78},".block6(x)\n",[68,40583,40584,40586],{"class":70,"line":18414},[68,40585,16240],{"class":316},[68,40587,32693],{"class":78},[68,40589,40590],{"class":70,"line":18419},[68,40591,3890],{"emptyLinePlaceholder":1567},[68,40593,40594],{"class":70,"line":34117},[68,40595,40596],{"class":302},"# 验证模型\n",[68,40598,40599,40601,40603,40605,40608],{"class":70,"line":34123},[68,40600,3023],{"class":316},[68,40602,32704],{"class":85},[68,40604,4439],{"class":316},[68,40606,40607],{"class":1742},"'__main__'",[68,40609,5229],{"class":78},[68,40611,40612,40614,40616,40618,40620,40622,40624,40626,40628],{"class":70,"line":34129},[68,40613,32721],{"class":78},[68,40615,1685],{"class":316},[68,40617,31935],{"class":78},[68,40619,32728],{"class":1742},[68,40621,3195],{"class":316},[68,40623,32733],{"class":78},[68,40625,3192],{"class":316},[68,40627,31960],{"class":1742},[68,40629,1646],{"class":78},[68,40631,40632,40634],{"class":70,"line":34135},[68,40633,32783],{"class":85},[68,40635,31969],{"class":78},[68,40637,40638,40640,40642],{"class":70,"line":34141},[68,40639,32773],{"class":78},[68,40641,1685],{"class":316},[68,40643,40644],{"class":78},"VGG16().to(device)\n",[68,40646,40647,40649,40651,40653,40655,40657,40659,40661],{"class":70,"line":34152},[68,40648,32783],{"class":85},[68,40650,32786],{"class":78},[68,40652,1846],{"class":85},[68,40654,2007],{"class":78},[68,40656,32985],{"class":85},[68,40658,2007],{"class":78},[68,40660,32985],{"class":85},[68,40662,32799],{"class":78},[263,40664,40665],{"start":82},[27,40666,40667],{},"训练代码",[170,40669,40670],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[170,40672,40673],{},"解决方式:",[170,40675,40676],{},"①权重初始化",[58,40678,40680],{"className":31862,"code":40679,"language":31864,"meta":63,"style":63},"# 权重初始化,保证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",[65,40681,40682,40687,40692,40704,40709,40717,40722,40735,40740,40754,40759,40768,40773,40782,40787,40792,40805,40810,40824],{"__ignoreMap":63},[68,40683,40684],{"class":70,"line":71},[68,40685,40686],{"class":302},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,40688,40689],{"class":70,"line":82},[68,40690,40691],{"class":302},"# 循环遍历模型\n",[68,40693,40694,40696,40698,40700,40702],{"class":70,"line":98},[68,40695,4515],{"class":316},[68,40697,40352],{"class":78},[68,40699,27529],{"class":316},[68,40701,40357],{"class":85},[68,40703,40360],{"class":78},[68,40705,40706],{"class":70,"line":104},[68,40707,40708],{"class":302},"    # print(m)\n",[68,40710,40711,40713,40715],{"class":70,"line":112},[68,40712,4591],{"class":316},[68,40714,40372],{"class":85},[68,40716,40375],{"class":78},[68,40718,40719],{"class":70,"line":124},[68,40720,40721],{"class":302},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,40723,40724,40727,40729,40731,40733],{"class":70,"line":1496},[68,40725,40726],{"class":78},"        nn.init.kaiming_normal_(m.weight,",[68,40728,40388],{"class":6705},[68,40730,1685],{"class":316},[68,40732,40393],{"class":1742},[68,40734,1646],{"class":78},[68,40736,40737],{"class":70,"line":1502},[68,40738,40739],{"class":302},"        # 判断b参数是否存在\n",[68,40741,40742,40744,40746,40748,40750,40752],{"class":70,"line":1510},[68,40743,3987],{"class":316},[68,40745,40408],{"class":78},[68,40747,40411],{"class":316},[68,40749,40414],{"class":316},[68,40751,40417],{"class":85},[68,40753,5229],{"class":78},[68,40755,40756],{"class":70,"line":1521},[68,40757,40758],{"class":302},"            # 如果参数不存在的化初始化b=0\n",[68,40760,40761,40764,40766],{"class":70,"line":3103},[68,40762,40763],{"class":78},"            nn.init.constant_(m.bias,",[68,40765,1248],{"class":85},[68,40767,1646],{"class":78},[68,40769,40770],{"class":70,"line":3108},[68,40771,40772],{"class":302},"    # 全连接层初始化\n",[68,40774,40775,40778,40780],{"class":70,"line":3114},[68,40776,40777],{"class":316},"    elif",[68,40779,40372],{"class":85},[68,40781,40448],{"class":78},[68,40783,40784],{"class":70,"line":3119},[68,40785,40786],{"class":302},"        # 这个初始化方法是利用的是正太分布的方式\n",[68,40788,40789],{"class":70,"line":3133},[68,40790,40791],{"class":302},"        # 均值为0，方差为0.01\n",[68,40793,40794,40797,40799,40801,40803],{"class":70,"line":3138},[68,40795,40796],{"class":78},"        nn.init.normal_(m.weight,",[68,40798,1248],{"class":85},[68,40800,2007],{"class":78},[68,40802,40470],{"class":85},[68,40804,1646],{"class":78},[68,40806,40807],{"class":70,"line":3144},[68,40808,40809],{"class":302},"        # 初始化b参数\n",[68,40811,40812,40814,40816,40818,40820,40822],{"class":70,"line":3165},[68,40813,3987],{"class":316},[68,40815,40408],{"class":78},[68,40817,40411],{"class":316},[68,40819,40414],{"class":316},[68,40821,40417],{"class":85},[68,40823,5229],{"class":78},[68,40825,40826,40828,40830],{"class":70,"line":3170},[68,40827,40763],{"class":78},[68,40829,1248],{"class":85},[68,40831,1646],{"class":78},[170,40833,40834],{},"②尽可能地增加批次",[170,40836,40837],{},"训练完整代码：",[58,40839,40840],{"className":31862,"code":39383,"language":31864,"meta":63,"style":63},[65,40841,40842,40848,40858,40868,40878,40882,40898,40906,40924,40928,40932,40942,40978,40982,41018,41022,41050,41054,41058,41068,41104,41108,41144,41148,41176,41180,41184,41194,41230,41234,41270,41274,41310,41314,41342,41346,41350,41360,41396,41400,41436,41440,41476,41480,41508,41512,41516,41526,41562,41566,41602,41606,41642,41646,41674,41678,41682,41692,41696,41700,41704,41724,41728,41740,41744,41756,41760,41764,41768,41772,41784,41788,41796,41800,41812,41816,41830,41834,41842,41846,41854,41858,41862,41874,41878,41892,41900,41904,41908,41916,41926,41936,41946,41956,41966,41976,41982,41986,41990,42002,42022,42028,42036],{"__ignoreMap":63},[68,40843,40844,40846],{"class":70,"line":71},[68,40845,31876],{"class":316},[68,40847,31879],{"class":78},[68,40849,40850,40852,40854,40856],{"class":70,"line":82},[68,40851,32221],{"class":316},[68,40853,39398],{"class":78},[68,40855,31876],{"class":316},[68,40857,39403],{"class":78},[68,40859,40860,40862,40864,40866],{"class":70,"line":98},[68,40861,32221],{"class":316},[68,40863,32224],{"class":78},[68,40865,31876],{"class":316},[68,40867,32229],{"class":78},[68,40869,40870,40872,40874,40876],{"class":70,"line":104},[68,40871,32221],{"class":316},[68,40873,32241],{"class":78},[68,40875,31876],{"class":316},[68,40877,32246],{"class":78},[68,40879,40880],{"class":70,"line":112},[68,40881,3890],{"emptyLinePlaceholder":1567},[68,40883,40884,40886,40888,40890,40892,40894,40896],{"class":70,"line":124},[68,40885,16182],{"class":316},[68,40887,39434],{"class":74},[68,40889,1640],{"class":78},[68,40891,32262],{"class":74},[68,40893,2186],{"class":78},[68,40895,32267],{"class":74},[68,40897,32270],{"class":78},[68,40899,40900,40902,40904],{"class":70,"line":1496},[68,40901,32285],{"class":316},[68,40903,32288],{"class":85},[68,40905,32291],{"class":78},[68,40907,40908,40910,40912,40914,40916,40918,40920,40922],{"class":70,"line":1502},[68,40909,32301],{"class":85},[68,40911,1640],{"class":78},[68,40913,39461],{"class":85},[68,40915,13923],{"class":78},[68,40917,32307],{"class":85},[68,40919,32310],{"class":78},[68,40921,32313],{"class":85},[68,40923,3466],{"class":78},[68,40925,40926],{"class":70,"line":1510},[68,40927,39476],{"class":302},[68,40929,40930],{"class":70,"line":1521},[68,40931,39481],{"class":302},[68,40933,40934,40936,40938,40940],{"class":70,"line":3103},[68,40935,32329],{"class":85},[68,40937,39488],{"class":78},[68,40939,1685],{"class":316},[68,40941,39493],{"class":78},[68,40943,40944,40946,40948,40950,40952,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974,40976],{"class":70,"line":3108},[68,40945,39498],{"class":78},[68,40947,32340],{"class":6705},[68,40949,1685],{"class":316},[68,40951,1846],{"class":85},[68,40953,2007],{"class":78},[68,40955,32349],{"class":6705},[68,40957,1685],{"class":316},[68,40959,1832],{"class":85},[68,40961,2007],{"class":78},[68,40963,32358],{"class":6705},[68,40965,1685],{"class":316},[68,40967,1709],{"class":85},[68,40969,2007],{"class":78},[68,40971,32367],{"class":6705},[68,40973,1685],{"class":316},[68,40975,1846],{"class":85},[68,40977,39531],{"class":78},[68,40979,40980],{"class":70,"line":3114},[68,40981,39536],{"class":78},[68,40983,40984,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014,41016],{"class":70,"line":3119},[68,40985,39498],{"class":78},[68,40987,32340],{"class":6705},[68,40989,1685],{"class":316},[68,40991,1832],{"class":85},[68,40993,2007],{"class":78},[68,40995,32349],{"class":6705},[68,40997,1685],{"class":316},[68,40999,1832],{"class":85},[68,41001,2007],{"class":78},[68,41003,32358],{"class":6705},[68,41005,1685],{"class":316},[68,41007,1709],{"class":85},[68,41009,2007],{"class":78},[68,41011,32367],{"class":6705},[68,41013,1685],{"class":316},[68,41015,1846],{"class":85},[68,41017,39531],{"class":78},[68,41019,41020],{"class":70,"line":3133},[68,41021,39536],{"class":78},[68,41023,41024,41026,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048],{"class":70,"line":3138},[68,41025,39581],{"class":78},[68,41027,32358],{"class":6705},[68,41029,1685],{"class":316},[68,41031,1715],{"class":85},[68,41033,2007],{"class":78},[68,41035,32413],{"class":6705},[68,41037,1685],{"class":316},[68,41039,1715],{"class":85},[68,41041,2007],{"class":78},[68,41043,32367],{"class":6705},[68,41045,1685],{"class":316},[68,41047,1248],{"class":85},[68,41049,1646],{"class":78},[68,41051,41052],{"class":70,"line":3144},[68,41053,39610],{"class":78},[68,41055,41056],{"class":70,"line":3165},[68,41057,39615],{"class":302},[68,41059,41060,41062,41064,41066],{"class":70,"line":3170},[68,41061,32329],{"class":85},[68,41063,39622],{"class":78},[68,41065,1685],{"class":316},[68,41067,39493],{"class":78},[68,41069,41070,41072,41074,41076,41078,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102],{"class":70,"line":3184},[68,41071,39498],{"class":78},[68,41073,32340],{"class":6705},[68,41075,1685],{"class":316},[68,41077,1832],{"class":85},[68,41079,2007],{"class":78},[68,41081,32349],{"class":6705},[68,41083,1685],{"class":316},[68,41085,33554],{"class":85},[68,41087,2007],{"class":78},[68,41089,32358],{"class":6705},[68,41091,1685],{"class":316},[68,41093,1709],{"class":85},[68,41095,2007],{"class":78},[68,41097,32367],{"class":6705},[68,41099,1685],{"class":316},[68,41101,1846],{"class":85},[68,41103,39531],{"class":78},[68,41105,41106],{"class":70,"line":3189},[68,41107,39536],{"class":78},[68,41109,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142],{"class":70,"line":3218},[68,41111,39498],{"class":78},[68,41113,32340],{"class":6705},[68,41115,1685],{"class":316},[68,41117,33554],{"class":85},[68,41119,2007],{"class":78},[68,41121,32349],{"class":6705},[68,41123,1685],{"class":316},[68,41125,33554],{"class":85},[68,41127,2007],{"class":78},[68,41129,32358],{"class":6705},[68,41131,1685],{"class":316},[68,41133,1709],{"class":85},[68,41135,2007],{"class":78},[68,41137,32367],{"class":6705},[68,41139,1685],{"class":316},[68,41141,1846],{"class":85},[68,41143,39531],{"class":78},[68,41145,41146],{"class":70,"line":3223},[68,41147,39536],{"class":78},[68,41149,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174],{"class":70,"line":3240},[68,41151,39581],{"class":78},[68,41153,32358],{"class":6705},[68,41155,1685],{"class":316},[68,41157,1715],{"class":85},[68,41159,2007],{"class":78},[68,41161,32413],{"class":6705},[68,41163,1685],{"class":316},[68,41165,1715],{"class":85},[68,41167,2007],{"class":78},[68,41169,32367],{"class":6705},[68,41171,1685],{"class":316},[68,41173,1248],{"class":85},[68,41175,1646],{"class":78},[68,41177,41178],{"class":70,"line":3245},[68,41179,39610],{"class":78},[68,41181,41182],{"class":70,"line":3250},[68,41183,39743],{"class":302},[68,41185,41186,41188,41190,41192],{"class":70,"line":3255},[68,41187,32329],{"class":85},[68,41189,39750],{"class":78},[68,41191,1685],{"class":316},[68,41193,39493],{"class":78},[68,41195,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228],{"class":70,"line":3269},[68,41197,39498],{"class":78},[68,41199,32340],{"class":6705},[68,41201,1685],{"class":316},[68,41203,33554],{"class":85},[68,41205,2007],{"class":78},[68,41207,32349],{"class":6705},[68,41209,1685],{"class":316},[68,41211,36354],{"class":85},[68,41213,2007],{"class":78},[68,41215,32358],{"class":6705},[68,41217,1685],{"class":316},[68,41219,1709],{"class":85},[68,41221,2007],{"class":78},[68,41223,32367],{"class":6705},[68,41225,1685],{"class":316},[68,41227,1846],{"class":85},[68,41229,39531],{"class":78},[68,41231,41232],{"class":70,"line":3274},[68,41233,39536],{"class":78},[68,41235,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268],{"class":70,"line":4067},[68,41237,39498],{"class":78},[68,41239,32340],{"class":6705},[68,41241,1685],{"class":316},[68,41243,36354],{"class":85},[68,41245,2007],{"class":78},[68,41247,32349],{"class":6705},[68,41249,1685],{"class":316},[68,41251,36354],{"class":85},[68,41253,2007],{"class":78},[68,41255,32358],{"class":6705},[68,41257,1685],{"class":316},[68,41259,1709],{"class":85},[68,41261,2007],{"class":78},[68,41263,32367],{"class":6705},[68,41265,1685],{"class":316},[68,41267,1846],{"class":85},[68,41269,39531],{"class":78},[68,41271,41272],{"class":70,"line":4081},[68,41273,39536],{"class":78},[68,41275,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298,41300,41302,41304,41306,41308],{"class":70,"line":4089},[68,41277,39498],{"class":78},[68,41279,32340],{"class":6705},[68,41281,1685],{"class":316},[68,41283,36354],{"class":85},[68,41285,2007],{"class":78},[68,41287,32349],{"class":6705},[68,41289,1685],{"class":316},[68,41291,36354],{"class":85},[68,41293,2007],{"class":78},[68,41295,32358],{"class":6705},[68,41297,1685],{"class":316},[68,41299,1709],{"class":85},[68,41301,2007],{"class":78},[68,41303,32367],{"class":6705},[68,41305,1685],{"class":316},[68,41307,1846],{"class":85},[68,41309,39531],{"class":78},[68,41311,41312],{"class":70,"line":4094},[68,41313,39536],{"class":78},[68,41315,41316,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338,41340],{"class":70,"line":4100},[68,41317,39581],{"class":78},[68,41319,32358],{"class":6705},[68,41321,1685],{"class":316},[68,41323,1715],{"class":85},[68,41325,2007],{"class":78},[68,41327,32413],{"class":6705},[68,41329,1685],{"class":316},[68,41331,1715],{"class":85},[68,41333,2007],{"class":78},[68,41335,32367],{"class":6705},[68,41337,1685],{"class":316},[68,41339,1248],{"class":85},[68,41341,1646],{"class":78},[68,41343,41344],{"class":70,"line":4106},[68,41345,39610],{"class":78},[68,41347,41348],{"class":70,"line":4111},[68,41349,39911],{"class":302},[68,41351,41352,41354,41356,41358],{"class":70,"line":9437},[68,41353,32329],{"class":85},[68,41355,39918],{"class":78},[68,41357,1685],{"class":316},[68,41359,39493],{"class":78},[68,41361,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392,41394],{"class":70,"line":9461},[68,41363,39498],{"class":78},[68,41365,32340],{"class":6705},[68,41367,1685],{"class":316},[68,41369,36354],{"class":85},[68,41371,2007],{"class":78},[68,41373,32349],{"class":6705},[68,41375,1685],{"class":316},[68,41377,39941],{"class":85},[68,41379,2007],{"class":78},[68,41381,32358],{"class":6705},[68,41383,1685],{"class":316},[68,41385,1709],{"class":85},[68,41387,2007],{"class":78},[68,41389,32367],{"class":6705},[68,41391,1685],{"class":316},[68,41393,1846],{"class":85},[68,41395,39531],{"class":78},[68,41397,41398],{"class":70,"line":9466},[68,41399,39536],{"class":78},[68,41401,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424,41426,41428,41430,41432,41434],{"class":70,"line":9472},[68,41403,39498],{"class":78},[68,41405,32340],{"class":6705},[68,41407,1685],{"class":316},[68,41409,39941],{"class":85},[68,41411,2007],{"class":78},[68,41413,32349],{"class":6705},[68,41415,1685],{"class":316},[68,41417,39941],{"class":85},[68,41419,2007],{"class":78},[68,41421,32358],{"class":6705},[68,41423,1685],{"class":316},[68,41425,1709],{"class":85},[68,41427,2007],{"class":78},[68,41429,32367],{"class":6705},[68,41431,1685],{"class":316},[68,41433,1846],{"class":85},[68,41435,39531],{"class":78},[68,41437,41438],{"class":70,"line":9499},[68,41439,39536],{"class":78},[68,41441,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474],{"class":70,"line":9504},[68,41443,39498],{"class":78},[68,41445,32340],{"class":6705},[68,41447,1685],{"class":316},[68,41449,39941],{"class":85},[68,41451,2007],{"class":78},[68,41453,32349],{"class":6705},[68,41455,1685],{"class":316},[68,41457,39941],{"class":85},[68,41459,2007],{"class":78},[68,41461,32358],{"class":6705},[68,41463,1685],{"class":316},[68,41465,1709],{"class":85},[68,41467,2007],{"class":78},[68,41469,32367],{"class":6705},[68,41471,1685],{"class":316},[68,41473,1846],{"class":85},[68,41475,39531],{"class":78},[68,41477,41478],{"class":70,"line":9510},[68,41479,39536],{"class":78},[68,41481,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506],{"class":70,"line":9522},[68,41483,39581],{"class":78},[68,41485,32358],{"class":6705},[68,41487,1685],{"class":316},[68,41489,1715],{"class":85},[68,41491,2007],{"class":78},[68,41493,32413],{"class":6705},[68,41495,1685],{"class":316},[68,41497,1715],{"class":85},[68,41499,2007],{"class":78},[68,41501,32367],{"class":6705},[68,41503,1685],{"class":316},[68,41505,1248],{"class":85},[68,41507,1646],{"class":78},[68,41509,41510],{"class":70,"line":9534},[68,41511,39610],{"class":78},[68,41513,41514],{"class":70,"line":9546},[68,41515,40080],{"class":302},[68,41517,41518,41520,41522,41524],{"class":70,"line":11204},[68,41519,32329],{"class":85},[68,41521,40087],{"class":78},[68,41523,1685],{"class":316},[68,41525,39493],{"class":78},[68,41527,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560],{"class":70,"line":11229},[68,41529,39498],{"class":78},[68,41531,32340],{"class":6705},[68,41533,1685],{"class":316},[68,41535,39941],{"class":85},[68,41537,2007],{"class":78},[68,41539,32349],{"class":6705},[68,41541,1685],{"class":316},[68,41543,39941],{"class":85},[68,41545,2007],{"class":78},[68,41547,32358],{"class":6705},[68,41549,1685],{"class":316},[68,41551,1709],{"class":85},[68,41553,2007],{"class":78},[68,41555,32367],{"class":6705},[68,41557,1685],{"class":316},[68,41559,1846],{"class":85},[68,41561,39531],{"class":78},[68,41563,41564],{"class":70,"line":11252},[68,41565,39536],{"class":78},[68,41567,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600],{"class":70,"line":11276},[68,41569,39498],{"class":78},[68,41571,32340],{"class":6705},[68,41573,1685],{"class":316},[68,41575,39941],{"class":85},[68,41577,2007],{"class":78},[68,41579,32349],{"class":6705},[68,41581,1685],{"class":316},[68,41583,39941],{"class":85},[68,41585,2007],{"class":78},[68,41587,32358],{"class":6705},[68,41589,1685],{"class":316},[68,41591,1709],{"class":85},[68,41593,2007],{"class":78},[68,41595,32367],{"class":6705},[68,41597,1685],{"class":316},[68,41599,1846],{"class":85},[68,41601,39531],{"class":78},[68,41603,41604],{"class":70,"line":11281},[68,41605,39536],{"class":78},[68,41607,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640],{"class":70,"line":11286},[68,41609,39498],{"class":78},[68,41611,32340],{"class":6705},[68,41613,1685],{"class":316},[68,41615,39941],{"class":85},[68,41617,2007],{"class":78},[68,41619,32349],{"class":6705},[68,41621,1685],{"class":316},[68,41623,39941],{"class":85},[68,41625,2007],{"class":78},[68,41627,32358],{"class":6705},[68,41629,1685],{"class":316},[68,41631,1709],{"class":85},[68,41633,2007],{"class":78},[68,41635,32367],{"class":6705},[68,41637,1685],{"class":316},[68,41639,1846],{"class":85},[68,41641,39531],{"class":78},[68,41643,41644],{"class":70,"line":11291},[68,41645,39536],{"class":78},[68,41647,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672],{"class":70,"line":11300},[68,41649,39581],{"class":78},[68,41651,32358],{"class":6705},[68,41653,1685],{"class":316},[68,41655,1715],{"class":85},[68,41657,2007],{"class":78},[68,41659,32413],{"class":6705},[68,41661,1685],{"class":316},[68,41663,1715],{"class":85},[68,41665,2007],{"class":78},[68,41667,32367],{"class":6705},[68,41669,1685],{"class":316},[68,41671,1248],{"class":85},[68,41673,1646],{"class":78},[68,41675,41676],{"class":70,"line":11305},[68,41677,39610],{"class":78},[68,41679,41680],{"class":70,"line":11311},[68,41681,40248],{"class":302},[68,41683,41684,41686,41688,41690],{"class":70,"line":11332},[68,41685,32329],{"class":85},[68,41687,40255],{"class":78},[68,41689,1685],{"class":316},[68,41691,39493],{"class":78},[68,41693,41694],{"class":70,"line":11338},[68,41695,40264],{"class":302},[68,41697,41698],{"class":70,"line":11352},[68,41699,40269],{"class":302},[68,41701,41702],{"class":70,"line":11358},[68,41703,40274],{"class":78},[68,41705,41706,41708,41710,41712,41714,41716,41718,41720,41722],{"class":70,"line":11385},[68,41707,40279],{"class":78},[68,41709,1998],{"class":85},[68,41711,2083],{"class":316},[68,41713,1998],{"class":85},[68,41715,2083],{"class":316},[68,41717,39941],{"class":85},[68,41719,2007],{"class":78},[68,41721,36354],{"class":85},[68,41723,39531],{"class":78},[68,41725,41726],{"class":70,"line":11394},[68,41727,39536],{"class":78},[68,41729,41730,41732,41734,41736,41738],{"class":70,"line":11400},[68,41731,40279],{"class":78},[68,41733,36354],{"class":85},[68,41735,2007],{"class":78},[68,41737,33554],{"class":85},[68,41739,39531],{"class":78},[68,41741,41742],{"class":70,"line":11408},[68,41743,39536],{"class":78},[68,41745,41746,41748,41750,41752,41754],{"class":70,"line":11413},[68,41747,40279],{"class":78},[68,41749,33554],{"class":85},[68,41751,2007],{"class":78},[68,41753,313],{"class":85},[68,41755,1646],{"class":78},[68,41757,41758],{"class":70,"line":18091},[68,41759,39610],{"class":78},[68,41761,41762],{"class":70,"line":18097},[68,41763,3890],{"emptyLinePlaceholder":1567},[68,41765,41766],{"class":70,"line":18120},[68,41767,40340],{"class":302},[68,41769,41770],{"class":70,"line":18126},[68,41771,40345],{"class":302},[68,41773,41774,41776,41778,41780,41782],{"class":70,"line":18149},[68,41775,4893],{"class":316},[68,41777,40352],{"class":78},[68,41779,27529],{"class":316},[68,41781,40357],{"class":85},[68,41783,40360],{"class":78},[68,41785,41786],{"class":70,"line":18163},[68,41787,40365],{"class":302},[68,41789,41790,41792,41794],{"class":70,"line":18183},[68,41791,6132],{"class":316},[68,41793,40372],{"class":85},[68,41795,40375],{"class":78},[68,41797,41798],{"class":70,"line":18189},[68,41799,40380],{"class":302},[68,41801,41802,41804,41806,41808,41810],{"class":70,"line":18200},[68,41803,40385],{"class":78},[68,41805,40388],{"class":6705},[68,41807,1685],{"class":316},[68,41809,40393],{"class":1742},[68,41811,1646],{"class":78},[68,41813,41814],{"class":70,"line":18223},[68,41815,40400],{"class":302},[68,41817,41818,41820,41822,41824,41826,41828],{"class":70,"line":18245},[68,41819,40405],{"class":316},[68,41821,40408],{"class":78},[68,41823,40411],{"class":316},[68,41825,40414],{"class":316},[68,41827,40417],{"class":85},[68,41829,5229],{"class":78},[68,41831,41832],{"class":70,"line":18250},[68,41833,40424],{"class":302},[68,41835,41836,41838,41840],{"class":70,"line":18256},[68,41837,40429],{"class":78},[68,41839,1248],{"class":85},[68,41841,1646],{"class":78},[68,41843,41844],{"class":70,"line":18270},[68,41845,40438],{"class":302},[68,41847,41848,41850,41852],{"class":70,"line":18283},[68,41849,40443],{"class":316},[68,41851,40372],{"class":85},[68,41853,40448],{"class":78},[68,41855,41856],{"class":70,"line":18288},[68,41857,40453],{"class":302},[68,41859,41860],{"class":70,"line":18302},[68,41861,40458],{"class":302},[68,41863,41864,41866,41868,41870,41872],{"class":70,"line":18307},[68,41865,40463],{"class":78},[68,41867,1248],{"class":85},[68,41869,2007],{"class":78},[68,41871,40470],{"class":85},[68,41873,1646],{"class":78},[68,41875,41876],{"class":70,"line":18313},[68,41877,40477],{"class":302},[68,41879,41880,41882,41884,41886,41888,41890],{"class":70,"line":18318},[68,41881,40405],{"class":316},[68,41883,40408],{"class":78},[68,41885,40411],{"class":316},[68,41887,40414],{"class":316},[68,41889,40417],{"class":85},[68,41891,5229],{"class":78},[68,41893,41894,41896,41898],{"class":70,"line":18332},[68,41895,40429],{"class":78},[68,41897,1248],{"class":85},[68,41899,1646],{"class":78},[68,41901,41902],{"class":70,"line":18337},[68,41903,3890],{"emptyLinePlaceholder":1567},[68,41905,41906],{"class":70,"line":18342},[68,41907,36649],{"class":302},[68,41909,41910,41912,41914],{"class":70,"line":18356},[68,41911,32285],{"class":316},[68,41913,32577],{"class":74},[68,41915,32580],{"class":78},[68,41917,41918,41920,41922,41924],{"class":70,"line":18368},[68,41919,32585],{"class":78},[68,41921,1685],{"class":316},[68,41923,32307],{"class":85},[68,41925,40526],{"class":78},[68,41927,41928,41930,41932,41934],{"class":70,"line":18373},[68,41929,32585],{"class":78},[68,41931,1685],{"class":316},[68,41933,32307],{"class":85},[68,41935,40537],{"class":78},[68,41937,41938,41940,41942,41944],{"class":70,"line":18386},[68,41939,32585],{"class":78},[68,41941,1685],{"class":316},[68,41943,32307],{"class":85},[68,41945,40548],{"class":78},[68,41947,41948,41950,41952,41954],{"class":70,"line":18391},[68,41949,32585],{"class":78},[68,41951,1685],{"class":316},[68,41953,32307],{"class":85},[68,41955,40559],{"class":78},[68,41957,41958,41960,41962,41964],{"class":70,"line":18396},[68,41959,32585],{"class":78},[68,41961,1685],{"class":316},[68,41963,32307],{"class":85},[68,41965,40570],{"class":78},[68,41967,41968,41970,41972,41974],{"class":70,"line":18401},[68,41969,32585],{"class":78},[68,41971,1685],{"class":316},[68,41973,32307],{"class":85},[68,41975,40581],{"class":78},[68,41977,41978,41980],{"class":70,"line":18414},[68,41979,16240],{"class":316},[68,41981,32693],{"class":78},[68,41983,41984],{"class":70,"line":18419},[68,41985,3890],{"emptyLinePlaceholder":1567},[68,41987,41988],{"class":70,"line":34117},[68,41989,40596],{"class":302},[68,41991,41992,41994,41996,41998,42000],{"class":70,"line":34123},[68,41993,3023],{"class":316},[68,41995,32704],{"class":85},[68,41997,4439],{"class":316},[68,41999,40607],{"class":1742},[68,42001,5229],{"class":78},[68,42003,42004,42006,42008,42010,42012,42014,42016,42018,42020],{"class":70,"line":34129},[68,42005,32721],{"class":78},[68,42007,1685],{"class":316},[68,42009,31935],{"class":78},[68,42011,32728],{"class":1742},[68,42013,3195],{"class":316},[68,42015,32733],{"class":78},[68,42017,3192],{"class":316},[68,42019,31960],{"class":1742},[68,42021,1646],{"class":78},[68,42023,42024,42026],{"class":70,"line":34135},[68,42025,32783],{"class":85},[68,42027,31969],{"class":78},[68,42029,42030,42032,42034],{"class":70,"line":34141},[68,42031,32773],{"class":78},[68,42033,1685],{"class":316},[68,42035,40644],{"class":78},[68,42037,42038,42040,42042,42044,42046,42048,42050,42052],{"class":70,"line":34152},[68,42039,32783],{"class":85},[68,42041,32786],{"class":78},[68,42043,1846],{"class":85},[68,42045,2007],{"class":78},[68,42047,32985],{"class":85},[68,42049,2007],{"class":78},[68,42051,32985],{"class":85},[68,42053,32799],{"class":78},[263,42055,42056],{"start":98},[27,42057,42058],{},"测试代码",[58,42060,42062],{"className":31862,"code":42061,"language":31864,"meta":63,"style":63},"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",[65,42063,42064,42070,42080,42090,42094,42104,42115,42119,42123,42127,42135,42151,42161,42177,42187,42201,42205,42215,42225,42235,42241,42245,42249,42257,42261,42277,42285,42289,42293,42301,42309,42313,42317,42321,42325,42331,42335,42345,42353,42361,42365,42369,42373,42381,42385,42401,42405,42409,42413,42425,42429,42441,42445,42449,42461,42465,42475,42479,42483,42495,42499,42508,42512,42516,42524,42528,42536,42540,42544,42548,42552,42556,42572,42580,42584,42588,42636,42642,42646,42656,42664,42672,42676,42680,42684,42688,42696,42700,42716,42720,42728,42736],{"__ignoreMap":63},[68,42065,42066,42068],{"class":70,"line":71},[68,42067,31876],{"class":316},[68,42069,31879],{"class":78},[68,42071,42072,42074,42076,42078],{"class":70,"line":82},[68,42073,31876],{"class":316},[68,42075,32899],{"class":78},[68,42077,32867],{"class":316},[68,42079,32904],{"class":78},[68,42081,42082,42084,42086,42088],{"class":70,"line":98},[68,42083,32221],{"class":316},[68,42085,32882],{"class":78},[68,42087,31876],{"class":316},[68,42089,32887],{"class":78},[68,42091,42092],{"class":70,"line":104},[68,42093,35406],{"class":302},[68,42095,42096,42098,42100,42102],{"class":70,"line":112},[68,42097,32221],{"class":316},[68,42099,32852],{"class":78},[68,42101,31876],{"class":316},[68,42103,32857],{"class":78},[68,42105,42106,42108,42110,42112],{"class":70,"line":124},[68,42107,32221],{"class":316},[68,42109,33398],{"class":78},[68,42111,31876],{"class":316},[68,42113,42114],{"class":85}," VGG16\n",[68,42116,42117],{"class":70,"line":1496},[68,42118,3890],{"emptyLinePlaceholder":1567},[68,42120,42121],{"class":70,"line":1502},[68,42122,3890],{"emptyLinePlaceholder":1567},[68,42124,42125],{"class":70,"line":1510},[68,42126,35435],{"class":302},[68,42128,42129,42131,42133],{"class":70,"line":1521},[68,42130,33431],{"class":316},[68,42132,35442],{"class":74},[68,42134,33437],{"class":78},[68,42136,42137,42139,42141,42143,42145,42147,42149],{"class":70,"line":3103},[68,42138,35449],{"class":78},[68,42140,1685],{"class":316},[68,42142,32939],{"class":78},[68,42144,32942],{"class":6705},[68,42146,1685],{"class":316},[68,42148,32947],{"class":1742},[68,42150,32950],{"class":78},[68,42152,42153,42155,42157,42159],{"class":70,"line":3108},[68,42154,35466],{"class":6705},[68,42156,1685],{"class":316},[68,42158,35471],{"class":85},[68,42160,32950],{"class":78},[68,42162,42163,42165,42167,42169,42171,42173,42175],{"class":70,"line":3114},[68,42164,35478],{"class":6705},[68,42166,1685],{"class":316},[68,42168,32977],{"class":78},[68,42170,32980],{"class":6705},[68,42172,1685],{"class":316},[68,42174,32985],{"class":85},[68,42176,32988],{"class":78},[68,42178,42179,42181,42183,42185],{"class":70,"line":3119},[68,42180,35495],{"class":6705},[68,42182,1685],{"class":316},[68,42184,32960],{"class":85},[68,42186,1646],{"class":78},[68,42188,42189,42191,42193,42195,42197,42199],{"class":70,"line":3133},[68,42190,35506],{"class":78},[68,42192,1685],{"class":316},[68,42194,33018],{"class":78},[68,42196,33021],{"class":6705},[68,42198,1685],{"class":316},[68,42200,35517],{"class":78},[68,42202,42203],{"class":70,"line":3138},[68,42204,35522],{"class":302},[68,42206,42207,42209,42211,42213],{"class":70,"line":3144},[68,42208,35527],{"class":6705},[68,42210,1685],{"class":316},[68,42212,1846],{"class":85},[68,42214,32950],{"class":78},[68,42216,42217,42219,42221,42223],{"class":70,"line":3165},[68,42218,35538],{"class":6705},[68,42220,1685],{"class":316},[68,42222,32960],{"class":85},[68,42224,32950],{"class":78},[68,42226,42227,42229,42231,42233],{"class":70,"line":3170},[68,42228,35549],{"class":6705},[68,42230,1685],{"class":316},[68,42232,1248],{"class":85},[68,42234,1646],{"class":78},[68,42236,42237,42239],{"class":70,"line":3184},[68,42238,5580],{"class":316},[68,42240,35562],{"class":78},[68,42242,42243],{"class":70,"line":3189},[68,42244,3890],{"emptyLinePlaceholder":1567},[68,42246,42247],{"class":70,"line":3218},[68,42248,35571],{"class":302},[68,42250,42251,42253,42255],{"class":70,"line":3223},[68,42252,33431],{"class":316},[68,42254,35578],{"class":74},[68,42256,35581],{"class":78},[68,42258,42259],{"class":70,"line":3240},[68,42260,35586],{"class":302},[68,42262,42263,42265,42267,42269,42271,42273,42275],{"class":70,"line":3245},[68,42264,32721],{"class":78},[68,42266,1685],{"class":316},[68,42268,32728],{"class":1742},[68,42270,3195],{"class":316},[68,42272,32733],{"class":78},[68,42274,3192],{"class":316},[68,42276,35603],{"class":1742},[68,42278,42279,42281,42283],{"class":70,"line":3250},[68,42280,32773],{"class":78},[68,42282,1685],{"class":316},[68,42284,33773],{"class":78},[68,42286,42287],{"class":70,"line":3255},[68,42288,3890],{"emptyLinePlaceholder":1567},[68,42290,42291],{"class":70,"line":3269},[68,42292,35620],{"class":302},[68,42294,42295,42297,42299],{"class":70,"line":3274},[68,42296,35625],{"class":78},[68,42298,1685],{"class":316},[68,42300,33826],{"class":85},[68,42302,42303,42305,42307],{"class":70,"line":4067},[68,42304,35634],{"class":78},[68,42306,1685],{"class":316},[68,42308,4575],{"class":85},[68,42310,42311],{"class":70,"line":4081},[68,42312,3890],{"emptyLinePlaceholder":1567},[68,42314,42315],{"class":70,"line":4089},[68,42316,35647],{"class":302},[68,42318,42319],{"class":70,"line":4094},[68,42320,35652],{"class":302},[68,42322,42323],{"class":70,"line":4100},[68,42324,35657],{"class":302},[68,42326,42327,42329],{"class":70,"line":4106},[68,42328,35662],{"class":316},[68,42330,34368],{"class":78},[68,42332,42333],{"class":70,"line":4111},[68,42334,35669],{"class":302},[68,42336,42337,42339,42341,42343],{"class":70,"line":9437},[68,42338,4893],{"class":316},[68,42340,35676],{"class":78},[68,42342,27529],{"class":316},[68,42344,35681],{"class":78},[68,42346,42347,42349,42351],{"class":70,"line":9461},[68,42348,35686],{"class":78},[68,42350,1685],{"class":316},[68,42352,35691],{"class":78},[68,42354,42355,42357,42359],{"class":70,"line":9466},[68,42356,35696],{"class":78},[68,42358,1685],{"class":316},[68,42360,35701],{"class":78},[68,42362,42363],{"class":70,"line":9472},[68,42364,35706],{"class":302},[68,42366,42367],{"class":70,"line":9499},[68,42368,34359],{"class":78},[68,42370,42371],{"class":70,"line":9504},[68,42372,35715],{"class":302},[68,42374,42375,42377,42379],{"class":70,"line":9510},[68,42376,34144],{"class":78},[68,42378,1685],{"class":316},[68,42380,35724],{"class":78},[68,42382,42383],{"class":70,"line":9522},[68,42384,35729],{"class":302},[68,42386,42387,42389,42391,42393,42395,42397,42399],{"class":70,"line":9534},[68,42388,34161],{"class":78},[68,42390,1685],{"class":316},[68,42392,34166],{"class":78},[68,42394,34169],{"class":6705},[68,42396,1685],{"class":316},[68,42398,1846],{"class":85},[68,42400,1646],{"class":78},[68,42402,42403],{"class":70,"line":9546},[68,42404,35750],{"class":302},[68,42406,42407],{"class":70,"line":11204},[68,42408,35755],{"class":302},[68,42410,42411],{"class":70,"line":11229},[68,42412,35760],{"class":302},[68,42414,42415,42417,42419,42421,42423],{"class":70,"line":11252},[68,42416,35765],{"class":78},[68,42418,10965],{"class":316},[68,42420,34271],{"class":78},[68,42422,4439],{"class":316},[68,42424,35774],{"class":78},[68,42426,42427],{"class":70,"line":11276},[68,42428,35779],{"class":302},[68,42430,42431,42433,42435,42437,42439],{"class":70,"line":11281},[68,42432,35784],{"class":78},[68,42434,10965],{"class":316},[68,42436,35789],{"class":78},[68,42438,1248],{"class":85},[68,42440,1646],{"class":78},[68,42442,42443],{"class":70,"line":11286},[68,42444,3890],{"emptyLinePlaceholder":1567},[68,42446,42447],{"class":70,"line":11291},[68,42448,35802],{"class":302},[68,42450,42451,42453,42455,42457,42459],{"class":70,"line":11300},[68,42452,35807],{"class":78},[68,42454,1685],{"class":316},[68,42456,35812],{"class":78},[68,42458,2212],{"class":316},[68,42460,35817],{"class":78},[68,42462,42463],{"class":70,"line":11305},[68,42464,35822],{"class":302},[68,42466,42467,42469,42471,42473],{"class":70,"line":11311},[68,42468,33935],{"class":85},[68,42470,1640],{"class":78},[68,42472,35831],{"class":1742},[68,42474,35834],{"class":78},[68,42476,42477],{"class":70,"line":11332},[68,42478,3890],{"emptyLinePlaceholder":1567},[68,42480,42481],{"class":70,"line":11338},[68,42482,35843],{"class":302},[68,42484,42485,42487,42489,42491,42493],{"class":70,"line":11352},[68,42486,3023],{"class":316},[68,42488,32704],{"class":85},[68,42490,4439],{"class":316},[68,42492,32709],{"class":1742},[68,42494,5229],{"class":78},[68,42496,42497],{"class":70,"line":11358},[68,42498,35860],{"class":302},[68,42500,42501,42503,42505],{"class":70,"line":11385},[68,42502,32773],{"class":78},[68,42504,1685],{"class":316},[68,42506,42507],{"class":78},"VGG16()\n",[68,42509,42510],{"class":70,"line":11394},[68,42511,35873],{"class":302},[68,42513,42514],{"class":70,"line":11400},[68,42515,35878],{"class":302},[68,42517,42518,42520,42522],{"class":70,"line":11408},[68,42519,35883],{"class":78},[68,42521,35886],{"class":1742},[68,42523,31981],{"class":78},[68,42525,42526],{"class":70,"line":11413},[68,42527,35893],{"class":302},[68,42529,42530,42532,42534],{"class":70,"line":18091},[68,42531,35506],{"class":78},[68,42533,1685],{"class":316},[68,42535,35902],{"class":78},[68,42537,42538],{"class":70,"line":18097},[68,42539,35907],{"class":302},[68,42541,42542],{"class":70,"line":18120},[68,42543,35912],{"class":78},[68,42545,42546],{"class":70,"line":18126},[68,42547,3890],{"emptyLinePlaceholder":1567},[68,42549,42550],{"class":70,"line":18149},[68,42551,35921],{"class":302},[68,42553,42554],{"class":70,"line":18163},[68,42555,35926],{"class":302},[68,42557,42558,42560,42562,42564,42566,42568,42570],{"class":70,"line":18183},[68,42559,32721],{"class":78},[68,42561,1685],{"class":316},[68,42563,32728],{"class":1742},[68,42565,3195],{"class":316},[68,42567,32733],{"class":78},[68,42569,3192],{"class":316},[68,42571,35603],{"class":1742},[68,42573,42574,42576,42578],{"class":70,"line":18189},[68,42575,32773],{"class":78},[68,42577,1685],{"class":316},[68,42579,33773],{"class":78},[68,42581,42582],{"class":70,"line":18200},[68,42583,35955],{"class":302},[68,42585,42586],{"class":70,"line":18223},[68,42587,35960],{"class":302},[68,42589,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630,42632,42634],{"class":70,"line":18245},[68,42591,35965],{"class":78},[68,42593,1685],{"class":316},[68,42595,2517],{"class":78},[68,42597,35972],{"class":1742},[68,42599,2007],{"class":78},[68,42601,35977],{"class":1742},[68,42603,2007],{"class":78},[68,42605,35982],{"class":1742},[68,42607,2007],{"class":78},[68,42609,35987],{"class":1742},[68,42611,2007],{"class":78},[68,42613,35992],{"class":1742},[68,42615,2007],{"class":78},[68,42617,35997],{"class":1742},[68,42619,2007],{"class":78},[68,42621,36002],{"class":1742},[68,42623,2007],{"class":78},[68,42625,36007],{"class":1742},[68,42627,2007],{"class":78},[68,42629,36012],{"class":1742},[68,42631,2007],{"class":78},[68,42633,36017],{"class":1742},[68,42635,34730],{"class":78},[68,42637,42638,42640],{"class":70,"line":18250},[68,42639,35662],{"class":316},[68,42641,34368],{"class":78},[68,42643,42644],{"class":70,"line":18256},[68,42645,36030],{"class":302},[68,42647,42648,42650,42652,42654],{"class":70,"line":18270},[68,42649,4893],{"class":316},[68,42651,36037],{"class":78},[68,42653,27529],{"class":316},[68,42655,35681],{"class":78},[68,42657,42658,42660,42662],{"class":70,"line":18283},[68,42659,34094],{"class":78},[68,42661,1685],{"class":316},[68,42663,34099],{"class":78},[68,42665,42666,42668,42670],{"class":70,"line":18288},[68,42667,34109],{"class":78},[68,42669,1685],{"class":316},[68,42671,34114],{"class":78},[68,42673,42674],{"class":70,"line":18302},[68,42675,3890],{"emptyLinePlaceholder":1567},[68,42677,42678],{"class":70,"line":18307},[68,42679,36066],{"class":302},[68,42681,42682],{"class":70,"line":18313},[68,42683,34359],{"class":78},[68,42685,42686],{"class":70,"line":18318},[68,42687,36075],{"class":302},[68,42689,42690,42692,42694],{"class":70,"line":18332},[68,42691,34144],{"class":78},[68,42693,1685],{"class":316},[68,42695,34149],{"class":78},[68,42697,42698],{"class":70,"line":18337},[68,42699,36088],{"class":302},[68,42701,42702,42704,42706,42708,42710,42712,42714],{"class":70,"line":18342},[68,42703,34161],{"class":78},[68,42705,1685],{"class":316},[68,42707,34166],{"class":78},[68,42709,34169],{"class":6705},[68,42711,1685],{"class":316},[68,42713,1846],{"class":85},[68,42715,1646],{"class":78},[68,42717,42718],{"class":70,"line":18356},[68,42719,36109],{"class":302},[68,42721,42722,42724,42726],{"class":70,"line":18368},[68,42723,36114],{"class":78},[68,42725,1685],{"class":316},[68,42727,36119],{"class":78},[68,42729,42730,42732,42734],{"class":70,"line":18373},[68,42731,36124],{"class":78},[68,42733,1685],{"class":316},[68,42735,36129],{"class":78},[68,42737,42738,42740,42742,42744,42746,42748,42750,42752],{"class":70,"line":18386},[68,42739,36134],{"class":85},[68,42741,1640],{"class":78},[68,42743,36139],{"class":1742},[68,42745,36142],{"class":78},[68,42747,36145],{"class":1742},[68,42749,2007],{"class":78},[68,42751,36150],{"class":1742},[68,42753,36153],{"class":78},[19,42755,42757],{"id":42756},"_23googlenet","2.3.GoogLeNet",[245,42759,42761],{"id":42760},"_231原理","2.3.1.原理",[263,42763,42764],{},[27,42765,42766],{},"网络结构",[170,42768,42769],{},[801,42770],{"alt":63,"src":42771},"\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",[170,42773,42774],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[170,42776,42777],{},[801,42778],{"alt":63,"src":42779},"\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",[170,42781,42782],{},[801,42783],{"alt":63,"src":42784},"\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",[170,42786,42787],{},[801,42788],{"alt":63,"src":42789},"\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",[263,42791,42792],{"start":82},[27,42793,42794],{},"1x1卷积的优点",[170,42796,42797],{},[801,42798],{"alt":63,"src":42799},"\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",[263,42801,42802],{"start":98},[27,42803,42804],{},"全局平均池化层优点",[170,42806,42807],{},[801,42808],{"alt":63,"src":42809},"\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",[170,42811,42812],{},[801,42813],{"alt":63,"src":42814},"\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",[263,42816,42817],{"start":104},[27,42818,42819],{},"参数详细描述",[170,42821,42822],{},[801,42823],{"alt":63,"src":42824},"\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",[170,42826,42827],{},[801,42828],{"alt":63,"src":42829},"\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",[170,42831,42832],{},[801,42833],{"alt":63,"src":42834},"\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",[170,42836,42837],{},[801,42838],{"alt":63,"src":42839},"\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",[170,42841,42842],{},[801,42843],{"alt":63,"src":42844},"\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",[170,42846,42847],{},[801,42848],{"alt":63,"src":42849},"\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",[170,42851,42852],{},[801,42853],{"alt":63,"src":42854},"\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",[170,42856,42857],{},[801,42858],{"alt":63,"src":42859},"\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",[170,42861,42862],{},[801,42863],{"alt":63,"src":42864},"\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",[170,42866,42867],{},[801,42868],{"alt":63,"src":42869},"\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",[170,42871,42872],{},[801,42873],{"alt":63,"src":42874},"\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",[170,42876,42877],{},[801,42878],{"alt":63,"src":42879},"\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",[170,42881,42882],{},[801,42883],{"alt":63,"src":42884},"\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",[170,42886,42887],{},[801,42888],{"alt":63,"src":42889},"\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",[170,42891,42892],{},[801,42893],{"alt":63,"src":42894},"\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",[170,42896,42897],{},[801,42898],{"alt":63,"src":42899},"\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",[170,42901,42902],{},[801,42903],{"alt":63,"src":42904},"\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",[170,42906,42907],{},[801,42908],{"alt":63,"src":42909},"\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",[170,42911,42912],{},[801,42913],{"alt":63,"src":42914},"\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",[170,42916,42917],{},[801,42918],{"alt":63,"src":42919},"\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",[170,42921,42922],{},[801,42923],{"alt":63,"src":42924},"\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",[245,42926,42928],{"id":42927},"_232代码实现","2.3.2.代码实现",[263,42930,42931],{},[27,42932,32195],{},[170,42934,42935],{},"根据原理一步一步搭建即可",[58,42937,42939],{"className":31862,"code":42938,"language":31864,"meta":63,"style":63},"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",[65,42940,42941,42947,42957,42967,42971,42988,42997,43012,43022,43027,43060,43065,43102,43149,43154,43190,43237,43242,43247,43282,43314,43318,43326,43342,43366,43391,43412,43417,43432,43436,43440,43445,43462,43467,43476,43491,43502,43546,43550,43578,43582,43593,43621,43625,43662,43666,43694,43698,43709,43745,43777,43805,43809,43820,43854,43886,43918,43951,43985,44013,44017,44028,44061,44093,44107,44111,44124,44128,44133,44145,44153,44175,44180,44185,44190,44195,44200,44205,44219,44227,44236,44249,44264,44273,44277,44285,44296,44307,44318,44329,44340,44346,44350,44355,44367,44387,44396],{"__ignoreMap":63},[68,42942,42943,42945],{"class":70,"line":71},[68,42944,31876],{"class":316},[68,42946,31879],{"class":78},[68,42948,42949,42951,42953,42955],{"class":70,"line":82},[68,42950,32221],{"class":316},[68,42952,32224],{"class":78},[68,42954,31876],{"class":316},[68,42956,32229],{"class":78},[68,42958,42959,42961,42963,42965],{"class":70,"line":98},[68,42960,32221],{"class":316},[68,42962,32241],{"class":78},[68,42964,31876],{"class":316},[68,42966,32246],{"class":78},[68,42968,42969],{"class":70,"line":104},[68,42970,3890],{"emptyLinePlaceholder":1567},[68,42972,42973,42975,42978,42980,42982,42984,42986],{"class":70,"line":112},[68,42974,16182],{"class":316},[68,42976,42977],{"class":74}," Inception",[68,42979,1640],{"class":78},[68,42981,32262],{"class":74},[68,42983,2186],{"class":78},[68,42985,32267],{"class":74},[68,42987,32270],{"class":78},[68,42989,42990,42992,42994],{"class":70,"line":124},[68,42991,32285],{"class":316},[68,42993,32288],{"class":85},[68,42995,42996],{"class":78},"(self,in_channels,c1,c2,c3,c4):\n",[68,42998,42999,43001,43004,43006,43008,43010],{"class":70,"line":1496},[68,43000,32301],{"class":85},[68,43002,43003],{"class":78},"(Inception,",[68,43005,32307],{"class":85},[68,43007,32310],{"class":78},[68,43009,32313],{"class":85},[68,43011,3466],{"class":78},[68,43013,43014,43016,43018,43020],{"class":70,"line":1502},[68,43015,32329],{"class":85},[68,43017,36255],{"class":78},[68,43019,1685],{"class":316},[68,43021,36260],{"class":78},[68,43023,43024],{"class":70,"line":1510},[68,43025,43026],{"class":302},"        # 路线1：定义1*1卷积\n",[68,43028,43029,43031,43034,43036,43038,43040,43042,43045,43047,43049,43052,43054,43056,43058],{"class":70,"line":1521},[68,43030,32329],{"class":85},[68,43032,43033],{"class":78},".p1_1",[68,43035,1685],{"class":316},[68,43037,32337],{"class":78},[68,43039,32340],{"class":6705},[68,43041,1685],{"class":316},[68,43043,43044],{"class":78},"in_channels,",[68,43046,32349],{"class":6705},[68,43048,1685],{"class":316},[68,43050,43051],{"class":78},"c1,",[68,43053,32358],{"class":6705},[68,43055,1685],{"class":316},[68,43057,1846],{"class":85},[68,43059,1646],{"class":78},[68,43061,43062],{"class":70,"line":3103},[68,43063,43064],{"class":302},"        # 路线2：定义1*1卷积和3*3\n",[68,43066,43067,43069,43072,43074,43076,43078,43080,43082,43084,43086,43089,43091,43094,43096,43098,43100],{"class":70,"line":3108},[68,43068,32329],{"class":85},[68,43070,43071],{"class":78},".p2_1",[68,43073,1685],{"class":316},[68,43075,32337],{"class":78},[68,43077,32340],{"class":6705},[68,43079,1685],{"class":316},[68,43081,43044],{"class":78},[68,43083,32349],{"class":6705},[68,43085,1685],{"class":316},[68,43087,43088],{"class":78},"c2[",[68,43090,1248],{"class":85},[68,43092,43093],{"class":78},"],",[68,43095,32358],{"class":6705},[68,43097,1685],{"class":316},[68,43099,1846],{"class":85},[68,43101,1646],{"class":78},[68,43103,43104,43106,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147],{"class":70,"line":3114},[68,43105,32329],{"class":85},[68,43107,43108],{"class":78},".p2_2",[68,43110,1685],{"class":316},[68,43112,32337],{"class":78},[68,43114,32340],{"class":6705},[68,43116,1685],{"class":316},[68,43118,43088],{"class":78},[68,43120,1248],{"class":85},[68,43122,43093],{"class":78},[68,43124,32349],{"class":6705},[68,43126,1685],{"class":316},[68,43128,43088],{"class":78},[68,43130,1846],{"class":85},[68,43132,43093],{"class":78},[68,43134,32358],{"class":6705},[68,43136,1685],{"class":316},[68,43138,1709],{"class":85},[68,43140,2007],{"class":78},[68,43142,32367],{"class":6705},[68,43144,1685],{"class":316},[68,43146,1846],{"class":85},[68,43148,1646],{"class":78},[68,43150,43151],{"class":70,"line":3119},[68,43152,43153],{"class":302},"        # 路线3：定义1*1卷积和5*5\n",[68,43155,43156,43158,43161,43163,43165,43167,43169,43171,43173,43175,43178,43180,43182,43184,43186,43188],{"class":70,"line":3133},[68,43157,32329],{"class":85},[68,43159,43160],{"class":78},".p3_1",[68,43162,1685],{"class":316},[68,43164,32337],{"class":78},[68,43166,32340],{"class":6705},[68,43168,1685],{"class":316},[68,43170,43044],{"class":78},[68,43172,32349],{"class":6705},[68,43174,1685],{"class":316},[68,43176,43177],{"class":78},"c3[",[68,43179,1248],{"class":85},[68,43181,43093],{"class":78},[68,43183,32358],{"class":6705},[68,43185,1685],{"class":316},[68,43187,1846],{"class":85},[68,43189,1646],{"class":78},[68,43191,43192,43194,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221,43223,43225,43227,43229,43231,43233,43235],{"class":70,"line":3138},[68,43193,32329],{"class":85},[68,43195,43196],{"class":78},".p3_2",[68,43198,1685],{"class":316},[68,43200,32337],{"class":78},[68,43202,32340],{"class":6705},[68,43204,1685],{"class":316},[68,43206,43177],{"class":78},[68,43208,1248],{"class":85},[68,43210,43093],{"class":78},[68,43212,32349],{"class":6705},[68,43214,1685],{"class":316},[68,43216,43177],{"class":78},[68,43218,1846],{"class":85},[68,43220,43093],{"class":78},[68,43222,32358],{"class":6705},[68,43224,1685],{"class":316},[68,43226,1948],{"class":85},[68,43228,2007],{"class":78},[68,43230,32367],{"class":6705},[68,43232,1685],{"class":316},[68,43234,1715],{"class":85},[68,43236,1646],{"class":78},[68,43238,43239],{"class":70,"line":3144},[68,43240,43241],{"class":302},"        # 路线4：定义3*3最大池化和1*1卷积\n",[68,43243,43244],{"class":70,"line":3165},[68,43245,43246],{"class":302},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[68,43248,43249,43251,43254,43256,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278,43280],{"class":70,"line":3170},[68,43250,32329],{"class":85},[68,43252,43253],{"class":78},".p4_1",[68,43255,1685],{"class":316},[68,43257,36313],{"class":78},[68,43259,32358],{"class":6705},[68,43261,1685],{"class":316},[68,43263,1709],{"class":85},[68,43265,2007],{"class":78},[68,43267,32413],{"class":6705},[68,43269,1685],{"class":316},[68,43271,1846],{"class":85},[68,43273,2007],{"class":78},[68,43275,32367],{"class":6705},[68,43277,1685],{"class":316},[68,43279,1846],{"class":85},[68,43281,1646],{"class":78},[68,43283,43284,43286,43289,43291,43293,43295,43297,43299,43301,43303,43306,43308,43310,43312],{"class":70,"line":3184},[68,43285,32329],{"class":85},[68,43287,43288],{"class":78},".p4_2",[68,43290,1685],{"class":316},[68,43292,32337],{"class":78},[68,43294,32340],{"class":6705},[68,43296,1685],{"class":316},[68,43298,43044],{"class":78},[68,43300,32349],{"class":6705},[68,43302,1685],{"class":316},[68,43304,43305],{"class":78},"c4,",[68,43307,32358],{"class":6705},[68,43309,1685],{"class":316},[68,43311,1846],{"class":85},[68,43313,1646],{"class":78},[68,43315,43316],{"class":70,"line":3189},[68,43317,3890],{"emptyLinePlaceholder":1567},[68,43319,43320,43322,43324],{"class":70,"line":3218},[68,43321,32285],{"class":316},[68,43323,32577],{"class":74},[68,43325,32580],{"class":78},[68,43327,43328,43331,43333,43335,43337,43339],{"class":70,"line":3223},[68,43329,43330],{"class":78},"        p1",[68,43332,1685],{"class":316},[68,43334,32307],{"class":85},[68,43336,36668],{"class":78},[68,43338,32307],{"class":85},[68,43340,43341],{"class":78},".p1_1(x))\n",[68,43343,43344,43346,43348,43350,43352,43354,43357,43359,43361,43363],{"class":70,"line":3240},[68,43345,8574],{"class":78},[68,43347,1685],{"class":316},[68,43349,32307],{"class":85},[68,43351,36668],{"class":78},[68,43353,32307],{"class":85},[68,43355,43356],{"class":78},".p2_2(",[68,43358,32307],{"class":85},[68,43360,36668],{"class":78},[68,43362,32307],{"class":85},[68,43364,43365],{"class":78},".p2_1(x))))\n",[68,43367,43368,43371,43373,43375,43377,43379,43382,43384,43386,43388],{"class":70,"line":3245},[68,43369,43370],{"class":78},"        p3",[68,43372,1685],{"class":316},[68,43374,32307],{"class":85},[68,43376,36668],{"class":78},[68,43378,32307],{"class":85},[68,43380,43381],{"class":78},".p3_2(",[68,43383,32307],{"class":85},[68,43385,36668],{"class":78},[68,43387,32307],{"class":85},[68,43389,43390],{"class":78},".p3_1(x))))\n",[68,43392,43393,43396,43398,43400,43402,43404,43407,43409],{"class":70,"line":3250},[68,43394,43395],{"class":78},"        p4",[68,43397,1685],{"class":316},[68,43399,32307],{"class":85},[68,43401,36668],{"class":78},[68,43403,32307],{"class":85},[68,43405,43406],{"class":78},".p4_2(",[68,43408,32307],{"class":85},[68,43410,43411],{"class":78},".p4_1(x)))\n",[68,43413,43414],{"class":70,"line":3255},[68,43415,43416],{"class":302},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[68,43418,43419,43421,43424,43426,43428,43430],{"class":70,"line":3269},[68,43420,16240],{"class":316},[68,43422,43423],{"class":78}," torch.cat((p1,p2,p3,p4),",[68,43425,34169],{"class":6705},[68,43427,1685],{"class":316},[68,43429,1846],{"class":85},[68,43431,1646],{"class":78},[68,43433,43434],{"class":70,"line":3274},[68,43435,3890],{"emptyLinePlaceholder":1567},[68,43437,43438],{"class":70,"line":4067},[68,43439,3890],{"emptyLinePlaceholder":1567},[68,43441,43442],{"class":70,"line":4081},[68,43443,43444],{"class":302},"# 搭建GoogLeNet网络\n",[68,43446,43447,43449,43452,43454,43456,43458,43460],{"class":70,"line":4089},[68,43448,16182],{"class":316},[68,43450,43451],{"class":74}," GoogLeNet",[68,43453,1640],{"class":78},[68,43455,32262],{"class":74},[68,43457,2186],{"class":78},[68,43459,32267],{"class":74},[68,43461,32270],{"class":78},[68,43463,43464],{"class":70,"line":4094},[68,43465,43466],{"class":302},"    # 必须把Inception导入到里边\n",[68,43468,43469,43471,43473],{"class":70,"line":4100},[68,43470,32285],{"class":316},[68,43472,32288],{"class":85},[68,43474,43475],{"class":78},"(self,Inception):\n",[68,43477,43478,43480,43483,43485,43487,43489],{"class":70,"line":4106},[68,43479,32301],{"class":85},[68,43481,43482],{"class":78},"(GoogLeNet,",[68,43484,32307],{"class":85},[68,43486,32310],{"class":78},[68,43488,32313],{"class":85},[68,43490,3466],{"class":78},[68,43492,43493,43495,43498,43500],{"class":70,"line":4111},[68,43494,32329],{"class":85},[68,43496,43497],{"class":78},".b1",[68,43499,1685],{"class":316},[68,43501,39493],{"class":78},[68,43503,43504,43506,43508,43510,43512,43514,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544],{"class":70,"line":9437},[68,43505,39498],{"class":78},[68,43507,32340],{"class":6705},[68,43509,1685],{"class":316},[68,43511,1846],{"class":85},[68,43513,2007],{"class":78},[68,43515,32349],{"class":6705},[68,43517,1685],{"class":316},[68,43519,1832],{"class":85},[68,43521,2007],{"class":78},[68,43523,32358],{"class":6705},[68,43525,1685],{"class":316},[68,43527,1998],{"class":85},[68,43529,2007],{"class":78},[68,43531,32413],{"class":6705},[68,43533,1685],{"class":316},[68,43535,1715],{"class":85},[68,43537,2007],{"class":78},[68,43539,32367],{"class":6705},[68,43541,1685],{"class":316},[68,43543,1709],{"class":85},[68,43545,39531],{"class":78},[68,43547,43548],{"class":70,"line":9461},[68,43549,39536],{"class":78},[68,43551,43552,43554,43556,43558,43560,43562,43564,43566,43568,43570,43572,43574,43576],{"class":70,"line":9466},[68,43553,39581],{"class":78},[68,43555,32358],{"class":6705},[68,43557,1685],{"class":316},[68,43559,1709],{"class":85},[68,43561,2007],{"class":78},[68,43563,32413],{"class":6705},[68,43565,1685],{"class":316},[68,43567,1715],{"class":85},[68,43569,2007],{"class":78},[68,43571,32367],{"class":6705},[68,43573,1685],{"class":316},[68,43575,1846],{"class":85},[68,43577,1646],{"class":78},[68,43579,43580],{"class":70,"line":9472},[68,43581,39610],{"class":78},[68,43583,43584,43586,43589,43591],{"class":70,"line":9499},[68,43585,32329],{"class":85},[68,43587,43588],{"class":78},".b2",[68,43590,1685],{"class":316},[68,43592,39493],{"class":78},[68,43594,43595,43597,43599,43601,43603,43605,43607,43609,43611,43613,43615,43617,43619],{"class":70,"line":9504},[68,43596,39498],{"class":78},[68,43598,32340],{"class":6705},[68,43600,1685],{"class":316},[68,43602,1832],{"class":85},[68,43604,2007],{"class":78},[68,43606,32349],{"class":6705},[68,43608,1685],{"class":316},[68,43610,1832],{"class":85},[68,43612,2007],{"class":78},[68,43614,32358],{"class":6705},[68,43616,1685],{"class":316},[68,43618,1846],{"class":85},[68,43620,39531],{"class":78},[68,43622,43623],{"class":70,"line":9510},[68,43624,39536],{"class":78},[68,43626,43627,43629,43631,43633,43635,43637,43639,43641,43644,43646,43648,43650,43652,43654,43656,43658,43660],{"class":70,"line":9522},[68,43628,39498],{"class":78},[68,43630,32340],{"class":6705},[68,43632,1685],{"class":316},[68,43634,1832],{"class":85},[68,43636,2007],{"class":78},[68,43638,32349],{"class":6705},[68,43640,1685],{"class":316},[68,43642,43643],{"class":85},"192",[68,43645,2007],{"class":78},[68,43647,32358],{"class":6705},[68,43649,1685],{"class":316},[68,43651,1709],{"class":85},[68,43653,2007],{"class":78},[68,43655,32367],{"class":6705},[68,43657,1685],{"class":316},[68,43659,1846],{"class":85},[68,43661,39531],{"class":78},[68,43663,43664],{"class":70,"line":9534},[68,43665,39536],{"class":78},[68,43667,43668,43670,43672,43674,43676,43678,43680,43682,43684,43686,43688,43690,43692],{"class":70,"line":9546},[68,43669,39581],{"class":78},[68,43671,32358],{"class":6705},[68,43673,1685],{"class":316},[68,43675,1709],{"class":85},[68,43677,2007],{"class":78},[68,43679,32413],{"class":6705},[68,43681,1685],{"class":316},[68,43683,1715],{"class":85},[68,43685,2007],{"class":78},[68,43687,32367],{"class":6705},[68,43689,1685],{"class":316},[68,43691,1846],{"class":85},[68,43693,1646],{"class":78},[68,43695,43696],{"class":70,"line":11204},[68,43697,39610],{"class":78},[68,43699,43700,43702,43705,43707],{"class":70,"line":11229},[68,43701,32329],{"class":85},[68,43703,43704],{"class":78},".b3",[68,43706,1685],{"class":316},[68,43708,39493],{"class":78},[68,43710,43711,43714,43716,43718,43720,43723,43725,43727,43729,43732,43734,43736,43738,43741,43743],{"class":70,"line":11252},[68,43712,43713],{"class":78},"            Inception(",[68,43715,43643],{"class":85},[68,43717,2007],{"class":78},[68,43719,1832],{"class":85},[68,43721,43722],{"class":78},",(",[68,43724,1838],{"class":85},[68,43726,2007],{"class":78},[68,43728,33554],{"class":85},[68,43730,43731],{"class":78},"),(",[68,43733,2229],{"class":85},[68,43735,2007],{"class":78},[68,43737,1826],{"class":85},[68,43739,43740],{"class":78},"),",[68,43742,1826],{"class":85},[68,43744,39531],{"class":78},[68,43746,43747,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775],{"class":70,"line":11276},[68,43748,43713],{"class":78},[68,43750,36354],{"class":85},[68,43752,2007],{"class":78},[68,43754,33554],{"class":85},[68,43756,43722],{"class":78},[68,43758,33554],{"class":85},[68,43760,2007],{"class":78},[68,43762,43643],{"class":85},[68,43764,43731],{"class":78},[68,43766,1826],{"class":85},[68,43768,2007],{"class":78},[68,43770,1838],{"class":85},[68,43772,43740],{"class":78},[68,43774,1832],{"class":85},[68,43776,39531],{"class":78},[68,43778,43779,43781,43783,43785,43787,43789,43791,43793,43795,43797,43799,43801,43803],{"class":70,"line":11281},[68,43780,39581],{"class":78},[68,43782,32358],{"class":6705},[68,43784,1685],{"class":316},[68,43786,1709],{"class":85},[68,43788,2007],{"class":78},[68,43790,32413],{"class":6705},[68,43792,1685],{"class":316},[68,43794,1715],{"class":85},[68,43796,2007],{"class":78},[68,43798,32367],{"class":6705},[68,43800,1685],{"class":316},[68,43802,1846],{"class":85},[68,43804,1646],{"class":78},[68,43806,43807],{"class":70,"line":11286},[68,43808,39610],{"class":78},[68,43810,43811,43813,43816,43818],{"class":70,"line":11291},[68,43812,32329],{"class":85},[68,43814,43815],{"class":78},".b4",[68,43817,1685],{"class":316},[68,43819,39493],{"class":78},[68,43821,43822,43824,43827,43829,43831,43833,43835,43837,43840,43842,43844,43846,43848,43850,43852],{"class":70,"line":11300},[68,43823,43713],{"class":78},[68,43825,43826],{"class":85},"480",[68,43828,2007],{"class":78},[68,43830,43643],{"class":85},[68,43832,43722],{"class":78},[68,43834,1838],{"class":85},[68,43836,2007],{"class":78},[68,43838,43839],{"class":85},"208",[68,43841,43731],{"class":78},[68,43843,2229],{"class":85},[68,43845,2007],{"class":78},[68,43847,2235],{"class":85},[68,43849,43740],{"class":78},[68,43851,1832],{"class":85},[68,43853,39531],{"class":78},[68,43855,43856,43858,43860,43862,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882,43884],{"class":70,"line":11305},[68,43857,43713],{"class":78},[68,43859,39941],{"class":85},[68,43861,2007],{"class":78},[68,43863,22535],{"class":85},[68,43865,43722],{"class":78},[68,43867,2246],{"class":85},[68,43869,2007],{"class":78},[68,43871,32985],{"class":85},[68,43873,43731],{"class":78},[68,43875,2427],{"class":85},[68,43877,2007],{"class":78},[68,43879,1832],{"class":85},[68,43881,43740],{"class":78},[68,43883,1832],{"class":85},[68,43885,39531],{"class":78},[68,43887,43888,43890,43892,43894,43896,43898,43900,43902,43904,43906,43908,43910,43912,43914,43916],{"class":70,"line":11311},[68,43889,43713],{"class":78},[68,43891,39941],{"class":85},[68,43893,2007],{"class":78},[68,43895,33554],{"class":85},[68,43897,43722],{"class":78},[68,43899,33554],{"class":85},[68,43901,2007],{"class":78},[68,43903,36354],{"class":85},[68,43905,43731],{"class":78},[68,43907,2427],{"class":85},[68,43909,2007],{"class":78},[68,43911,1832],{"class":85},[68,43913,43740],{"class":78},[68,43915,1832],{"class":85},[68,43917,39531],{"class":78},[68,43919,43920,43922,43924,43926,43928,43930,43932,43934,43937,43939,43941,43943,43945,43947,43949],{"class":70,"line":11332},[68,43921,43713],{"class":78},[68,43923,39941],{"class":85},[68,43925,2007],{"class":78},[68,43927,2246],{"class":85},[68,43929,43722],{"class":78},[68,43931,33554],{"class":85},[68,43933,2007],{"class":78},[68,43935,43936],{"class":85},"288",[68,43938,43731],{"class":78},[68,43940,1826],{"class":85},[68,43942,2007],{"class":78},[68,43944,1832],{"class":85},[68,43946,43740],{"class":78},[68,43948,1832],{"class":85},[68,43950,39531],{"class":78},[68,43952,43953,43955,43958,43960,43962,43964,43966,43968,43971,43973,43975,43977,43979,43981,43983],{"class":70,"line":11338},[68,43954,43713],{"class":78},[68,43956,43957],{"class":85},"528",[68,43959,2007],{"class":78},[68,43961,36354],{"class":85},[68,43963,43722],{"class":78},[68,43965,22535],{"class":85},[68,43967,2007],{"class":78},[68,43969,43970],{"class":85},"320",[68,43972,43731],{"class":78},[68,43974,1826],{"class":85},[68,43976,2007],{"class":78},[68,43978,33554],{"class":85},[68,43980,43740],{"class":78},[68,43982,33554],{"class":85},[68,43984,39531],{"class":78},[68,43986,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011],{"class":70,"line":11352},[68,43988,39581],{"class":78},[68,43990,32358],{"class":6705},[68,43992,1685],{"class":316},[68,43994,1709],{"class":85},[68,43996,2007],{"class":78},[68,43998,32413],{"class":6705},[68,44000,1685],{"class":316},[68,44002,1715],{"class":85},[68,44004,2007],{"class":78},[68,44006,32367],{"class":6705},[68,44008,1685],{"class":316},[68,44010,1846],{"class":85},[68,44012,1646],{"class":78},[68,44014,44015],{"class":70,"line":11358},[68,44016,39610],{"class":78},[68,44018,44019,44021,44024,44026],{"class":70,"line":11385},[68,44020,32329],{"class":85},[68,44022,44023],{"class":78},".b5",[68,44025,1685],{"class":316},[68,44027,39493],{"class":78},[68,44029,44030,44032,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059],{"class":70,"line":11394},[68,44031,43713],{"class":78},[68,44033,44034],{"class":85},"832",[68,44036,2007],{"class":78},[68,44038,36354],{"class":85},[68,44040,43722],{"class":78},[68,44042,22535],{"class":85},[68,44044,2007],{"class":78},[68,44046,43970],{"class":85},[68,44048,43731],{"class":78},[68,44050,1826],{"class":85},[68,44052,2007],{"class":78},[68,44054,33554],{"class":85},[68,44056,43740],{"class":78},[68,44058,33554],{"class":85},[68,44060,39531],{"class":78},[68,44062,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091],{"class":70,"line":11400},[68,44064,43713],{"class":78},[68,44066,44034],{"class":85},[68,44068,2007],{"class":78},[68,44070,36424],{"class":85},[68,44072,43722],{"class":78},[68,44074,43643],{"class":85},[68,44076,2007],{"class":78},[68,44078,36424],{"class":85},[68,44080,43731],{"class":78},[68,44082,2235],{"class":85},[68,44084,2007],{"class":78},[68,44086,33554],{"class":85},[68,44088,43740],{"class":78},[68,44090,33554],{"class":85},[68,44092,39531],{"class":78},[68,44094,44095,44098,44100,44102,44104],{"class":70,"line":11408},[68,44096,44097],{"class":78},"            nn.AdaptiveAvgPool2d((",[68,44099,1846],{"class":85},[68,44101,2007],{"class":78},[68,44103,1846],{"class":85},[68,44105,44106],{"class":78},")),\n",[68,44108,44109],{"class":70,"line":11413},[68,44110,40274],{"class":78},[68,44112,44113,44115,44118,44120,44122],{"class":70,"line":18091},[68,44114,40279],{"class":78},[68,44116,44117],{"class":85},"1024",[68,44119,2007],{"class":78},[68,44121,313],{"class":85},[68,44123,1646],{"class":78},[68,44125,44126],{"class":70,"line":18097},[68,44127,39610],{"class":78},[68,44129,44130],{"class":70,"line":18120},[68,44131,44132],{"class":302},"        # 对模型参数初始化\n",[68,44134,44135,44137,44139,44141,44143],{"class":70,"line":18126},[68,44136,4893],{"class":316},[68,44138,40352],{"class":78},[68,44140,27529],{"class":316},[68,44142,40357],{"class":85},[68,44144,40360],{"class":78},[68,44146,44147,44149,44151],{"class":70,"line":18149},[68,44148,6132],{"class":316},[68,44150,40372],{"class":85},[68,44152,40375],{"class":78},[68,44154,44155,44157,44160,44162,44165,44167,44169,44171,44173],{"class":70,"line":18163},[68,44156,40385],{"class":78},[68,44158,44159],{"class":6705},"mode",[68,44161,1685],{"class":316},[68,44163,44164],{"class":1742},"'fan_out'",[68,44166,2007],{"class":78},[68,44168,40388],{"class":6705},[68,44170,1685],{"class":316},[68,44172,40393],{"class":1742},[68,44174,1646],{"class":78},[68,44176,44177],{"class":70,"line":18183},[68,44178,44179],{"class":302},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[68,44181,44182],{"class":70,"line":18189},[68,44183,44184],{"class":302},"                # ② mode = 'fan_out'决定使用的fan值：\n",[68,44186,44187],{"class":70,"line":18200},[68,44188,44189],{"class":302},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[68,44191,44192],{"class":70,"line":18223},[68,44193,44194],{"class":302},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[68,44196,44197],{"class":70,"line":18245},[68,44198,44199],{"class":302},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[68,44201,44202],{"class":70,"line":18250},[68,44203,44204],{"class":302},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[68,44206,44207,44209,44211,44213,44215,44217],{"class":70,"line":18256},[68,44208,40405],{"class":316},[68,44210,40408],{"class":78},[68,44212,40411],{"class":316},[68,44214,40414],{"class":316},[68,44216,40417],{"class":85},[68,44218,5229],{"class":78},[68,44220,44221,44223,44225],{"class":70,"line":18270},[68,44222,40429],{"class":78},[68,44224,1248],{"class":85},[68,44226,1646],{"class":78},[68,44228,44229,44232,44234],{"class":70,"line":18283},[68,44230,44231],{"class":316},"                elif",[68,44233,40372],{"class":85},[68,44235,40448],{"class":78},[68,44237,44238,44241,44243,44245,44247],{"class":70,"line":18288},[68,44239,44240],{"class":78},"                    nn.init.normal_(m.weight,",[68,44242,1248],{"class":85},[68,44244,2007],{"class":78},[68,44246,40470],{"class":85},[68,44248,1646],{"class":78},[68,44250,44251,44254,44256,44258,44260,44262],{"class":70,"line":18302},[68,44252,44253],{"class":316},"                    if",[68,44255,40408],{"class":78},[68,44257,40411],{"class":316},[68,44259,40414],{"class":316},[68,44261,40417],{"class":85},[68,44263,5229],{"class":78},[68,44265,44266,44269,44271],{"class":70,"line":18307},[68,44267,44268],{"class":78},"                        nn.init.constant_(m.bias,",[68,44270,1248],{"class":85},[68,44272,1646],{"class":78},[68,44274,44275],{"class":70,"line":18313},[68,44276,36649],{"class":302},[68,44278,44279,44281,44283],{"class":70,"line":18318},[68,44280,32285],{"class":316},[68,44282,32577],{"class":74},[68,44284,32580],{"class":78},[68,44286,44287,44289,44291,44293],{"class":70,"line":18332},[68,44288,32585],{"class":78},[68,44290,1685],{"class":316},[68,44292,32307],{"class":85},[68,44294,44295],{"class":78},".b1(x)\n",[68,44297,44298,44300,44302,44304],{"class":70,"line":18337},[68,44299,32585],{"class":78},[68,44301,1685],{"class":316},[68,44303,32307],{"class":85},[68,44305,44306],{"class":78},".b2(x)\n",[68,44308,44309,44311,44313,44315],{"class":70,"line":18342},[68,44310,32585],{"class":78},[68,44312,1685],{"class":316},[68,44314,32307],{"class":85},[68,44316,44317],{"class":78},".b3(x)\n",[68,44319,44320,44322,44324,44326],{"class":70,"line":18356},[68,44321,32585],{"class":78},[68,44323,1685],{"class":316},[68,44325,32307],{"class":85},[68,44327,44328],{"class":78},".b4(x)\n",[68,44330,44331,44333,44335,44337],{"class":70,"line":18368},[68,44332,32585],{"class":78},[68,44334,1685],{"class":316},[68,44336,32307],{"class":85},[68,44338,44339],{"class":78},".b5(x)\n",[68,44341,44342,44344],{"class":70,"line":18373},[68,44343,16240],{"class":316},[68,44345,32693],{"class":78},[68,44347,44348],{"class":70,"line":18386},[68,44349,3890],{"emptyLinePlaceholder":1567},[68,44351,44352],{"class":70,"line":18391},[68,44353,44354],{"class":302},"# 模型展示\n",[68,44356,44357,44359,44361,44363,44365],{"class":70,"line":18396},[68,44358,3023],{"class":316},[68,44360,32704],{"class":85},[68,44362,4439],{"class":316},[68,44364,32709],{"class":1742},[68,44366,5229],{"class":78},[68,44368,44369,44371,44373,44375,44377,44379,44381,44383,44385],{"class":70,"line":18401},[68,44370,32721],{"class":78},[68,44372,1685],{"class":316},[68,44374,31935],{"class":78},[68,44376,32728],{"class":1742},[68,44378,3195],{"class":316},[68,44380,32733],{"class":78},[68,44382,3192],{"class":316},[68,44384,31960],{"class":1742},[68,44386,1646],{"class":78},[68,44388,44389,44391,44393],{"class":70,"line":18414},[68,44390,32773],{"class":78},[68,44392,1685],{"class":316},[68,44394,44395],{"class":78},"GoogLeNet(Inception).to(device)\n",[68,44397,44398,44400,44402,44404,44406,44408,44410,44412],{"class":70,"line":18419},[68,44399,32783],{"class":85},[68,44401,32786],{"class":78},[68,44403,1846],{"class":85},[68,44405,2007],{"class":78},[68,44407,32985],{"class":85},[68,44409,2007],{"class":78},[68,44411,32985],{"class":85},[68,44413,32799],{"class":78},[263,44415,44416],{"start":82},[27,44417,40667],{},[58,44419,44421],{"className":31862,"code":44420,"language":31864,"meta":63,"style":63},"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",[65,44422,44423,44429,44435,44445,44451,44461,44471,44481,44491,44501,44505,44516,44526,44530,44534,44538,44546,44558,44568,44584,44594,44626,44640,44650,44660,44664,44674,44688,44698,44708,44718,44724,44728,44732,44736,44740,44744,44752,44772,44776,44780,44784,44788,44792,44808,44812,44816,44824,44828,44832,44840,44844,44848,44852,44860,44864,44868,44872,44876,44884,44888,44896,44900,44908,44912,44920,44924,44932,44936,44940,44948,44952,44956,44960,44972,44996,45010,45014,45018,45022,45030,45034,45042,45046,45054,45058,45066,45070,45078,45082,45090,45094,45106,45110,45118,45122,45130,45134,45138,45142,45146,45154,45158,45174,45178,45186,45190,45194,45198,45202,45206,45210,45214,45230,45234,45246,45250,45262,45266,45278,45282,45290,45294,45302,45306,45310,45314,45320,45324,45332,45336,45352,45356,45364,45368,45384,45396,45400,45412,45416,45420,45428,45432,45436,45444,45448,45456,45460,45468,45472,45476,45518,45560,45564,45568,45584,45588,45604,45608,45612,45620,45624,45628,45640,45678,45682,45686,45694,45698,45712,45722,45728,45734,45740,45746,45750,45754,45760,45764,45768,45776,45780,45798,45802,45806,45810,45826,45830,45834,45838,45842,45846,45866,45886,45890,45894,45898,45906,45914,45918,45934,45954,45974,45978,45982,45990,45998,46002,46006,46010,46022,46026,46036,46044,46061],{"__ignoreMap":63},[68,44424,44425,44427],{"class":70,"line":71},[68,44426,31876],{"class":316},[68,44428,33306],{"class":78},[68,44430,44431,44433],{"class":70,"line":82},[68,44432,31876],{"class":316},[68,44434,33313],{"class":78},[68,44436,44437,44439,44441,44443],{"class":70,"line":98},[68,44438,31876],{"class":316},[68,44440,33324],{"class":78},[68,44442,32867],{"class":316},[68,44444,33329],{"class":78},[68,44446,44447,44449],{"class":70,"line":104},[68,44448,31876],{"class":316},[68,44450,31879],{"class":78},[68,44452,44453,44455,44457,44459],{"class":70,"line":112},[68,44454,32221],{"class":316},[68,44456,32899],{"class":78},[68,44458,31876],{"class":316},[68,44460,33346],{"class":78},[68,44462,44463,44465,44467,44469],{"class":70,"line":124},[68,44464,32221],{"class":316},[68,44466,32852],{"class":78},[68,44468,31876],{"class":316},[68,44470,32857],{"class":78},[68,44472,44473,44475,44477,44479],{"class":70,"line":1496},[68,44474,32221],{"class":316},[68,44476,32882],{"class":78},[68,44478,31876],{"class":316},[68,44480,32887],{"class":78},[68,44482,44483,44485,44487,44489],{"class":70,"line":1502},[68,44484,31876],{"class":316},[68,44486,32899],{"class":78},[68,44488,32867],{"class":316},[68,44490,32904],{"class":78},[68,44492,44493,44495,44497,44499],{"class":70,"line":1510},[68,44494,31876],{"class":316},[68,44496,32916],{"class":78},[68,44498,32867],{"class":316},[68,44500,32921],{"class":78},[68,44502,44503],{"class":70,"line":1521},[68,44504,33391],{"class":302},[68,44506,44507,44509,44511,44513],{"class":70,"line":3103},[68,44508,32221],{"class":316},[68,44510,33398],{"class":78},[68,44512,31876],{"class":316},[68,44514,44515],{"class":78}," GoogLeNet, Inception\n",[68,44517,44518,44520,44522,44524],{"class":70,"line":3108},[68,44519,32221],{"class":316},[68,44521,32224],{"class":78},[68,44523,31876],{"class":316},[68,44525,32229],{"class":78},[68,44527,44528],{"class":70,"line":3114},[68,44529,3890],{"emptyLinePlaceholder":1567},[68,44531,44532],{"class":70,"line":3119},[68,44533,3890],{"emptyLinePlaceholder":1567},[68,44535,44536],{"class":70,"line":3133},[68,44537,33426],{"class":302},[68,44539,44540,44542,44544],{"class":70,"line":3138},[68,44541,33431],{"class":316},[68,44543,33434],{"class":74},[68,44545,33437],{"class":78},[68,44547,44548,44550,44552,44554,44556],{"class":70,"line":3144},[68,44549,33442],{"class":78},[68,44551,1685],{"class":316},[68,44553,32939],{"class":78},[68,44555,32947],{"class":1742},[68,44557,32950],{"class":78},[68,44559,44560,44562,44564,44566],{"class":70,"line":3165},[68,44561,33455],{"class":6705},[68,44563,1685],{"class":316},[68,44565,32960],{"class":85},[68,44567,32950],{"class":78},[68,44569,44570,44572,44574,44576,44578,44580,44582],{"class":70,"line":3170},[68,44571,33466],{"class":6705},[68,44573,1685],{"class":316},[68,44575,32977],{"class":78},[68,44577,32980],{"class":6705},[68,44579,1685],{"class":316},[68,44581,36933],{"class":85},[68,44583,32988],{"class":78},[68,44585,44586,44588,44590,44592],{"class":70,"line":3184},[68,44587,33483],{"class":6705},[68,44589,1685],{"class":316},[68,44591,32960],{"class":85},[68,44593,1646],{"class":78},[68,44595,44596,44598,44600,44602,44604,44606,44608,44610,44612,44614,44616,44618,44620,44622,44624],{"class":70,"line":3189},[68,44597,33494],{"class":78},[68,44599,1685],{"class":316},[68,44601,33499],{"class":78},[68,44603,33502],{"class":85},[68,44605,1640],{"class":78},[68,44607,33507],{"class":85},[68,44609,2083],{"class":316},[68,44611,8847],{"class":85},[68,44613,33514],{"class":78},[68,44615,33502],{"class":85},[68,44617,1640],{"class":78},[68,44619,33521],{"class":85},[68,44621,2083],{"class":316},[68,44623,8847],{"class":85},[68,44625,33528],{"class":78},[68,44627,44628,44630,44632,44634,44636,44638],{"class":70,"line":3218},[68,44629,33533],{"class":78},[68,44631,1685],{"class":316},[68,44633,33538],{"class":78},[68,44635,33021],{"class":6705},[68,44637,1685],{"class":316},[68,44639,33026],{"class":78},[68,44641,44642,44644,44646,44648],{"class":70,"line":3223},[68,44643,33549],{"class":6705},[68,44645,1685],{"class":316},[68,44647,1826],{"class":85},[68,44649,32950],{"class":78},[68,44651,44652,44654,44656,44658],{"class":70,"line":3240},[68,44653,33561],{"class":6705},[68,44655,1685],{"class":316},[68,44657,32960],{"class":85},[68,44659,32950],{"class":78},[68,44661,44662],{"class":70,"line":3245},[68,44663,33572],{"class":302},[68,44665,44666,44668,44670,44672],{"class":70,"line":3250},[68,44667,33577],{"class":6705},[68,44669,1685],{"class":316},[68,44671,2024],{"class":85},[68,44673,1646],{"class":78},[68,44675,44676,44678,44680,44682,44684,44686],{"class":70,"line":3255},[68,44677,33588],{"class":78},[68,44679,1685],{"class":316},[68,44681,33018],{"class":78},[68,44683,33021],{"class":6705},[68,44685,1685],{"class":316},[68,44687,33599],{"class":78},[68,44689,44690,44692,44694,44696],{"class":70,"line":3269},[68,44691,33604],{"class":6705},[68,44693,1685],{"class":316},[68,44695,1826],{"class":85},[68,44697,32950],{"class":78},[68,44699,44700,44702,44704,44706],{"class":70,"line":3274},[68,44701,33615],{"class":6705},[68,44703,1685],{"class":316},[68,44705,32960],{"class":85},[68,44707,32950],{"class":78},[68,44709,44710,44712,44714,44716],{"class":70,"line":4067},[68,44711,33626],{"class":6705},[68,44713,1685],{"class":316},[68,44715,2024],{"class":85},[68,44717,1646],{"class":78},[68,44719,44720,44722],{"class":70,"line":4081},[68,44721,5580],{"class":316},[68,44723,33639],{"class":78},[68,44725,44726],{"class":70,"line":4089},[68,44727,3890],{"emptyLinePlaceholder":1567},[68,44729,44730],{"class":70,"line":4094},[68,44731,33648],{"class":302},[68,44733,44734],{"class":70,"line":4100},[68,44735,33653],{"class":302},[68,44737,44738],{"class":70,"line":4106},[68,44739,3890],{"emptyLinePlaceholder":1567},[68,44741,44742],{"class":70,"line":4111},[68,44743,33662],{"class":302},[68,44745,44746,44748,44750],{"class":70,"line":9437},[68,44747,33431],{"class":316},[68,44749,33669],{"class":74},[68,44751,33672],{"class":78},[68,44753,44754,44756,44758,44760,44762,44764,44766,44768,44770],{"class":70,"line":9461},[68,44755,32721],{"class":78},[68,44757,1685],{"class":316},[68,44759,31935],{"class":78},[68,44761,32728],{"class":1742},[68,44763,3195],{"class":316},[68,44765,32733],{"class":78},[68,44767,3192],{"class":316},[68,44769,33691],{"class":1742},[68,44771,1646],{"class":78},[68,44773,44774],{"class":70,"line":9466},[68,44775,3890],{"emptyLinePlaceholder":1567},[68,44777,44778],{"class":70,"line":9472},[68,44779,3890],{"emptyLinePlaceholder":1567},[68,44781,44782],{"class":70,"line":9499},[68,44783,33706],{"class":302},[68,44785,44786],{"class":70,"line":9504},[68,44787,33711],{"class":302},[68,44789,44790],{"class":70,"line":9510},[68,44791,33716],{"class":302},[68,44793,44794,44796,44798,44800,44802,44804,44806],{"class":70,"line":9522},[68,44795,33721],{"class":78},[68,44797,1685],{"class":316},[68,44799,33726],{"class":78},[68,44801,33729],{"class":6705},[68,44803,1685],{"class":316},[68,44805,33734],{"class":85},[68,44807,1646],{"class":78},[68,44809,44810],{"class":70,"line":9534},[68,44811,3890],{"emptyLinePlaceholder":1567},[68,44813,44814],{"class":70,"line":9546},[68,44815,33745],{"class":302},[68,44817,44818,44820,44822],{"class":70,"line":11204},[68,44819,33750],{"class":78},[68,44821,1685],{"class":316},[68,44823,33755],{"class":78},[68,44825,44826],{"class":70,"line":11229},[68,44827,3890],{"emptyLinePlaceholder":1567},[68,44829,44830],{"class":70,"line":11252},[68,44831,33764],{"class":302},[68,44833,44834,44836,44838],{"class":70,"line":11276},[68,44835,32773],{"class":78},[68,44837,1685],{"class":316},[68,44839,33773],{"class":78},[68,44841,44842],{"class":70,"line":11281},[68,44843,33778],{"class":302},[68,44845,44846],{"class":70,"line":11286},[68,44847,33783],{"class":302},[68,44849,44850],{"class":70,"line":11291},[68,44851,33788],{"class":302},[68,44853,44854,44856,44858],{"class":70,"line":11300},[68,44855,33793],{"class":78},[68,44857,1685],{"class":316},[68,44859,33798],{"class":78},[68,44861,44862],{"class":70,"line":11305},[68,44863,3890],{"emptyLinePlaceholder":1567},[68,44865,44866],{"class":70,"line":11311},[68,44867,3890],{"emptyLinePlaceholder":1567},[68,44869,44870],{"class":70,"line":11332},[68,44871,33811],{"class":302},[68,44873,44874],{"class":70,"line":11338},[68,44875,33816],{"class":302},[68,44877,44878,44880,44882],{"class":70,"line":11352},[68,44879,33821],{"class":78},[68,44881,1685],{"class":316},[68,44883,33826],{"class":85},[68,44885,44886],{"class":70,"line":11358},[68,44887,33831],{"class":302},[68,44889,44890,44892,44894],{"class":70,"line":11385},[68,44891,33836],{"class":78},[68,44893,1685],{"class":316},[68,44895,33841],{"class":78},[68,44897,44898],{"class":70,"line":11394},[68,44899,33846],{"class":302},[68,44901,44902,44904,44906],{"class":70,"line":11400},[68,44903,33851],{"class":78},[68,44905,1685],{"class":316},[68,44907,33841],{"class":78},[68,44909,44910],{"class":70,"line":11408},[68,44911,33860],{"class":302},[68,44913,44914,44916,44918],{"class":70,"line":11413},[68,44915,33865],{"class":78},[68,44917,1685],{"class":316},[68,44919,33841],{"class":78},[68,44921,44922],{"class":70,"line":18091},[68,44923,33874],{"class":302},[68,44925,44926,44928,44930],{"class":70,"line":18097},[68,44927,33879],{"class":78},[68,44929,1685],{"class":316},[68,44931,33841],{"class":78},[68,44933,44934],{"class":70,"line":18120},[68,44935,3890],{"emptyLinePlaceholder":1567},[68,44937,44938],{"class":70,"line":18126},[68,44939,33892],{"class":302},[68,44941,44942,44944,44946],{"class":70,"line":18149},[68,44943,33897],{"class":78},[68,44945,1685],{"class":316},[68,44947,33902],{"class":78},[68,44949,44950],{"class":70,"line":18163},[68,44951,3890],{"emptyLinePlaceholder":1567},[68,44953,44954],{"class":70,"line":18183},[68,44955,3890],{"emptyLinePlaceholder":1567},[68,44957,44958],{"class":70,"line":18189},[68,44959,33915],{"class":302},[68,44961,44962,44964,44966,44968,44970],{"class":70,"line":18200},[68,44963,4691],{"class":316},[68,44965,33922],{"class":78},[68,44967,27529],{"class":316},[68,44969,33927],{"class":85},[68,44971,33930],{"class":78},[68,44973,44974,44976,44978,44980,44982,44984,44986,44988,44990,44992,44994],{"class":70,"line":18223},[68,44975,33935],{"class":85},[68,44977,1640],{"class":78},[68,44979,33940],{"class":1742},[68,44981,33943],{"class":85},[68,44983,2212],{"class":1742},[68,44985,33943],{"class":85},[68,44987,1880],{"class":1742},[68,44989,33952],{"class":78},[68,44991,2160],{"class":316},[68,44993,1846],{"class":85},[68,44995,31981],{"class":78},[68,44997,44998,45000,45002,45004,45006,45008],{"class":70,"line":18245},[68,44999,33935],{"class":85},[68,45001,1640],{"class":78},[68,45003,33967],{"class":1742},[68,45005,2083],{"class":316},[68,45007,313],{"class":85},[68,45009,1646],{"class":78},[68,45011,45012],{"class":70,"line":18250},[68,45013,3890],{"emptyLinePlaceholder":1567},[68,45015,45016],{"class":70,"line":18256},[68,45017,33982],{"class":302},[68,45019,45020],{"class":70,"line":18270},[68,45021,33987],{"class":302},[68,45023,45024,45026,45028],{"class":70,"line":18283},[68,45025,33992],{"class":78},[68,45027,1685],{"class":316},[68,45029,33826],{"class":85},[68,45031,45032],{"class":70,"line":18288},[68,45033,34001],{"class":302},[68,45035,45036,45038,45040],{"class":70,"line":18302},[68,45037,34006],{"class":78},[68,45039,1685],{"class":316},[68,45041,4575],{"class":85},[68,45043,45044],{"class":70,"line":18307},[68,45045,34015],{"class":302},[68,45047,45048,45050,45052],{"class":70,"line":18313},[68,45049,34020],{"class":78},[68,45051,1685],{"class":316},[68,45053,33826],{"class":85},[68,45055,45056],{"class":70,"line":18318},[68,45057,34029],{"class":302},[68,45059,45060,45062,45064],{"class":70,"line":18332},[68,45061,34034],{"class":78},[68,45063,1685],{"class":316},[68,45065,4575],{"class":85},[68,45067,45068],{"class":70,"line":18337},[68,45069,34043],{"class":302},[68,45071,45072,45074,45076],{"class":70,"line":18342},[68,45073,34048],{"class":78},[68,45075,1685],{"class":316},[68,45077,4575],{"class":85},[68,45079,45080],{"class":70,"line":18356},[68,45081,34057],{"class":302},[68,45083,45084,45086,45088],{"class":70,"line":18368},[68,45085,34062],{"class":78},[68,45087,1685],{"class":316},[68,45089,4575],{"class":85},[68,45091,45092],{"class":70,"line":18373},[68,45093,34071],{"class":302},[68,45095,45096,45098,45100,45102,45104],{"class":70,"line":18386},[68,45097,4893],{"class":316},[68,45099,33085],{"class":78},[68,45101,27529],{"class":316},[68,45103,33090],{"class":85},[68,45105,34084],{"class":78},[68,45107,45108],{"class":70,"line":18391},[68,45109,34089],{"class":302},[68,45111,45112,45114,45116],{"class":70,"line":18396},[68,45113,34094],{"class":78},[68,45115,1685],{"class":316},[68,45117,34099],{"class":78},[68,45119,45120],{"class":70,"line":18401},[68,45121,34104],{"class":302},[68,45123,45124,45126,45128],{"class":70,"line":18414},[68,45125,34109],{"class":78},[68,45127,1685],{"class":316},[68,45129,34114],{"class":78},[68,45131,45132],{"class":70,"line":18419},[68,45133,34120],{"class":302},[68,45135,45136],{"class":70,"line":34117},[68,45137,34126],{"class":78},[68,45139,45140],{"class":70,"line":34123},[68,45141,34132],{"class":302},[68,45143,45144],{"class":70,"line":34129},[68,45145,34138],{"class":302},[68,45147,45148,45150,45152],{"class":70,"line":34135},[68,45149,34144],{"class":78},[68,45151,1685],{"class":316},[68,45153,34149],{"class":78},[68,45155,45156],{"class":70,"line":34141},[68,45157,34155],{"class":302},[68,45159,45160,45162,45164,45166,45168,45170,45172],{"class":70,"line":34152},[68,45161,34161],{"class":78},[68,45163,1685],{"class":316},[68,45165,34166],{"class":78},[68,45167,34169],{"class":6705},[68,45169,1685],{"class":316},[68,45171,1846],{"class":85},[68,45173,1646],{"class":78},[68,45175,45176],{"class":70,"line":34158},[68,45177,34181],{"class":302},[68,45179,45180,45182,45184],{"class":70,"line":34178},[68,45181,34187],{"class":78},[68,45183,1685],{"class":316},[68,45185,34192],{"class":78},[68,45187,45188],{"class":70,"line":34184},[68,45189,34198],{"class":302},[68,45191,45192],{"class":70,"line":34195},[68,45193,34204],{"class":78},[68,45195,45196],{"class":70,"line":34201},[68,45197,34210],{"class":302},[68,45199,45200],{"class":70,"line":34207},[68,45201,34216],{"class":78},[68,45203,45204],{"class":70,"line":34213},[68,45205,34222],{"class":302},[68,45207,45208],{"class":70,"line":34219},[68,45209,34228],{"class":78},[68,45211,45212],{"class":70,"line":34225},[68,45213,34234],{"class":302},[68,45215,45216,45218,45220,45222,45224,45226,45228],{"class":70,"line":34231},[68,45217,34240],{"class":78},[68,45219,10965],{"class":316},[68,45221,34245],{"class":78},[68,45223,2083],{"class":316},[68,45225,34250],{"class":78},[68,45227,1248],{"class":85},[68,45229,1646],{"class":78},[68,45231,45232],{"class":70,"line":34237},[68,45233,34260],{"class":302},[68,45235,45236,45238,45240,45242,45244],{"class":70,"line":34257},[68,45237,34266],{"class":78},[68,45239,10965],{"class":316},[68,45241,34271],{"class":78},[68,45243,4439],{"class":316},[68,45245,34276],{"class":78},[68,45247,45248],{"class":70,"line":34263},[68,45249,34282],{"class":302},[68,45251,45252,45254,45256,45258,45260],{"class":70,"line":34279},[68,45253,34288],{"class":78},[68,45255,10965],{"class":316},[68,45257,34250],{"class":78},[68,45259,1248],{"class":85},[68,45261,1646],{"class":78},[68,45263,45264],{"class":70,"line":34285},[68,45265,34302],{"class":302},[68,45267,45268,45270,45272,45274,45276],{"class":70,"line":34299},[68,45269,4893],{"class":316},[68,45271,34310],{"class":78},[68,45273,27529],{"class":316},[68,45275,33090],{"class":85},[68,45277,34317],{"class":78},[68,45279,45280],{"class":70,"line":34305},[68,45281,34323],{"class":302},[68,45283,45284,45286,45288],{"class":70,"line":34320},[68,45285,34094],{"class":78},[68,45287,1685],{"class":316},[68,45289,34099],{"class":78},[68,45291,45292],{"class":70,"line":34326},[68,45293,34338],{"class":302},[68,45295,45296,45298,45300],{"class":70,"line":34335},[68,45297,34109],{"class":78},[68,45299,1685],{"class":316},[68,45301,34114],{"class":78},[68,45303,45304],{"class":70,"line":34341},[68,45305,34353],{"class":302},[68,45307,45308],{"class":70,"line":34350},[68,45309,34359],{"class":78},[68,45311,45312],{"class":70,"line":34356},[68,45313,37840],{"class":302},[68,45315,45316,45318],{"class":70,"line":34362},[68,45317,34365],{"class":316},[68,45319,34368],{"class":78},[68,45321,45322],{"class":70,"line":34371},[68,45323,34374],{"class":302},[68,45325,45326,45328,45330],{"class":70,"line":34377},[68,45327,37855],{"class":78},[68,45329,1685],{"class":316},[68,45331,34149],{"class":78},[68,45333,45334],{"class":70,"line":34388},[68,45335,34391],{"class":302},[68,45337,45338,45340,45342,45344,45346,45348,45350],{"class":70,"line":34394},[68,45339,37868],{"class":78},[68,45341,1685],{"class":316},[68,45343,34166],{"class":78},[68,45345,34169],{"class":6705},[68,45347,1685],{"class":316},[68,45349,1846],{"class":85},[68,45351,1646],{"class":78},[68,45353,45354],{"class":70,"line":34413},[68,45355,34416],{"class":302},[68,45357,45358,45360,45362],{"class":70,"line":34419},[68,45359,37889],{"class":78},[68,45361,1685],{"class":316},[68,45363,34192],{"class":78},[68,45365,45366],{"class":70,"line":34430},[68,45367,34433],{"class":302},[68,45369,45370,45372,45374,45376,45378,45380,45382],{"class":70,"line":34436},[68,45371,37902],{"class":78},[68,45373,10965],{"class":316},[68,45375,37907],{"class":78},[68,45377,2083],{"class":316},[68,45379,34250],{"class":78},[68,45381,1248],{"class":85},[68,45383,1646],{"class":78},[68,45385,45386,45388,45390,45392,45394],{"class":70,"line":34456},[68,45387,37920],{"class":78},[68,45389,10965],{"class":316},[68,45391,34271],{"class":78},[68,45393,4439],{"class":316},[68,45395,34276],{"class":78},[68,45397,45398],{"class":70,"line":34472},[68,45399,37933],{"class":302},[68,45401,45402,45404,45406,45408,45410],{"class":70,"line":34478},[68,45403,37938],{"class":78},[68,45405,10965],{"class":316},[68,45407,34250],{"class":78},[68,45409,1248],{"class":85},[68,45411,1646],{"class":78},[68,45413,45414],{"class":70,"line":34492},[68,45415,34495],{"class":302},[68,45417,45418],{"class":70,"line":34498},[68,45419,34501],{"class":302},[68,45421,45422,45424,45426],{"class":70,"line":34504},[68,45423,34507],{"class":78},[68,45425,2212],{"class":316},[68,45427,34512],{"class":78},[68,45429,45430],{"class":70,"line":34515},[68,45431,34518],{"class":302},[68,45433,45434],{"class":70,"line":34521},[68,45435,34524],{"class":302},[68,45437,45438,45440,45442],{"class":70,"line":34527},[68,45439,34530],{"class":78},[68,45441,2212],{"class":316},[68,45443,34512],{"class":78},[68,45445,45446],{"class":70,"line":34537},[68,45447,34540],{"class":302},[68,45449,45450,45452,45454],{"class":70,"line":34543},[68,45451,34546],{"class":78},[68,45453,2212],{"class":316},[68,45455,34551],{"class":78},[68,45457,45458],{"class":70,"line":34554},[68,45459,34557],{"class":302},[68,45461,45462,45464,45466],{"class":70,"line":34560},[68,45463,34563],{"class":78},[68,45465,2212],{"class":316},[68,45467,34551],{"class":78},[68,45469,45470],{"class":70,"line":34570},[68,45471,3890],{"emptyLinePlaceholder":1567},[68,45473,45474],{"class":70,"line":34575},[68,45475,34578],{"class":302},[68,45477,45478,45480,45482,45484,45486,45488,45490,45492,45494,45496,45498,45500,45502,45504,45506,45508,45510,45512,45514,45516],{"class":70,"line":34581},[68,45479,33935],{"class":85},[68,45481,1640],{"class":78},[68,45483,5082],{"class":1742},[68,45485,33943],{"class":85},[68,45487,34592],{"class":1742},[68,45489,2523],{"class":85},[68,45491,34597],{"class":316},[68,45493,2573],{"class":85},[68,45495,34602],{"class":1742},[68,45497,2523],{"class":85},[68,45499,34597],{"class":316},[68,45501,2573],{"class":85},[68,45503,5082],{"class":1742},[68,45505,34613],{"class":78},[68,45507,2160],{"class":316},[68,45509,1846],{"class":85},[68,45511,34620],{"class":78},[68,45513,2160],{"class":316},[68,45515,1846],{"class":85},[68,45517,34627],{"class":78},[68,45519,45520,45522,45524,45526,45528,45530,45532,45534,45536,45538,45540,45542,45544,45546,45548,45550,45552,45554,45556,45558],{"class":70,"line":34630},[68,45521,33935],{"class":85},[68,45523,1640],{"class":78},[68,45525,5082],{"class":1742},[68,45527,33943],{"class":85},[68,45529,34641],{"class":1742},[68,45531,2523],{"class":85},[68,45533,34597],{"class":316},[68,45535,2573],{"class":85},[68,45537,34650],{"class":1742},[68,45539,2523],{"class":85},[68,45541,34597],{"class":316},[68,45543,2573],{"class":85},[68,45545,5082],{"class":1742},[68,45547,34661],{"class":78},[68,45549,2160],{"class":316},[68,45551,1846],{"class":85},[68,45553,34668],{"class":78},[68,45555,2160],{"class":316},[68,45557,1846],{"class":85},[68,45559,34627],{"class":78},[68,45561,45562],{"class":70,"line":34677},[68,45563,3890],{"emptyLinePlaceholder":1567},[68,45565,45566],{"class":70,"line":34682},[68,45567,34685],{"class":302},[68,45569,45570,45572,45574,45576,45578,45580,45582],{"class":70,"line":34688},[68,45571,3987],{"class":316},[68,45573,34693],{"class":78},[68,45575,2160],{"class":316},[68,45577,1846],{"class":85},[68,45579,2567],{"class":78},[68,45581,2587],{"class":316},[68,45583,34704],{"class":78},[68,45585,45586],{"class":70,"line":34707},[68,45587,34710],{"class":302},[68,45589,45590,45592,45594,45596,45598,45600,45602],{"class":70,"line":34713},[68,45591,34716],{"class":78},[68,45593,1679],{"class":85},[68,45595,1685],{"class":316},[68,45597,34723],{"class":78},[68,45599,2160],{"class":316},[68,45601,1846],{"class":85},[68,45603,34730],{"class":78},[68,45605,45606],{"class":70,"line":34733},[68,45607,34736],{"class":302},[68,45609,45610],{"class":70,"line":34739},[68,45611,34742],{"class":302},[68,45613,45614,45616,45618],{"class":70,"line":34745},[68,45615,34748],{"class":78},[68,45617,1685],{"class":316},[68,45619,33798],{"class":78},[68,45621,45622],{"class":70,"line":34755},[68,45623,3890],{"emptyLinePlaceholder":1567},[68,45625,45626],{"class":70,"line":34760},[68,45627,34763],{"class":302},[68,45629,45630,45632,45634,45636,45638],{"class":70,"line":34766},[68,45631,34769],{"class":78},[68,45633,1685],{"class":316},[68,45635,34774],{"class":78},[68,45637,2160],{"class":316},[68,45639,34779],{"class":78},[68,45641,45642,45644,45646,45648,45650,45652,45654,45656,45658,45660,45662,45664,45666,45668,45670,45672,45674,45676],{"class":70,"line":34782},[68,45643,33935],{"class":85},[68,45645,1640],{"class":78},[68,45647,34789],{"class":1742},[68,45649,2523],{"class":85},[68,45651,34794],{"class":316},[68,45653,2573],{"class":85},[68,45655,2172],{"class":1742},[68,45657,2523],{"class":85},[68,45659,34794],{"class":316},[68,45661,2573],{"class":85},[68,45663,34807],{"class":1742},[68,45665,34810],{"class":78},[68,45667,34813],{"class":316},[68,45669,2534],{"class":85},[68,45671,34818],{"class":78},[68,45673,1957],{"class":316},[68,45675,2534],{"class":85},[68,45677,31981],{"class":78},[68,45679,45680],{"class":70,"line":34827},[68,45681,38217],{"class":302},[68,45683,45684],{"class":70,"line":34833},[68,45685,38222],{"class":302},[68,45687,45688,45690,45692],{"class":70,"line":34839},[68,45689,38227],{"class":78},[68,45691,34851],{"class":1742},[68,45693,1646],{"class":78},[68,45695,45696],{"class":70,"line":34845},[68,45697,34871],{"class":302},[68,45699,45700,45702,45704,45706,45708,45710],{"class":70,"line":34856},[68,45701,34877],{"class":78},[68,45703,1685],{"class":316},[68,45705,34882],{"class":78},[68,45707,34885],{"class":6705},[68,45709,1685],{"class":316},[68,45711,3038],{"class":78},[68,45713,45714,45716,45718,45720],{"class":70,"line":34862},[68,45715,34895],{"class":1742},[68,45717,2486],{"class":78},[68,45719,34900],{"class":85},[68,45721,34903],{"class":78},[68,45723,45724,45726],{"class":70,"line":34868},[68,45725,34909],{"class":1742},[68,45727,34912],{"class":78},[68,45729,45730,45732],{"class":70,"line":34874},[68,45731,34918],{"class":1742},[68,45733,34921],{"class":78},[68,45735,45736,45738],{"class":70,"line":34892},[68,45737,34927],{"class":1742},[68,45739,34930],{"class":78},[68,45741,45742,45744],{"class":70,"line":34906},[68,45743,34936],{"class":1742},[68,45745,34939],{"class":78},[68,45747,45748],{"class":70,"line":34915},[68,45749,34945],{"class":78},[68,45751,45752],{"class":70,"line":34924},[68,45753,34951],{"class":302},[68,45755,45756,45758],{"class":70,"line":34933},[68,45757,5580],{"class":316},[68,45759,34959],{"class":78},[68,45761,45762],{"class":70,"line":34942},[68,45763,3890],{"emptyLinePlaceholder":1567},[68,45765,45766],{"class":70,"line":34948},[68,45767,34970],{"class":302},[68,45769,45770,45772,45774],{"class":70,"line":34954},[68,45771,33431],{"class":316},[68,45773,34978],{"class":74},[68,45775,34981],{"class":78},[68,45777,45778],{"class":70,"line":34962},[68,45779,34987],{"class":302},[68,45781,45782,45784,45786,45788,45790,45792,45794,45796],{"class":70,"line":34967},[68,45783,34993],{"class":78},[68,45785,33177],{"class":6705},[68,45787,1685],{"class":316},[68,45789,1640],{"class":78},[68,45791,2126],{"class":85},[68,45793,2007],{"class":78},[68,45795,1922],{"class":85},[68,45797,31981],{"class":78},[68,45799,45800],{"class":70,"line":34973},[68,45801,35013],{"class":302},[68,45803,45804],{"class":70,"line":34984},[68,45805,35019],{"class":302},[68,45807,45808],{"class":70,"line":34990},[68,45809,35025],{"class":302},[68,45811,45812,45814,45816,45818,45820,45822,45824],{"class":70,"line":35010},[68,45813,33211],{"class":78},[68,45815,1846],{"class":85},[68,45817,2007],{"class":78},[68,45819,1715],{"class":85},[68,45821,2007],{"class":78},[68,45823,1846],{"class":85},[68,45825,1646],{"class":78},[68,45827,45828],{"class":70,"line":35016},[68,45829,35048],{"class":302},[68,45831,45832],{"class":70,"line":35022},[68,45833,35054],{"class":302},[68,45835,45836],{"class":70,"line":35028},[68,45837,35060],{"class":302},[68,45839,45840],{"class":70,"line":35045},[68,45841,35066],{"class":302},[68,45843,45844],{"class":70,"line":35051},[68,45845,35072],{"class":302},[68,45847,45848,45850,45852,45854,45856,45858,45860,45862,45864],{"class":70,"line":35057},[68,45849,35078],{"class":78},[68,45851,35081],{"class":1742},[68,45853,35084],{"class":78},[68,45855,35087],{"class":1742},[68,45857,2007],{"class":78},[68,45859,35092],{"class":6705},[68,45861,1685],{"class":316},[68,45863,35097],{"class":1742},[68,45865,1646],{"class":78},[68,45867,45868,45870,45872,45874,45876,45878,45880,45882,45884],{"class":70,"line":35063},[68,45869,35078],{"class":78},[68,45871,35081],{"class":1742},[68,45873,35109],{"class":78},[68,45875,35112],{"class":1742},[68,45877,2007],{"class":78},[68,45879,35092],{"class":6705},[68,45881,1685],{"class":316},[68,45883,35121],{"class":1742},[68,45885,1646],{"class":78},[68,45887,45888],{"class":70,"line":35069},[68,45889,35129],{"class":302},[68,45891,45892],{"class":70,"line":35075},[68,45893,35135],{"class":78},[68,45895,45896],{"class":70,"line":35102},[68,45897,35141],{"class":302},[68,45899,45900,45902,45904],{"class":70,"line":35126},[68,45901,35147],{"class":78},[68,45903,35150],{"class":1742},[68,45905,1646],{"class":78},[68,45907,45908,45910,45912],{"class":70,"line":35132},[68,45909,35158],{"class":78},[68,45911,35161],{"class":1742},[68,45913,1646],{"class":78},[68,45915,45916],{"class":70,"line":35138},[68,45917,35169],{"class":302},[68,45919,45920,45922,45924,45926,45928,45930,45932],{"class":70,"line":35144},[68,45921,33211],{"class":78},[68,45923,1846],{"class":85},[68,45925,2007],{"class":78},[68,45927,1715],{"class":85},[68,45929,2007],{"class":78},[68,45931,1715],{"class":85},[68,45933,1646],{"class":78},[68,45935,45936,45938,45940,45942,45944,45946,45948,45950,45952],{"class":70,"line":35155},[68,45937,35078],{"class":78},[68,45939,35081],{"class":1742},[68,45941,35196],{"class":78},[68,45943,35087],{"class":1742},[68,45945,2007],{"class":78},[68,45947,35092],{"class":6705},[68,45949,1685],{"class":316},[68,45951,35207],{"class":1742},[68,45953,1646],{"class":78},[68,45955,45956,45958,45960,45962,45964,45966,45968,45970,45972],{"class":70,"line":35166},[68,45957,35078],{"class":78},[68,45959,35081],{"class":1742},[68,45961,35219],{"class":78},[68,45963,35112],{"class":1742},[68,45965,2007],{"class":78},[68,45967,35092],{"class":6705},[68,45969,1685],{"class":316},[68,45971,35230],{"class":1742},[68,45973,1646],{"class":78},[68,45975,45976],{"class":70,"line":35172},[68,45977,35238],{"class":302},[68,45979,45980],{"class":70,"line":35189},[68,45981,35135],{"class":78},[68,45983,45984,45986,45988],{"class":70,"line":35212},[68,45985,35147],{"class":78},[68,45987,35081],{"class":1742},[68,45989,1646],{"class":78},[68,45991,45992,45994,45996],{"class":70,"line":35235},[68,45993,35158],{"class":78},[68,45995,35260],{"class":1742},[68,45997,1646],{"class":78},[68,45999,46000],{"class":70,"line":35241},[68,46001,35268],{"class":78},[68,46003,46004],{"class":70,"line":35246},[68,46005,3890],{"emptyLinePlaceholder":1567},[68,46007,46008],{"class":70,"line":35255},[68,46009,35279],{"class":302},[68,46011,46012,46014,46016,46018,46020],{"class":70,"line":35265},[68,46013,3023],{"class":316},[68,46015,32704],{"class":85},[68,46017,4439],{"class":316},[68,46019,32709],{"class":1742},[68,46021,5229],{"class":78},[68,46023,46024],{"class":70,"line":35271},[68,46025,35298],{"class":302},[68,46027,46028,46031,46033],{"class":70,"line":35276},[68,46029,46030],{"class":78},"    GoogLeNet",[68,46032,1685],{"class":316},[68,46034,46035],{"class":78},"GoogLeNet(Inception)\n",[68,46037,46038,46040,46042],{"class":70,"line":35282},[68,46039,35315],{"class":78},[68,46041,1685],{"class":316},[68,46043,35320],{"class":78},[68,46045,46046,46048,46050,46053,46055,46057,46059],{"class":70,"line":35295},[68,46047,34877],{"class":78},[68,46049,1685],{"class":316},[68,46051,46052],{"class":78},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[68,46054,35333],{"class":6705},[68,46056,1685],{"class":316},[68,46058,2578],{"class":85},[68,46060,1646],{"class":78},[68,46062,46063],{"class":70,"line":35301},[68,46064,35345],{"class":78},[263,46066,46067],{"start":98},[27,46068,42058],{},[58,46070,46072],{"className":31862,"code":46071,"language":31864,"meta":63,"style":63},"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",[65,46073,46074,46080,46090,46100,46104,46114,46125,46129,46133,46137,46145,46161,46171,46187,46197,46211,46215,46225,46235,46245,46251,46255,46259,46267,46271,46287,46295,46299,46303,46311,46319,46323,46327,46331,46335,46341,46345,46355,46363,46371,46375,46379,46383,46391,46395,46411,46415,46419,46423,46435,46439,46451,46455,46459,46471,46475,46485,46489,46493,46505,46509,46517,46521,46525,46533,46537,46545,46549,46553,46557,46561,46565,46581,46589,46593,46597,46645,46651,46655,46665,46673,46681,46685,46689,46693,46697,46705,46709,46725,46729,46737,46745],{"__ignoreMap":63},[68,46075,46076,46078],{"class":70,"line":71},[68,46077,31876],{"class":316},[68,46079,31879],{"class":78},[68,46081,46082,46084,46086,46088],{"class":70,"line":82},[68,46083,31876],{"class":316},[68,46085,32899],{"class":78},[68,46087,32867],{"class":316},[68,46089,32904],{"class":78},[68,46091,46092,46094,46096,46098],{"class":70,"line":98},[68,46093,32221],{"class":316},[68,46095,32882],{"class":78},[68,46097,31876],{"class":316},[68,46099,32887],{"class":78},[68,46101,46102],{"class":70,"line":104},[68,46103,35406],{"class":302},[68,46105,46106,46108,46110,46112],{"class":70,"line":112},[68,46107,32221],{"class":316},[68,46109,32852],{"class":78},[68,46111,31876],{"class":316},[68,46113,32857],{"class":78},[68,46115,46116,46118,46120,46122],{"class":70,"line":124},[68,46117,32221],{"class":316},[68,46119,33398],{"class":78},[68,46121,31876],{"class":316},[68,46123,46124],{"class":78}," GoogLeNet,Inception\n",[68,46126,46127],{"class":70,"line":1496},[68,46128,3890],{"emptyLinePlaceholder":1567},[68,46130,46131],{"class":70,"line":1502},[68,46132,3890],{"emptyLinePlaceholder":1567},[68,46134,46135],{"class":70,"line":1510},[68,46136,35435],{"class":302},[68,46138,46139,46141,46143],{"class":70,"line":1521},[68,46140,33431],{"class":316},[68,46142,35442],{"class":74},[68,46144,33437],{"class":78},[68,46146,46147,46149,46151,46153,46155,46157,46159],{"class":70,"line":3103},[68,46148,35449],{"class":78},[68,46150,1685],{"class":316},[68,46152,32939],{"class":78},[68,46154,32942],{"class":6705},[68,46156,1685],{"class":316},[68,46158,32947],{"class":1742},[68,46160,32950],{"class":78},[68,46162,46163,46165,46167,46169],{"class":70,"line":3108},[68,46164,35466],{"class":6705},[68,46166,1685],{"class":316},[68,46168,35471],{"class":85},[68,46170,32950],{"class":78},[68,46172,46173,46175,46177,46179,46181,46183,46185],{"class":70,"line":3114},[68,46174,35478],{"class":6705},[68,46176,1685],{"class":316},[68,46178,32977],{"class":78},[68,46180,32980],{"class":6705},[68,46182,1685],{"class":316},[68,46184,36933],{"class":85},[68,46186,32988],{"class":78},[68,46188,46189,46191,46193,46195],{"class":70,"line":3119},[68,46190,35495],{"class":6705},[68,46192,1685],{"class":316},[68,46194,32960],{"class":85},[68,46196,1646],{"class":78},[68,46198,46199,46201,46203,46205,46207,46209],{"class":70,"line":3133},[68,46200,35506],{"class":78},[68,46202,1685],{"class":316},[68,46204,33018],{"class":78},[68,46206,33021],{"class":6705},[68,46208,1685],{"class":316},[68,46210,35517],{"class":78},[68,46212,46213],{"class":70,"line":3138},[68,46214,35522],{"class":302},[68,46216,46217,46219,46221,46223],{"class":70,"line":3144},[68,46218,35527],{"class":6705},[68,46220,1685],{"class":316},[68,46222,1846],{"class":85},[68,46224,32950],{"class":78},[68,46226,46227,46229,46231,46233],{"class":70,"line":3165},[68,46228,35538],{"class":6705},[68,46230,1685],{"class":316},[68,46232,32960],{"class":85},[68,46234,32950],{"class":78},[68,46236,46237,46239,46241,46243],{"class":70,"line":3170},[68,46238,35549],{"class":6705},[68,46240,1685],{"class":316},[68,46242,1248],{"class":85},[68,46244,1646],{"class":78},[68,46246,46247,46249],{"class":70,"line":3184},[68,46248,5580],{"class":316},[68,46250,35562],{"class":78},[68,46252,46253],{"class":70,"line":3189},[68,46254,3890],{"emptyLinePlaceholder":1567},[68,46256,46257],{"class":70,"line":3218},[68,46258,35571],{"class":302},[68,46260,46261,46263,46265],{"class":70,"line":3223},[68,46262,33431],{"class":316},[68,46264,35578],{"class":74},[68,46266,35581],{"class":78},[68,46268,46269],{"class":70,"line":3240},[68,46270,35586],{"class":302},[68,46272,46273,46275,46277,46279,46281,46283,46285],{"class":70,"line":3245},[68,46274,32721],{"class":78},[68,46276,1685],{"class":316},[68,46278,32728],{"class":1742},[68,46280,3195],{"class":316},[68,46282,32733],{"class":78},[68,46284,3192],{"class":316},[68,46286,35603],{"class":1742},[68,46288,46289,46291,46293],{"class":70,"line":3250},[68,46290,32773],{"class":78},[68,46292,1685],{"class":316},[68,46294,33773],{"class":78},[68,46296,46297],{"class":70,"line":3255},[68,46298,3890],{"emptyLinePlaceholder":1567},[68,46300,46301],{"class":70,"line":3269},[68,46302,35620],{"class":302},[68,46304,46305,46307,46309],{"class":70,"line":3274},[68,46306,35625],{"class":78},[68,46308,1685],{"class":316},[68,46310,33826],{"class":85},[68,46312,46313,46315,46317],{"class":70,"line":4067},[68,46314,35634],{"class":78},[68,46316,1685],{"class":316},[68,46318,4575],{"class":85},[68,46320,46321],{"class":70,"line":4081},[68,46322,3890],{"emptyLinePlaceholder":1567},[68,46324,46325],{"class":70,"line":4089},[68,46326,35647],{"class":302},[68,46328,46329],{"class":70,"line":4094},[68,46330,35652],{"class":302},[68,46332,46333],{"class":70,"line":4100},[68,46334,35657],{"class":302},[68,46336,46337,46339],{"class":70,"line":4106},[68,46338,35662],{"class":316},[68,46340,34368],{"class":78},[68,46342,46343],{"class":70,"line":4111},[68,46344,35669],{"class":302},[68,46346,46347,46349,46351,46353],{"class":70,"line":9437},[68,46348,4893],{"class":316},[68,46350,35676],{"class":78},[68,46352,27529],{"class":316},[68,46354,35681],{"class":78},[68,46356,46357,46359,46361],{"class":70,"line":9461},[68,46358,35686],{"class":78},[68,46360,1685],{"class":316},[68,46362,35691],{"class":78},[68,46364,46365,46367,46369],{"class":70,"line":9466},[68,46366,35696],{"class":78},[68,46368,1685],{"class":316},[68,46370,35701],{"class":78},[68,46372,46373],{"class":70,"line":9472},[68,46374,35706],{"class":302},[68,46376,46377],{"class":70,"line":9499},[68,46378,34359],{"class":78},[68,46380,46381],{"class":70,"line":9504},[68,46382,35715],{"class":302},[68,46384,46385,46387,46389],{"class":70,"line":9510},[68,46386,34144],{"class":78},[68,46388,1685],{"class":316},[68,46390,35724],{"class":78},[68,46392,46393],{"class":70,"line":9522},[68,46394,35729],{"class":302},[68,46396,46397,46399,46401,46403,46405,46407,46409],{"class":70,"line":9534},[68,46398,34161],{"class":78},[68,46400,1685],{"class":316},[68,46402,34166],{"class":78},[68,46404,34169],{"class":6705},[68,46406,1685],{"class":316},[68,46408,1846],{"class":85},[68,46410,1646],{"class":78},[68,46412,46413],{"class":70,"line":9546},[68,46414,35750],{"class":302},[68,46416,46417],{"class":70,"line":11204},[68,46418,35755],{"class":302},[68,46420,46421],{"class":70,"line":11229},[68,46422,35760],{"class":302},[68,46424,46425,46427,46429,46431,46433],{"class":70,"line":11252},[68,46426,35765],{"class":78},[68,46428,10965],{"class":316},[68,46430,34271],{"class":78},[68,46432,4439],{"class":316},[68,46434,35774],{"class":78},[68,46436,46437],{"class":70,"line":11276},[68,46438,35779],{"class":302},[68,46440,46441,46443,46445,46447,46449],{"class":70,"line":11281},[68,46442,35784],{"class":78},[68,46444,10965],{"class":316},[68,46446,35789],{"class":78},[68,46448,1248],{"class":85},[68,46450,1646],{"class":78},[68,46452,46453],{"class":70,"line":11286},[68,46454,3890],{"emptyLinePlaceholder":1567},[68,46456,46457],{"class":70,"line":11291},[68,46458,35802],{"class":302},[68,46460,46461,46463,46465,46467,46469],{"class":70,"line":11300},[68,46462,35807],{"class":78},[68,46464,1685],{"class":316},[68,46466,35812],{"class":78},[68,46468,2212],{"class":316},[68,46470,35817],{"class":78},[68,46472,46473],{"class":70,"line":11305},[68,46474,35822],{"class":302},[68,46476,46477,46479,46481,46483],{"class":70,"line":11311},[68,46478,33935],{"class":85},[68,46480,1640],{"class":78},[68,46482,35831],{"class":1742},[68,46484,35834],{"class":78},[68,46486,46487],{"class":70,"line":11332},[68,46488,3890],{"emptyLinePlaceholder":1567},[68,46490,46491],{"class":70,"line":11338},[68,46492,35843],{"class":302},[68,46494,46495,46497,46499,46501,46503],{"class":70,"line":11352},[68,46496,3023],{"class":316},[68,46498,32704],{"class":85},[68,46500,4439],{"class":316},[68,46502,32709],{"class":1742},[68,46504,5229],{"class":78},[68,46506,46507],{"class":70,"line":11358},[68,46508,35860],{"class":302},[68,46510,46511,46513,46515],{"class":70,"line":11385},[68,46512,32773],{"class":78},[68,46514,1685],{"class":316},[68,46516,46035],{"class":78},[68,46518,46519],{"class":70,"line":11394},[68,46520,35873],{"class":302},[68,46522,46523],{"class":70,"line":11400},[68,46524,35878],{"class":302},[68,46526,46527,46529,46531],{"class":70,"line":11408},[68,46528,35883],{"class":78},[68,46530,35886],{"class":1742},[68,46532,31981],{"class":78},[68,46534,46535],{"class":70,"line":11413},[68,46536,35893],{"class":302},[68,46538,46539,46541,46543],{"class":70,"line":18091},[68,46540,35506],{"class":78},[68,46542,1685],{"class":316},[68,46544,35902],{"class":78},[68,46546,46547],{"class":70,"line":18097},[68,46548,35907],{"class":302},[68,46550,46551],{"class":70,"line":18120},[68,46552,35912],{"class":78},[68,46554,46555],{"class":70,"line":18126},[68,46556,3890],{"emptyLinePlaceholder":1567},[68,46558,46559],{"class":70,"line":18149},[68,46560,35921],{"class":302},[68,46562,46563],{"class":70,"line":18163},[68,46564,35926],{"class":302},[68,46566,46567,46569,46571,46573,46575,46577,46579],{"class":70,"line":18183},[68,46568,32721],{"class":78},[68,46570,1685],{"class":316},[68,46572,32728],{"class":1742},[68,46574,3195],{"class":316},[68,46576,32733],{"class":78},[68,46578,3192],{"class":316},[68,46580,35603],{"class":1742},[68,46582,46583,46585,46587],{"class":70,"line":18189},[68,46584,32773],{"class":78},[68,46586,1685],{"class":316},[68,46588,33773],{"class":78},[68,46590,46591],{"class":70,"line":18200},[68,46592,35955],{"class":302},[68,46594,46595],{"class":70,"line":18223},[68,46596,35960],{"class":302},[68,46598,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643],{"class":70,"line":18245},[68,46600,35965],{"class":78},[68,46602,1685],{"class":316},[68,46604,2517],{"class":78},[68,46606,35972],{"class":1742},[68,46608,2007],{"class":78},[68,46610,35977],{"class":1742},[68,46612,2007],{"class":78},[68,46614,35982],{"class":1742},[68,46616,2007],{"class":78},[68,46618,35987],{"class":1742},[68,46620,2007],{"class":78},[68,46622,35992],{"class":1742},[68,46624,2007],{"class":78},[68,46626,35997],{"class":1742},[68,46628,2007],{"class":78},[68,46630,36002],{"class":1742},[68,46632,2007],{"class":78},[68,46634,36007],{"class":1742},[68,46636,2007],{"class":78},[68,46638,36012],{"class":1742},[68,46640,2007],{"class":78},[68,46642,36017],{"class":1742},[68,46644,34730],{"class":78},[68,46646,46647,46649],{"class":70,"line":18250},[68,46648,35662],{"class":316},[68,46650,34368],{"class":78},[68,46652,46653],{"class":70,"line":18256},[68,46654,36030],{"class":302},[68,46656,46657,46659,46661,46663],{"class":70,"line":18270},[68,46658,4893],{"class":316},[68,46660,36037],{"class":78},[68,46662,27529],{"class":316},[68,46664,35681],{"class":78},[68,46666,46667,46669,46671],{"class":70,"line":18283},[68,46668,34094],{"class":78},[68,46670,1685],{"class":316},[68,46672,34099],{"class":78},[68,46674,46675,46677,46679],{"class":70,"line":18288},[68,46676,34109],{"class":78},[68,46678,1685],{"class":316},[68,46680,34114],{"class":78},[68,46682,46683],{"class":70,"line":18302},[68,46684,3890],{"emptyLinePlaceholder":1567},[68,46686,46687],{"class":70,"line":18307},[68,46688,36066],{"class":302},[68,46690,46691],{"class":70,"line":18313},[68,46692,34359],{"class":78},[68,46694,46695],{"class":70,"line":18318},[68,46696,36075],{"class":302},[68,46698,46699,46701,46703],{"class":70,"line":18332},[68,46700,34144],{"class":78},[68,46702,1685],{"class":316},[68,46704,34149],{"class":78},[68,46706,46707],{"class":70,"line":18337},[68,46708,36088],{"class":302},[68,46710,46711,46713,46715,46717,46719,46721,46723],{"class":70,"line":18342},[68,46712,34161],{"class":78},[68,46714,1685],{"class":316},[68,46716,34166],{"class":78},[68,46718,34169],{"class":6705},[68,46720,1685],{"class":316},[68,46722,1846],{"class":85},[68,46724,1646],{"class":78},[68,46726,46727],{"class":70,"line":18356},[68,46728,36109],{"class":302},[68,46730,46731,46733,46735],{"class":70,"line":18368},[68,46732,36114],{"class":78},[68,46734,1685],{"class":316},[68,46736,36119],{"class":78},[68,46738,46739,46741,46743],{"class":70,"line":18373},[68,46740,36124],{"class":78},[68,46742,1685],{"class":316},[68,46744,36129],{"class":78},[68,46746,46747,46749,46751,46753,46755,46757,46759,46761],{"class":70,"line":18386},[68,46748,36134],{"class":85},[68,46750,1640],{"class":78},[68,46752,36139],{"class":1742},[68,46754,36142],{"class":78},[68,46756,36145],{"class":1742},[68,46758,2007],{"class":78},[68,46760,36150],{"class":1742},[68,46762,36153],{"class":78},[19,46764,46766],{"id":46765},"_24训练自己的数据集","2.4.训练自己的数据集",[170,46768,46769],{},"猫狗分类任务",[170,46771,46772],{},"划分数据集和验证集",[58,46774,46776],{"className":31862,"code":46775,"language":31864,"meta":63,"style":63},"# 创建脚本，用于划分数据集和验证集\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",[65,46777,46778,46783,46790,46795,46806,46813,46817,46827,46841,46850,46854,46859,46869,46889,46893,46898,46908,46919,46932,46936,46941,46950,46960,46971,46975,46980,46990,46994,46999,47004,47009,47014,47019,47023,47033,47060,47073,47085,47112,47117,47122,47136,47141,47153,47168,47183,47191,47195,47200,47206,47218,47231,47236,47241,47246,47296,47302,47306],{"__ignoreMap":63},[68,46779,46780],{"class":70,"line":71},[68,46781,46782],{"class":302},"# 创建脚本，用于划分数据集和验证集\n",[68,46784,46785,46787],{"class":70,"line":82},[68,46786,31876],{"class":316},[68,46788,46789],{"class":78}," os\n",[68,46791,46792],{"class":70,"line":98},[68,46793,46794],{"class":302},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[68,46796,46797,46799,46802,46804],{"class":70,"line":104},[68,46798,32221],{"class":316},[68,46800,46801],{"class":78}," shutil ",[68,46803,31876],{"class":316},[68,46805,33306],{"class":78},[68,46807,46808,46810],{"class":70,"line":112},[68,46809,31876],{"class":316},[68,46811,46812],{"class":78}," random\n",[68,46814,46815],{"class":70,"line":124},[68,46816,3890],{"emptyLinePlaceholder":1567},[68,46818,46819,46821,46824],{"class":70,"line":1496},[68,46820,33431],{"class":316},[68,46822,46823],{"class":74}," mkfile",[68,46825,46826],{"class":78},"(file):\n",[68,46828,46829,46831,46833,46836,46839],{"class":70,"line":1502},[68,46830,4591],{"class":316},[68,46832,40414],{"class":316},[68,46834,46835],{"class":78}," os.path.exists(",[68,46837,46838],{"class":6705},"file",[68,46840,32270],{"class":78},[68,46842,46843,46846,46848],{"class":70,"line":1510},[68,46844,46845],{"class":78},"        os.makedirs(",[68,46847,46838],{"class":6705},[68,46849,1646],{"class":78},[68,46851,46852],{"class":70,"line":1521},[68,46853,3890],{"emptyLinePlaceholder":1567},[68,46855,46856],{"class":70,"line":3103},[68,46857,46858],{"class":302},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[68,46860,46861,46864,46866],{"class":70,"line":3108},[68,46862,46863],{"class":78},"file_path",[68,46865,1685],{"class":316},[68,46867,46868],{"class":1742},"'data_cat_dog'\n",[68,46870,46871,46874,46876,46879,46881,46884,46886],{"class":70,"line":3114},[68,46872,46873],{"class":78},"flower_class",[68,46875,1685],{"class":316},[68,46877,46878],{"class":78},"[cla ",[68,46880,4515],{"class":316},[68,46882,46883],{"class":78}," cla ",[68,46885,27529],{"class":316},[68,46887,46888],{"class":78}," os.listdir(file_path)]\n",[68,46890,46891],{"class":70,"line":3119},[68,46892,3890],{"emptyLinePlaceholder":1567},[68,46894,46895],{"class":70,"line":3133},[68,46896,46897],{"class":302},"# 创建训练集train文件夹\n",[68,46899,46900,46903,46906],{"class":70,"line":3138},[68,46901,46902],{"class":78},"mkfile(",[68,46904,46905],{"class":1742},"'data\u002Ftrain'",[68,46907,1646],{"class":78},[68,46909,46910,46912,46914,46916],{"class":70,"line":3144},[68,46911,4515],{"class":316},[68,46913,46883],{"class":78},[68,46915,27529],{"class":316},[68,46917,46918],{"class":78}," flower_class:\n",[68,46920,46921,46924,46927,46929],{"class":70,"line":3165},[68,46922,46923],{"class":78},"    mkfile(",[68,46925,46926],{"class":1742},"'data\u002Ftrain\u002F'",[68,46928,2109],{"class":316},[68,46930,46931],{"class":78},"cla)\n",[68,46933,46934],{"class":70,"line":3170},[68,46935,3890],{"emptyLinePlaceholder":1567},[68,46937,46938],{"class":70,"line":3184},[68,46939,46940],{"class":302},"# 创建验证集val文件夹\n",[68,46942,46943,46945,46948],{"class":70,"line":3189},[68,46944,46902],{"class":78},[68,46946,46947],{"class":1742},"'data\u002Ftest'",[68,46949,1646],{"class":78},[68,46951,46952,46954,46956,46958],{"class":70,"line":3218},[68,46953,4515],{"class":316},[68,46955,46883],{"class":78},[68,46957,27529],{"class":316},[68,46959,46918],{"class":78},[68,46961,46962,46964,46967,46969],{"class":70,"line":3223},[68,46963,46923],{"class":78},[68,46965,46966],{"class":1742},"'data\u002Ftest\u002F'",[68,46968,2109],{"class":316},[68,46970,46931],{"class":78},[68,46972,46973],{"class":70,"line":3240},[68,46974,3890],{"emptyLinePlaceholder":1567},[68,46976,46977],{"class":70,"line":3245},[68,46978,46979],{"class":302},"# 划分比例，训练集：测试集=9：1\n",[68,46981,46982,46985,46987],{"class":70,"line":3250},[68,46983,46984],{"class":78},"split_rate",[68,46986,1685],{"class":316},[68,46988,46989],{"class":85},"0.1\n",[68,46991,46992],{"class":70,"line":3255},[68,46993,3890],{"emptyLinePlaceholder":1567},[68,46995,46996],{"class":70,"line":3269},[68,46997,46998],{"class":302},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[68,47000,47001],{"class":70,"line":3274},[68,47002,47003],{"class":302},"# cla_path：当前类别的原始图片路径\n",[68,47005,47006],{"class":70,"line":4067},[68,47007,47008],{"class":302},"# images：当前类别下所有图片的文件名列表\n",[68,47010,47011],{"class":70,"line":4081},[68,47012,47013],{"class":302},"# num：该类别图片总数\n",[68,47015,47016],{"class":70,"line":4089},[68,47017,47018],{"class":302},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[68,47020,47021],{"class":70,"line":4094},[68,47022,3890],{"emptyLinePlaceholder":1567},[68,47024,47025,47027,47029,47031],{"class":70,"line":4100},[68,47026,4515],{"class":316},[68,47028,46883],{"class":78},[68,47030,27529],{"class":316},[68,47032,46918],{"class":78},[68,47034,47035,47038,47040,47043,47045,47048,47051,47053,47055,47057],{"class":70,"line":4106},[68,47036,47037],{"class":78},"    cla_path ",[68,47039,1685],{"class":316},[68,47041,47042],{"class":78}," file_path ",[68,47044,2109],{"class":316},[68,47046,47047],{"class":1742}," '\u002F'",[68,47049,47050],{"class":316}," +",[68,47052,46883],{"class":78},[68,47054,2109],{"class":316},[68,47056,47047],{"class":1742},[68,47058,47059],{"class":302},"  # 某一类别的子目录\n",[68,47061,47062,47065,47067,47070],{"class":70,"line":4111},[68,47063,47064],{"class":78},"    images ",[68,47066,1685],{"class":316},[68,47068,47069],{"class":78}," os.listdir(cla_path)  ",[68,47071,47072],{"class":302},"# iamges 列表存储了该目录下所有图像的名称\n",[68,47074,47075,47078,47080,47082],{"class":70,"line":9437},[68,47076,47077],{"class":78},"    num ",[68,47079,1685],{"class":316},[68,47081,8820],{"class":85},[68,47083,47084],{"class":78},"(images)\n",[68,47086,47087,47090,47092,47095,47097,47099,47101,47104,47106,47109],{"class":70,"line":9461},[68,47088,47089],{"class":78},"    eval_index ",[68,47091,1685],{"class":316},[68,47093,47094],{"class":78}," random.sample(images, ",[68,47096,2121],{"class":6705},[68,47098,1685],{"class":316},[68,47100,1643],{"class":85},[68,47102,47103],{"class":78},"(num ",[68,47105,2083],{"class":316},[68,47107,47108],{"class":78}," split_rate))  ",[68,47110,47111],{"class":302},"# 从images列表中随机抽取 k 个图像名称\n",[68,47113,47114],{"class":70,"line":9466},[68,47115,47116],{"class":302},"    # 遍历该类别下的所有图片\n",[68,47118,47119],{"class":70,"line":9472},[68,47120,47121],{"class":302},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[68,47123,47124,47126,47129,47131,47133],{"class":70,"line":9499},[68,47125,4691],{"class":316},[68,47127,47128],{"class":78}," index, image ",[68,47130,27529],{"class":316},[68,47132,33090],{"class":85},[68,47134,47135],{"class":78},"(images):\n",[68,47137,47138],{"class":70,"line":9504},[68,47139,47140],{"class":302},"        # eval_index 中保存验证集val的图像名称\n",[68,47142,47143,47145,47148,47150],{"class":70,"line":9510},[68,47144,3987],{"class":316},[68,47146,47147],{"class":78}," image ",[68,47149,27529],{"class":316},[68,47151,47152],{"class":78}," eval_index:\n",[68,47154,47155,47158,47160,47163,47165],{"class":70,"line":9522},[68,47156,47157],{"class":78},"            image_path ",[68,47159,1685],{"class":316},[68,47161,47162],{"class":78}," cla_path ",[68,47164,2109],{"class":316},[68,47166,47167],{"class":78}," image\n",[68,47169,47170,47173,47175,47178,47180],{"class":70,"line":9534},[68,47171,47172],{"class":78},"            new_path ",[68,47174,1685],{"class":316},[68,47176,47177],{"class":1742}," 'data\u002Ftest\u002F'",[68,47179,47050],{"class":316},[68,47181,47182],{"class":78}," cla\n",[68,47184,47185,47188],{"class":70,"line":9546},[68,47186,47187],{"class":78},"            copy(image_path, new_path)  ",[68,47189,47190],{"class":302},"# 将选中的图像复制到新路径\n",[68,47192,47193],{"class":70,"line":11204},[68,47194,3890],{"emptyLinePlaceholder":1567},[68,47196,47197],{"class":70,"line":11229},[68,47198,47199],{"class":302},"        # 其余的图像保存在训练集train中\n",[68,47201,47202,47204],{"class":70,"line":11252},[68,47203,4024],{"class":316},[68,47205,5229],{"class":78},[68,47207,47208,47210,47212,47214,47216],{"class":70,"line":11276},[68,47209,47157],{"class":78},[68,47211,1685],{"class":316},[68,47213,47162],{"class":78},[68,47215,2109],{"class":316},[68,47217,47167],{"class":78},[68,47219,47220,47222,47224,47227,47229],{"class":70,"line":11281},[68,47221,47172],{"class":78},[68,47223,1685],{"class":316},[68,47225,47226],{"class":1742}," 'data\u002Ftrain\u002F'",[68,47228,47050],{"class":316},[68,47230,47182],{"class":78},[68,47232,47233],{"class":70,"line":11286},[68,47234,47235],{"class":78},"            copy(image_path, new_path)\n",[68,47237,47238],{"class":70,"line":11291},[68,47239,47240],{"class":302},"            # 打印进度条信息\n",[68,47242,47243],{"class":70,"line":11300},[68,47244,47245],{"class":302},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[68,47247,47248,47250,47252,47254,47257,47259,47261,47264,47266,47268,47270,47273,47276,47278,47280,47283,47286,47288,47290,47293],{"class":70,"line":11305},[68,47249,33935],{"class":85},[68,47251,1640],{"class":78},[68,47253,1880],{"class":1742},[68,47255,47256],{"class":85},"\\r",[68,47258,2517],{"class":1742},[68,47260,33943],{"class":85},[68,47262,47263],{"class":1742},"] processing [",[68,47265,33943],{"class":85},[68,47267,2212],{"class":1742},[68,47269,33943],{"class":85},[68,47271,47272],{"class":1742},"]\"",[68,47274,47275],{"class":78},".format(cla, index ",[68,47277,2109],{"class":316},[68,47279,26604],{"class":85},[68,47281,47282],{"class":78},", num), ",[68,47284,47285],{"class":6705},"end",[68,47287,1685],{"class":316},[68,47289,9141],{"class":1742},[68,47291,47292],{"class":78},")  ",[68,47294,47295],{"class":302},"# processing bar\n",[68,47297,47298,47300],{"class":70,"line":11311},[68,47299,32783],{"class":85},[68,47301,3466],{"class":78},[68,47303,47304],{"class":70,"line":11332},[68,47305,3890],{"emptyLinePlaceholder":1567},[68,47307,47308,47310,47312,47315],{"class":70,"line":11338},[68,47309,31899],{"class":85},[68,47311,1640],{"class":78},[68,47313,47314],{"class":1742},"\"processing done!\"",[68,47316,1646],{"class":78},[170,47318,47319],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[245,47321,47323],{"id":47322},"_242模型代码","2.4.2.模型代码",[170,47325,47326],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[58,47328,47330],{"className":31862,"code":47329,"language":31864,"meta":63,"style":63},"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",[65,47331,47332,47338,47348,47358,47362,47378,47386,47400,47410,47414,47444,47448,47482,47528,47532,47566,47612,47616,47620,47654,47684,47688,47696,47710,47732,47754,47772,47776,47790,47794,47798,47814,47818,47826,47840,47850,47894,47898,47926,47930,47940,47968,47972,48008,48012,48040,48044,48054,48086,48118,48146,48150,48160,48192,48224,48256,48288,48320,48348,48352,48362,48394,48426,48438,48442,48454,48458,48462,48474,48482,48502,48506,48510,48514,48518,48522,48526,48540,48548,48556,48568,48582,48590,48594,48602,48612,48622,48632,48642,48652,48658,48662,48666,48678,48698,48706],{"__ignoreMap":63},[68,47333,47334,47336],{"class":70,"line":71},[68,47335,31876],{"class":316},[68,47337,31879],{"class":78},[68,47339,47340,47342,47344,47346],{"class":70,"line":82},[68,47341,32221],{"class":316},[68,47343,32224],{"class":78},[68,47345,31876],{"class":316},[68,47347,32229],{"class":78},[68,47349,47350,47352,47354,47356],{"class":70,"line":98},[68,47351,32221],{"class":316},[68,47353,32241],{"class":78},[68,47355,31876],{"class":316},[68,47357,32246],{"class":78},[68,47359,47360],{"class":70,"line":104},[68,47361,3890],{"emptyLinePlaceholder":1567},[68,47363,47364,47366,47368,47370,47372,47374,47376],{"class":70,"line":112},[68,47365,16182],{"class":316},[68,47367,42977],{"class":74},[68,47369,1640],{"class":78},[68,47371,32262],{"class":74},[68,47373,2186],{"class":78},[68,47375,32267],{"class":74},[68,47377,32270],{"class":78},[68,47379,47380,47382,47384],{"class":70,"line":124},[68,47381,32285],{"class":316},[68,47383,32288],{"class":85},[68,47385,42996],{"class":78},[68,47387,47388,47390,47392,47394,47396,47398],{"class":70,"line":1496},[68,47389,32301],{"class":85},[68,47391,43003],{"class":78},[68,47393,32307],{"class":85},[68,47395,32310],{"class":78},[68,47397,32313],{"class":85},[68,47399,3466],{"class":78},[68,47401,47402,47404,47406,47408],{"class":70,"line":1502},[68,47403,32329],{"class":85},[68,47405,36255],{"class":78},[68,47407,1685],{"class":316},[68,47409,36260],{"class":78},[68,47411,47412],{"class":70,"line":1510},[68,47413,43026],{"class":302},[68,47415,47416,47418,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442],{"class":70,"line":1521},[68,47417,32329],{"class":85},[68,47419,43033],{"class":78},[68,47421,1685],{"class":316},[68,47423,32337],{"class":78},[68,47425,32340],{"class":6705},[68,47427,1685],{"class":316},[68,47429,43044],{"class":78},[68,47431,32349],{"class":6705},[68,47433,1685],{"class":316},[68,47435,43051],{"class":78},[68,47437,32358],{"class":6705},[68,47439,1685],{"class":316},[68,47441,1846],{"class":85},[68,47443,1646],{"class":78},[68,47445,47446],{"class":70,"line":3103},[68,47447,43064],{"class":302},[68,47449,47450,47452,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480],{"class":70,"line":3108},[68,47451,32329],{"class":85},[68,47453,43071],{"class":78},[68,47455,1685],{"class":316},[68,47457,32337],{"class":78},[68,47459,32340],{"class":6705},[68,47461,1685],{"class":316},[68,47463,43044],{"class":78},[68,47465,32349],{"class":6705},[68,47467,1685],{"class":316},[68,47469,43088],{"class":78},[68,47471,1248],{"class":85},[68,47473,43093],{"class":78},[68,47475,32358],{"class":6705},[68,47477,1685],{"class":316},[68,47479,1846],{"class":85},[68,47481,1646],{"class":78},[68,47483,47484,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504,47506,47508,47510,47512,47514,47516,47518,47520,47522,47524,47526],{"class":70,"line":3114},[68,47485,32329],{"class":85},[68,47487,43108],{"class":78},[68,47489,1685],{"class":316},[68,47491,32337],{"class":78},[68,47493,32340],{"class":6705},[68,47495,1685],{"class":316},[68,47497,43088],{"class":78},[68,47499,1248],{"class":85},[68,47501,43093],{"class":78},[68,47503,32349],{"class":6705},[68,47505,1685],{"class":316},[68,47507,43088],{"class":78},[68,47509,1846],{"class":85},[68,47511,43093],{"class":78},[68,47513,32358],{"class":6705},[68,47515,1685],{"class":316},[68,47517,1709],{"class":85},[68,47519,2007],{"class":78},[68,47521,32367],{"class":6705},[68,47523,1685],{"class":316},[68,47525,1846],{"class":85},[68,47527,1646],{"class":78},[68,47529,47530],{"class":70,"line":3119},[68,47531,43153],{"class":302},[68,47533,47534,47536,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556,47558,47560,47562,47564],{"class":70,"line":3133},[68,47535,32329],{"class":85},[68,47537,43160],{"class":78},[68,47539,1685],{"class":316},[68,47541,32337],{"class":78},[68,47543,32340],{"class":6705},[68,47545,1685],{"class":316},[68,47547,43044],{"class":78},[68,47549,32349],{"class":6705},[68,47551,1685],{"class":316},[68,47553,43177],{"class":78},[68,47555,1248],{"class":85},[68,47557,43093],{"class":78},[68,47559,32358],{"class":6705},[68,47561,1685],{"class":316},[68,47563,1846],{"class":85},[68,47565,1646],{"class":78},[68,47567,47568,47570,47572,47574,47576,47578,47580,47582,47584,47586,47588,47590,47592,47594,47596,47598,47600,47602,47604,47606,47608,47610],{"class":70,"line":3138},[68,47569,32329],{"class":85},[68,47571,43196],{"class":78},[68,47573,1685],{"class":316},[68,47575,32337],{"class":78},[68,47577,32340],{"class":6705},[68,47579,1685],{"class":316},[68,47581,43177],{"class":78},[68,47583,1248],{"class":85},[68,47585,43093],{"class":78},[68,47587,32349],{"class":6705},[68,47589,1685],{"class":316},[68,47591,43177],{"class":78},[68,47593,1846],{"class":85},[68,47595,43093],{"class":78},[68,47597,32358],{"class":6705},[68,47599,1685],{"class":316},[68,47601,1948],{"class":85},[68,47603,2007],{"class":78},[68,47605,32367],{"class":6705},[68,47607,1685],{"class":316},[68,47609,1715],{"class":85},[68,47611,1646],{"class":78},[68,47613,47614],{"class":70,"line":3144},[68,47615,43241],{"class":302},[68,47617,47618],{"class":70,"line":3165},[68,47619,43246],{"class":302},[68,47621,47622,47624,47626,47628,47630,47632,47634,47636,47638,47640,47642,47644,47646,47648,47650,47652],{"class":70,"line":3170},[68,47623,32329],{"class":85},[68,47625,43253],{"class":78},[68,47627,1685],{"class":316},[68,47629,36313],{"class":78},[68,47631,32358],{"class":6705},[68,47633,1685],{"class":316},[68,47635,1709],{"class":85},[68,47637,2007],{"class":78},[68,47639,32413],{"class":6705},[68,47641,1685],{"class":316},[68,47643,1846],{"class":85},[68,47645,2007],{"class":78},[68,47647,32367],{"class":6705},[68,47649,1685],{"class":316},[68,47651,1846],{"class":85},[68,47653,1646],{"class":78},[68,47655,47656,47658,47660,47662,47664,47666,47668,47670,47672,47674,47676,47678,47680,47682],{"class":70,"line":3184},[68,47657,32329],{"class":85},[68,47659,43288],{"class":78},[68,47661,1685],{"class":316},[68,47663,32337],{"class":78},[68,47665,32340],{"class":6705},[68,47667,1685],{"class":316},[68,47669,43044],{"class":78},[68,47671,32349],{"class":6705},[68,47673,1685],{"class":316},[68,47675,43305],{"class":78},[68,47677,32358],{"class":6705},[68,47679,1685],{"class":316},[68,47681,1846],{"class":85},[68,47683,1646],{"class":78},[68,47685,47686],{"class":70,"line":3189},[68,47687,3890],{"emptyLinePlaceholder":1567},[68,47689,47690,47692,47694],{"class":70,"line":3218},[68,47691,32285],{"class":316},[68,47693,32577],{"class":74},[68,47695,32580],{"class":78},[68,47697,47698,47700,47702,47704,47706,47708],{"class":70,"line":3223},[68,47699,43330],{"class":78},[68,47701,1685],{"class":316},[68,47703,32307],{"class":85},[68,47705,36668],{"class":78},[68,47707,32307],{"class":85},[68,47709,43341],{"class":78},[68,47711,47712,47714,47716,47718,47720,47722,47724,47726,47728,47730],{"class":70,"line":3240},[68,47713,8574],{"class":78},[68,47715,1685],{"class":316},[68,47717,32307],{"class":85},[68,47719,36668],{"class":78},[68,47721,32307],{"class":85},[68,47723,43356],{"class":78},[68,47725,32307],{"class":85},[68,47727,36668],{"class":78},[68,47729,32307],{"class":85},[68,47731,43365],{"class":78},[68,47733,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752],{"class":70,"line":3245},[68,47735,43370],{"class":78},[68,47737,1685],{"class":316},[68,47739,32307],{"class":85},[68,47741,36668],{"class":78},[68,47743,32307],{"class":85},[68,47745,43381],{"class":78},[68,47747,32307],{"class":85},[68,47749,36668],{"class":78},[68,47751,32307],{"class":85},[68,47753,43390],{"class":78},[68,47755,47756,47758,47760,47762,47764,47766,47768,47770],{"class":70,"line":3250},[68,47757,43395],{"class":78},[68,47759,1685],{"class":316},[68,47761,32307],{"class":85},[68,47763,36668],{"class":78},[68,47765,32307],{"class":85},[68,47767,43406],{"class":78},[68,47769,32307],{"class":85},[68,47771,43411],{"class":78},[68,47773,47774],{"class":70,"line":3255},[68,47775,43416],{"class":302},[68,47777,47778,47780,47782,47784,47786,47788],{"class":70,"line":3269},[68,47779,16240],{"class":316},[68,47781,43423],{"class":78},[68,47783,34169],{"class":6705},[68,47785,1685],{"class":316},[68,47787,1846],{"class":85},[68,47789,1646],{"class":78},[68,47791,47792],{"class":70,"line":3274},[68,47793,3890],{"emptyLinePlaceholder":1567},[68,47795,47796],{"class":70,"line":4067},[68,47797,43444],{"class":302},[68,47799,47800,47802,47804,47806,47808,47810,47812],{"class":70,"line":4081},[68,47801,16182],{"class":316},[68,47803,43451],{"class":74},[68,47805,1640],{"class":78},[68,47807,32262],{"class":74},[68,47809,2186],{"class":78},[68,47811,32267],{"class":74},[68,47813,32270],{"class":78},[68,47815,47816],{"class":70,"line":4089},[68,47817,43466],{"class":302},[68,47819,47820,47822,47824],{"class":70,"line":4094},[68,47821,32285],{"class":316},[68,47823,32288],{"class":85},[68,47825,43475],{"class":78},[68,47827,47828,47830,47832,47834,47836,47838],{"class":70,"line":4100},[68,47829,32301],{"class":85},[68,47831,43482],{"class":78},[68,47833,32307],{"class":85},[68,47835,32310],{"class":78},[68,47837,32313],{"class":85},[68,47839,3466],{"class":78},[68,47841,47842,47844,47846,47848],{"class":70,"line":4106},[68,47843,32329],{"class":85},[68,47845,43497],{"class":78},[68,47847,1685],{"class":316},[68,47849,39493],{"class":78},[68,47851,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870,47872,47874,47876,47878,47880,47882,47884,47886,47888,47890,47892],{"class":70,"line":4111},[68,47853,39498],{"class":78},[68,47855,32340],{"class":6705},[68,47857,1685],{"class":316},[68,47859,1709],{"class":85},[68,47861,2007],{"class":78},[68,47863,32349],{"class":6705},[68,47865,1685],{"class":316},[68,47867,1832],{"class":85},[68,47869,2007],{"class":78},[68,47871,32358],{"class":6705},[68,47873,1685],{"class":316},[68,47875,1998],{"class":85},[68,47877,2007],{"class":78},[68,47879,32413],{"class":6705},[68,47881,1685],{"class":316},[68,47883,1715],{"class":85},[68,47885,2007],{"class":78},[68,47887,32367],{"class":6705},[68,47889,1685],{"class":316},[68,47891,1709],{"class":85},[68,47893,39531],{"class":78},[68,47895,47896],{"class":70,"line":9437},[68,47897,39536],{"class":78},[68,47899,47900,47902,47904,47906,47908,47910,47912,47914,47916,47918,47920,47922,47924],{"class":70,"line":9461},[68,47901,39581],{"class":78},[68,47903,32358],{"class":6705},[68,47905,1685],{"class":316},[68,47907,1709],{"class":85},[68,47909,2007],{"class":78},[68,47911,32413],{"class":6705},[68,47913,1685],{"class":316},[68,47915,1715],{"class":85},[68,47917,2007],{"class":78},[68,47919,32367],{"class":6705},[68,47921,1685],{"class":316},[68,47923,1846],{"class":85},[68,47925,1646],{"class":78},[68,47927,47928],{"class":70,"line":9466},[68,47929,39610],{"class":78},[68,47931,47932,47934,47936,47938],{"class":70,"line":9472},[68,47933,32329],{"class":85},[68,47935,43588],{"class":78},[68,47937,1685],{"class":316},[68,47939,39493],{"class":78},[68,47941,47942,47944,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964,47966],{"class":70,"line":9499},[68,47943,39498],{"class":78},[68,47945,32340],{"class":6705},[68,47947,1685],{"class":316},[68,47949,1832],{"class":85},[68,47951,2007],{"class":78},[68,47953,32349],{"class":6705},[68,47955,1685],{"class":316},[68,47957,1832],{"class":85},[68,47959,2007],{"class":78},[68,47961,32358],{"class":6705},[68,47963,1685],{"class":316},[68,47965,1846],{"class":85},[68,47967,39531],{"class":78},[68,47969,47970],{"class":70,"line":9504},[68,47971,39536],{"class":78},[68,47973,47974,47976,47978,47980,47982,47984,47986,47988,47990,47992,47994,47996,47998,48000,48002,48004,48006],{"class":70,"line":9510},[68,47975,39498],{"class":78},[68,47977,32340],{"class":6705},[68,47979,1685],{"class":316},[68,47981,1832],{"class":85},[68,47983,2007],{"class":78},[68,47985,32349],{"class":6705},[68,47987,1685],{"class":316},[68,47989,43643],{"class":85},[68,47991,2007],{"class":78},[68,47993,32358],{"class":6705},[68,47995,1685],{"class":316},[68,47997,1709],{"class":85},[68,47999,2007],{"class":78},[68,48001,32367],{"class":6705},[68,48003,1685],{"class":316},[68,48005,1846],{"class":85},[68,48007,39531],{"class":78},[68,48009,48010],{"class":70,"line":9522},[68,48011,39536],{"class":78},[68,48013,48014,48016,48018,48020,48022,48024,48026,48028,48030,48032,48034,48036,48038],{"class":70,"line":9534},[68,48015,39581],{"class":78},[68,48017,32358],{"class":6705},[68,48019,1685],{"class":316},[68,48021,1709],{"class":85},[68,48023,2007],{"class":78},[68,48025,32413],{"class":6705},[68,48027,1685],{"class":316},[68,48029,1715],{"class":85},[68,48031,2007],{"class":78},[68,48033,32367],{"class":6705},[68,48035,1685],{"class":316},[68,48037,1846],{"class":85},[68,48039,1646],{"class":78},[68,48041,48042],{"class":70,"line":9546},[68,48043,39610],{"class":78},[68,48045,48046,48048,48050,48052],{"class":70,"line":11204},[68,48047,32329],{"class":85},[68,48049,43704],{"class":78},[68,48051,1685],{"class":316},[68,48053,39493],{"class":78},[68,48055,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076,48078,48080,48082,48084],{"class":70,"line":11229},[68,48057,43713],{"class":78},[68,48059,43643],{"class":85},[68,48061,2007],{"class":78},[68,48063,1832],{"class":85},[68,48065,43722],{"class":78},[68,48067,1838],{"class":85},[68,48069,2007],{"class":78},[68,48071,33554],{"class":85},[68,48073,43731],{"class":78},[68,48075,2229],{"class":85},[68,48077,2007],{"class":78},[68,48079,1826],{"class":85},[68,48081,43740],{"class":78},[68,48083,1826],{"class":85},[68,48085,39531],{"class":78},[68,48087,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114,48116],{"class":70,"line":11252},[68,48089,43713],{"class":78},[68,48091,36354],{"class":85},[68,48093,2007],{"class":78},[68,48095,33554],{"class":85},[68,48097,43722],{"class":78},[68,48099,33554],{"class":85},[68,48101,2007],{"class":78},[68,48103,43643],{"class":85},[68,48105,43731],{"class":78},[68,48107,1826],{"class":85},[68,48109,2007],{"class":78},[68,48111,1838],{"class":85},[68,48113,43740],{"class":78},[68,48115,1832],{"class":85},[68,48117,39531],{"class":78},[68,48119,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144],{"class":70,"line":11276},[68,48121,39581],{"class":78},[68,48123,32358],{"class":6705},[68,48125,1685],{"class":316},[68,48127,1709],{"class":85},[68,48129,2007],{"class":78},[68,48131,32413],{"class":6705},[68,48133,1685],{"class":316},[68,48135,1715],{"class":85},[68,48137,2007],{"class":78},[68,48139,32367],{"class":6705},[68,48141,1685],{"class":316},[68,48143,1846],{"class":85},[68,48145,1646],{"class":78},[68,48147,48148],{"class":70,"line":11281},[68,48149,39610],{"class":78},[68,48151,48152,48154,48156,48158],{"class":70,"line":11286},[68,48153,32329],{"class":85},[68,48155,43815],{"class":78},[68,48157,1685],{"class":316},[68,48159,39493],{"class":78},[68,48161,48162,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190],{"class":70,"line":11291},[68,48163,43713],{"class":78},[68,48165,43826],{"class":85},[68,48167,2007],{"class":78},[68,48169,43643],{"class":85},[68,48171,43722],{"class":78},[68,48173,1838],{"class":85},[68,48175,2007],{"class":78},[68,48177,43839],{"class":85},[68,48179,43731],{"class":78},[68,48181,2229],{"class":85},[68,48183,2007],{"class":78},[68,48185,2235],{"class":85},[68,48187,43740],{"class":78},[68,48189,1832],{"class":85},[68,48191,39531],{"class":78},[68,48193,48194,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222],{"class":70,"line":11300},[68,48195,43713],{"class":78},[68,48197,39941],{"class":85},[68,48199,2007],{"class":78},[68,48201,22535],{"class":85},[68,48203,43722],{"class":78},[68,48205,2246],{"class":85},[68,48207,2007],{"class":78},[68,48209,32985],{"class":85},[68,48211,43731],{"class":78},[68,48213,2427],{"class":85},[68,48215,2007],{"class":78},[68,48217,1832],{"class":85},[68,48219,43740],{"class":78},[68,48221,1832],{"class":85},[68,48223,39531],{"class":78},[68,48225,48226,48228,48230,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254],{"class":70,"line":11305},[68,48227,43713],{"class":78},[68,48229,39941],{"class":85},[68,48231,2007],{"class":78},[68,48233,33554],{"class":85},[68,48235,43722],{"class":78},[68,48237,33554],{"class":85},[68,48239,2007],{"class":78},[68,48241,36354],{"class":85},[68,48243,43731],{"class":78},[68,48245,2427],{"class":85},[68,48247,2007],{"class":78},[68,48249,1832],{"class":85},[68,48251,43740],{"class":78},[68,48253,1832],{"class":85},[68,48255,39531],{"class":78},[68,48257,48258,48260,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282,48284,48286],{"class":70,"line":11311},[68,48259,43713],{"class":78},[68,48261,39941],{"class":85},[68,48263,2007],{"class":78},[68,48265,2246],{"class":85},[68,48267,43722],{"class":78},[68,48269,33554],{"class":85},[68,48271,2007],{"class":78},[68,48273,43936],{"class":85},[68,48275,43731],{"class":78},[68,48277,1826],{"class":85},[68,48279,2007],{"class":78},[68,48281,1832],{"class":85},[68,48283,43740],{"class":78},[68,48285,1832],{"class":85},[68,48287,39531],{"class":78},[68,48289,48290,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312,48314,48316,48318],{"class":70,"line":11332},[68,48291,43713],{"class":78},[68,48293,43957],{"class":85},[68,48295,2007],{"class":78},[68,48297,36354],{"class":85},[68,48299,43722],{"class":78},[68,48301,22535],{"class":85},[68,48303,2007],{"class":78},[68,48305,43970],{"class":85},[68,48307,43731],{"class":78},[68,48309,1826],{"class":85},[68,48311,2007],{"class":78},[68,48313,33554],{"class":85},[68,48315,43740],{"class":78},[68,48317,33554],{"class":85},[68,48319,39531],{"class":78},[68,48321,48322,48324,48326,48328,48330,48332,48334,48336,48338,48340,48342,48344,48346],{"class":70,"line":11338},[68,48323,39581],{"class":78},[68,48325,32358],{"class":6705},[68,48327,1685],{"class":316},[68,48329,1709],{"class":85},[68,48331,2007],{"class":78},[68,48333,32413],{"class":6705},[68,48335,1685],{"class":316},[68,48337,1715],{"class":85},[68,48339,2007],{"class":78},[68,48341,32367],{"class":6705},[68,48343,1685],{"class":316},[68,48345,1846],{"class":85},[68,48347,1646],{"class":78},[68,48349,48350],{"class":70,"line":11352},[68,48351,39610],{"class":78},[68,48353,48354,48356,48358,48360],{"class":70,"line":11358},[68,48355,32329],{"class":85},[68,48357,44023],{"class":78},[68,48359,1685],{"class":316},[68,48361,39493],{"class":78},[68,48363,48364,48366,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392],{"class":70,"line":11385},[68,48365,43713],{"class":78},[68,48367,44034],{"class":85},[68,48369,2007],{"class":78},[68,48371,36354],{"class":85},[68,48373,43722],{"class":78},[68,48375,22535],{"class":85},[68,48377,2007],{"class":78},[68,48379,43970],{"class":85},[68,48381,43731],{"class":78},[68,48383,1826],{"class":85},[68,48385,2007],{"class":78},[68,48387,33554],{"class":85},[68,48389,43740],{"class":78},[68,48391,33554],{"class":85},[68,48393,39531],{"class":78},[68,48395,48396,48398,48400,48402,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424],{"class":70,"line":11394},[68,48397,43713],{"class":78},[68,48399,44034],{"class":85},[68,48401,2007],{"class":78},[68,48403,36424],{"class":85},[68,48405,43722],{"class":78},[68,48407,43643],{"class":85},[68,48409,2007],{"class":78},[68,48411,36424],{"class":85},[68,48413,43731],{"class":78},[68,48415,2235],{"class":85},[68,48417,2007],{"class":78},[68,48419,33554],{"class":85},[68,48421,43740],{"class":78},[68,48423,33554],{"class":85},[68,48425,39531],{"class":78},[68,48427,48428,48430,48432,48434,48436],{"class":70,"line":11400},[68,48429,44097],{"class":78},[68,48431,1846],{"class":85},[68,48433,2007],{"class":78},[68,48435,1846],{"class":85},[68,48437,44106],{"class":78},[68,48439,48440],{"class":70,"line":11408},[68,48441,40274],{"class":78},[68,48443,48444,48446,48448,48450,48452],{"class":70,"line":11413},[68,48445,40279],{"class":78},[68,48447,44117],{"class":85},[68,48449,2007],{"class":78},[68,48451,1715],{"class":85},[68,48453,1646],{"class":78},[68,48455,48456],{"class":70,"line":18091},[68,48457,39610],{"class":78},[68,48459,48460],{"class":70,"line":18097},[68,48461,44132],{"class":302},[68,48463,48464,48466,48468,48470,48472],{"class":70,"line":18120},[68,48465,4893],{"class":316},[68,48467,40352],{"class":78},[68,48469,27529],{"class":316},[68,48471,40357],{"class":85},[68,48473,40360],{"class":78},[68,48475,48476,48478,48480],{"class":70,"line":18126},[68,48477,6132],{"class":316},[68,48479,40372],{"class":85},[68,48481,40375],{"class":78},[68,48483,48484,48486,48488,48490,48492,48494,48496,48498,48500],{"class":70,"line":18149},[68,48485,40385],{"class":78},[68,48487,44159],{"class":6705},[68,48489,1685],{"class":316},[68,48491,44164],{"class":1742},[68,48493,2007],{"class":78},[68,48495,40388],{"class":6705},[68,48497,1685],{"class":316},[68,48499,40393],{"class":1742},[68,48501,1646],{"class":78},[68,48503,48504],{"class":70,"line":18163},[68,48505,44179],{"class":302},[68,48507,48508],{"class":70,"line":18183},[68,48509,44184],{"class":302},[68,48511,48512],{"class":70,"line":18189},[68,48513,44189],{"class":302},[68,48515,48516],{"class":70,"line":18200},[68,48517,44194],{"class":302},[68,48519,48520],{"class":70,"line":18223},[68,48521,44199],{"class":302},[68,48523,48524],{"class":70,"line":18245},[68,48525,44204],{"class":302},[68,48527,48528,48530,48532,48534,48536,48538],{"class":70,"line":18250},[68,48529,40405],{"class":316},[68,48531,40408],{"class":78},[68,48533,40411],{"class":316},[68,48535,40414],{"class":316},[68,48537,40417],{"class":85},[68,48539,5229],{"class":78},[68,48541,48542,48544,48546],{"class":70,"line":18256},[68,48543,40429],{"class":78},[68,48545,1248],{"class":85},[68,48547,1646],{"class":78},[68,48549,48550,48552,48554],{"class":70,"line":18270},[68,48551,44231],{"class":316},[68,48553,40372],{"class":85},[68,48555,40448],{"class":78},[68,48557,48558,48560,48562,48564,48566],{"class":70,"line":18283},[68,48559,44240],{"class":78},[68,48561,1248],{"class":85},[68,48563,2007],{"class":78},[68,48565,40470],{"class":85},[68,48567,1646],{"class":78},[68,48569,48570,48572,48574,48576,48578,48580],{"class":70,"line":18288},[68,48571,44253],{"class":316},[68,48573,40408],{"class":78},[68,48575,40411],{"class":316},[68,48577,40414],{"class":316},[68,48579,40417],{"class":85},[68,48581,5229],{"class":78},[68,48583,48584,48586,48588],{"class":70,"line":18302},[68,48585,44268],{"class":78},[68,48587,1248],{"class":85},[68,48589,1646],{"class":78},[68,48591,48592],{"class":70,"line":18307},[68,48593,36649],{"class":302},[68,48595,48596,48598,48600],{"class":70,"line":18313},[68,48597,32285],{"class":316},[68,48599,32577],{"class":74},[68,48601,32580],{"class":78},[68,48603,48604,48606,48608,48610],{"class":70,"line":18318},[68,48605,32585],{"class":78},[68,48607,1685],{"class":316},[68,48609,32307],{"class":85},[68,48611,44295],{"class":78},[68,48613,48614,48616,48618,48620],{"class":70,"line":18332},[68,48615,32585],{"class":78},[68,48617,1685],{"class":316},[68,48619,32307],{"class":85},[68,48621,44306],{"class":78},[68,48623,48624,48626,48628,48630],{"class":70,"line":18337},[68,48625,32585],{"class":78},[68,48627,1685],{"class":316},[68,48629,32307],{"class":85},[68,48631,44317],{"class":78},[68,48633,48634,48636,48638,48640],{"class":70,"line":18342},[68,48635,32585],{"class":78},[68,48637,1685],{"class":316},[68,48639,32307],{"class":85},[68,48641,44328],{"class":78},[68,48643,48644,48646,48648,48650],{"class":70,"line":18356},[68,48645,32585],{"class":78},[68,48647,1685],{"class":316},[68,48649,32307],{"class":85},[68,48651,44339],{"class":78},[68,48653,48654,48656],{"class":70,"line":18368},[68,48655,16240],{"class":316},[68,48657,32693],{"class":78},[68,48659,48660],{"class":70,"line":18373},[68,48661,3890],{"emptyLinePlaceholder":1567},[68,48663,48664],{"class":70,"line":18386},[68,48665,44354],{"class":302},[68,48667,48668,48670,48672,48674,48676],{"class":70,"line":18391},[68,48669,3023],{"class":316},[68,48671,32704],{"class":85},[68,48673,4439],{"class":316},[68,48675,32709],{"class":1742},[68,48677,5229],{"class":78},[68,48679,48680,48682,48684,48686,48688,48690,48692,48694,48696],{"class":70,"line":18396},[68,48681,32721],{"class":78},[68,48683,1685],{"class":316},[68,48685,31935],{"class":78},[68,48687,32728],{"class":1742},[68,48689,3195],{"class":316},[68,48691,32733],{"class":78},[68,48693,3192],{"class":316},[68,48695,31960],{"class":1742},[68,48697,1646],{"class":78},[68,48699,48700,48702,48704],{"class":70,"line":18401},[68,48701,32773],{"class":78},[68,48703,1685],{"class":316},[68,48705,44395],{"class":78},[68,48707,48708,48710,48712,48714,48716,48718,48720,48722],{"class":70,"line":18414},[68,48709,32783],{"class":85},[68,48711,32786],{"class":78},[68,48713,1846],{"class":85},[68,48715,2007],{"class":78},[68,48717,32985],{"class":85},[68,48719,2007],{"class":78},[68,48721,32985],{"class":85},[68,48723,32799],{"class":78},[245,48725,48727],{"id":48726},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[170,48729,48730],{},"计算图片的均值与方差，用于训练中归一化处理操作",[58,48732,48734],{"className":31862,"code":48733,"language":31864,"meta":63,"style":63},"# 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",[65,48735,48736,48741,48754,48759,48765,48770,48780,48784,48789,48799,48803,48808,48818,48835,48839,48844,48856,48868,48899,48908,48918,48928,48932,48937,48952,48956,48961,48966,48971,48981,48986,49011,49015,49020,49035,49039,49052,49056,49061,49066,49071,49076,49081,49091,49101,49124,49132,49140,49148,49152,49164,49168,49173,49177,49181,49188,49208,49232,49239,49253,49258,49263,49267,49281,49285,49297],{"__ignoreMap":63},[68,48737,48738],{"class":70,"line":71},[68,48739,48740],{"class":302},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[68,48742,48743,48745,48748,48751],{"class":70,"line":82},[68,48744,32221],{"class":316},[68,48746,48747],{"class":85}," PIL",[68,48749,48750],{"class":316}," import",[68,48752,48753],{"class":78}," Image\n",[68,48755,48756],{"class":70,"line":98},[68,48757,48758],{"class":302},"# os 用来处理文件夹和文件路径\n",[68,48760,48761,48763],{"class":70,"line":104},[68,48762,31876],{"class":316},[68,48764,46789],{"class":78},[68,48766,48767],{"class":70,"line":112},[68,48768,48769],{"class":302},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[68,48771,48772,48774,48776,48778],{"class":70,"line":124},[68,48773,31876],{"class":316},[68,48775,32864],{"class":78},[68,48777,32867],{"class":316},[68,48779,32870],{"class":78},[68,48781,48782],{"class":70,"line":1496},[68,48783,3890],{"emptyLinePlaceholder":1567},[68,48785,48786],{"class":70,"line":1502},[68,48787,48788],{"class":302},"# 文件夹路径，包含所有图片文件\n",[68,48790,48791,48794,48796],{"class":70,"line":1510},[68,48792,48793],{"class":78},"folder_path ",[68,48795,1685],{"class":316},[68,48797,48798],{"class":1742}," 'data_cat_dog'\n",[68,48800,48801],{"class":70,"line":1521},[68,48802,3890],{"emptyLinePlaceholder":1567},[68,48804,48805],{"class":70,"line":3103},[68,48806,48807],{"class":302},"# 初始化累积变量\n",[68,48809,48810,48813,48815],{"class":70,"line":3108},[68,48811,48812],{"class":78},"total_pixels ",[68,48814,1685],{"class":316},[68,48816,48817],{"class":85}," 0\n",[68,48819,48820,48823,48825,48828,48830,48832],{"class":70,"line":3114},[68,48821,48822],{"class":78},"sum_normalized_pixel_values ",[68,48824,1685],{"class":316},[68,48826,48827],{"class":78}," np.zeros(",[68,48829,1709],{"class":85},[68,48831,47292],{"class":78},[68,48833,48834],{"class":302},"# 如果是RGB图像，需要三个通道的均值和方差\n",[68,48836,48837],{"class":70,"line":3119},[68,48838,3890],{"emptyLinePlaceholder":1567},[68,48840,48841],{"class":70,"line":3133},[68,48842,48843],{"class":302},"# 遍历文件夹中的图片文件\n",[68,48845,48846,48848,48851,48853],{"class":70,"line":3138},[68,48847,4515],{"class":316},[68,48849,48850],{"class":78}," root, dirs, files ",[68,48852,27529],{"class":316},[68,48854,48855],{"class":78}," os.walk(folder_path):\n",[68,48857,48858,48860,48863,48865],{"class":70,"line":3144},[68,48859,4691],{"class":316},[68,48861,48862],{"class":78}," filename ",[68,48864,27529],{"class":316},[68,48866,48867],{"class":78}," files:\n",[68,48869,48870,48872,48875,48878,48880,48883,48885,48888,48890,48893,48896],{"class":70,"line":3165},[68,48871,3987],{"class":316},[68,48873,48874],{"class":78}," filename.endswith((",[68,48876,48877],{"class":1742},"'.jpg'",[68,48879,13923],{"class":78},[68,48881,48882],{"class":1742},"'.jpeg'",[68,48884,13923],{"class":78},[68,48886,48887],{"class":1742},"'.png'",[68,48889,13923],{"class":78},[68,48891,48892],{"class":1742},"'.bmp'",[68,48894,48895],{"class":78},")):  ",[68,48897,48898],{"class":302},"# 可根据实际情况添加其他格式\n",[68,48900,48901,48903,48905],{"class":70,"line":3170},[68,48902,47157],{"class":78},[68,48904,1685],{"class":316},[68,48906,48907],{"class":78}," os.path.join(root, filename)\n",[68,48909,48910,48913,48915],{"class":70,"line":3184},[68,48911,48912],{"class":78},"            image ",[68,48914,1685],{"class":316},[68,48916,48917],{"class":78}," Image.open(image_path)\n",[68,48919,48920,48923,48925],{"class":70,"line":3189},[68,48921,48922],{"class":78},"            image_array ",[68,48924,1685],{"class":316},[68,48926,48927],{"class":78}," np.array(image)\n",[68,48929,48930],{"class":70,"line":3218},[68,48931,3890],{"emptyLinePlaceholder":1567},[68,48933,48934],{"class":70,"line":3223},[68,48935,48936],{"class":302},"            # 归一化像素值到0-1之间\n",[68,48938,48939,48942,48944,48947,48949],{"class":70,"line":3240},[68,48940,48941],{"class":78},"            normalized_image_array ",[68,48943,1685],{"class":316},[68,48945,48946],{"class":78}," image_array ",[68,48948,2212],{"class":316},[68,48950,48951],{"class":85}," 255.0\n",[68,48953,48954],{"class":70,"line":3245},[68,48955,3890],{"emptyLinePlaceholder":1567},[68,48957,48958],{"class":70,"line":3250},[68,48959,48960],{"class":302},"            # print(image_path)\n",[68,48962,48963],{"class":70,"line":3255},[68,48964,48965],{"class":302},"            # print(normalized_image_array.shape)\n",[68,48967,48968],{"class":70,"line":3269},[68,48969,48970],{"class":302},"            # 累积归一化后的像素值和像素数量\n",[68,48972,48973,48976,48978],{"class":70,"line":3274},[68,48974,48975],{"class":78},"            total_pixels ",[68,48977,10965],{"class":316},[68,48979,48980],{"class":78}," normalized_image_array.size\n",[68,48982,48983],{"class":70,"line":4067},[68,48984,48985],{"class":302},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[68,48987,48988,48991,48993,48996,48999,49001,49003,49005,49007,49009],{"class":70,"line":4081},[68,48989,48990],{"class":78},"            sum_normalized_pixel_values ",[68,48992,10965],{"class":316},[68,48994,48995],{"class":78}," np.sum(normalized_image_array, ",[68,48997,48998],{"class":6705},"axis",[68,49000,1685],{"class":316},[68,49002,1640],{"class":78},[68,49004,1248],{"class":85},[68,49006,13923],{"class":78},[68,49008,1846],{"class":85},[68,49010,31981],{"class":78},[68,49012,49013],{"class":70,"line":4089},[68,49014,3890],{"emptyLinePlaceholder":1567},[68,49016,49017],{"class":70,"line":4094},[68,49018,49019],{"class":302},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[68,49021,49022,49025,49027,49030,49032],{"class":70,"line":4100},[68,49023,49024],{"class":78},"mean ",[68,49026,1685],{"class":316},[68,49028,49029],{"class":78}," sum_normalized_pixel_values ",[68,49031,2212],{"class":316},[68,49033,49034],{"class":78}," total_pixels\n",[68,49036,49037],{"class":70,"line":4106},[68,49038,3890],{"emptyLinePlaceholder":1567},[68,49040,49041,49044,49046,49048,49050],{"class":70,"line":4111},[68,49042,49043],{"class":78},"sum_squared_diff ",[68,49045,1685],{"class":316},[68,49047,48827],{"class":78},[68,49049,1709],{"class":85},[68,49051,1646],{"class":78},[68,49053,49054],{"class":70,"line":9437},[68,49055,3890],{"emptyLinePlaceholder":1567},[68,49057,49058],{"class":70,"line":9461},[68,49059,49060],{"class":302},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[68,49062,49063],{"class":70,"line":9466},[68,49064,49065],{"class":302},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[68,49067,49068],{"class":70,"line":9472},[68,49069,49070],{"class":302},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[68,49072,49073],{"class":70,"line":9499},[68,49074,49075],{"class":302},"# Image.open(image_path)：打开图片\n",[68,49077,49078],{"class":70,"line":9504},[68,49079,49080],{"class":302},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[68,49082,49083,49085,49087,49089],{"class":70,"line":9510},[68,49084,4515],{"class":316},[68,49086,48850],{"class":78},[68,49088,27529],{"class":316},[68,49090,48855],{"class":78},[68,49092,49093,49095,49097,49099],{"class":70,"line":9522},[68,49094,4691],{"class":316},[68,49096,48862],{"class":78},[68,49098,27529],{"class":316},[68,49100,48867],{"class":78},[68,49102,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121],{"class":70,"line":9534},[68,49104,3987],{"class":316},[68,49106,48874],{"class":78},[68,49108,48877],{"class":1742},[68,49110,13923],{"class":78},[68,49112,48882],{"class":1742},[68,49114,13923],{"class":78},[68,49116,48887],{"class":1742},[68,49118,13923],{"class":78},[68,49120,48892],{"class":1742},[68,49122,49123],{"class":78},")):\n",[68,49125,49126,49128,49130],{"class":70,"line":9546},[68,49127,47157],{"class":78},[68,49129,1685],{"class":316},[68,49131,48907],{"class":78},[68,49133,49134,49136,49138],{"class":70,"line":11204},[68,49135,48912],{"class":78},[68,49137,1685],{"class":316},[68,49139,48917],{"class":78},[68,49141,49142,49144,49146],{"class":70,"line":11229},[68,49143,48922],{"class":78},[68,49145,1685],{"class":316},[68,49147,48927],{"class":78},[68,49149,49150],{"class":70,"line":11252},[68,49151,48936],{"class":302},[68,49153,49154,49156,49158,49160,49162],{"class":70,"line":11276},[68,49155,48941],{"class":78},[68,49157,1685],{"class":316},[68,49159,48946],{"class":78},[68,49161,2212],{"class":316},[68,49163,48951],{"class":85},[68,49165,49166],{"class":70,"line":11281},[68,49167,48965],{"class":302},[68,49169,49170],{"class":70,"line":11286},[68,49171,49172],{"class":302},"            # print(mean.shape)\n",[68,49174,49175],{"class":70,"line":11291},[68,49176,48960],{"class":302},[68,49178,49179],{"class":70,"line":11300},[68,49180,3890],{"emptyLinePlaceholder":1567},[68,49182,49183,49186],{"class":70,"line":11305},[68,49184,49185],{"class":316},"            try",[68,49187,5229],{"class":78},[68,49189,49190,49193,49195,49198,49200,49203,49205],{"class":70,"line":11311},[68,49191,49192],{"class":78},"                diff ",[68,49194,1685],{"class":316},[68,49196,49197],{"class":78}," (normalized_image_array ",[68,49199,2160],{"class":316},[68,49201,49202],{"class":78}," mean) ",[68,49204,12149],{"class":316},[68,49206,49207],{"class":85}," 2\n",[68,49209,49210,49213,49215,49218,49220,49222,49224,49226,49228,49230],{"class":70,"line":11332},[68,49211,49212],{"class":78},"                sum_squared_diff ",[68,49214,10965],{"class":316},[68,49216,49217],{"class":78}," np.sum(diff, ",[68,49219,48998],{"class":6705},[68,49221,1685],{"class":316},[68,49223,1640],{"class":78},[68,49225,1248],{"class":85},[68,49227,13923],{"class":78},[68,49229,1846],{"class":85},[68,49231,31981],{"class":78},[68,49233,49234,49237],{"class":70,"line":11338},[68,49235,49236],{"class":316},"            except",[68,49238,5229],{"class":78},[68,49240,49241,49244,49246,49248,49251],{"class":70,"line":11352},[68,49242,49243],{"class":85},"                print",[68,49245,1640],{"class":78},[68,49247,1691],{"class":316},[68,49249,49250],{"class":1742},"\"捕获到自定义异常\"",[68,49252,1646],{"class":78},[68,49254,49255],{"class":70,"line":11358},[68,49256,49257],{"class":302},"            # diff = (normalized_image_array - mean) ** 2\n",[68,49259,49260],{"class":70,"line":11385},[68,49261,49262],{"class":302},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[68,49264,49265],{"class":70,"line":11394},[68,49266,3890],{"emptyLinePlaceholder":1567},[68,49268,49269,49272,49274,49277,49279],{"class":70,"line":11400},[68,49270,49271],{"class":78},"variance ",[68,49273,1685],{"class":316},[68,49275,49276],{"class":78}," sum_squared_diff ",[68,49278,2212],{"class":316},[68,49280,49034],{"class":78},[68,49282,49283],{"class":70,"line":11408},[68,49284,3890],{"emptyLinePlaceholder":1567},[68,49286,49287,49289,49291,49294],{"class":70,"line":11413},[68,49288,31899],{"class":85},[68,49290,1640],{"class":78},[68,49292,49293],{"class":1742},"\"Mean:\"",[68,49295,49296],{"class":78},", mean)\n",[68,49298,49299,49301,49303,49306],{"class":70,"line":18091},[68,49300,31899],{"class":85},[68,49302,1640],{"class":78},[68,49304,49305],{"class":1742},"\"Variance:\"",[68,49307,49308],{"class":78},", variance)\n",[58,49310,49312],{"className":31862,"code":49311,"language":31864,"meta":63,"style":63},"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",[65,49313,49314,49320,49326,49336,49342,49352,49366,49376,49386,49396,49400,49410,49420,49424,49428,49436,49441,49446,49465,49469,49474,49479,49484,49489,49530,49535,49545,49550,49563,49568,49573,49578,49583,49588,49592,49597,49602,49624,49628,49660,49674,49684,49694,49698,49708,49722,49732,49742,49752,49758,49762,49766,49770,49774,49778,49786,49806,49810,49814,49818,49822,49838,49842,49846,49854,49858,49862,49870,49874,49878,49882,49890,49894,49898,49902,49910,49914,49922,49926,49934,49938,49946,49950,49958,49962,49966,49974,49978,49982,49994,50018,50032,50036,50040,50044,50052,50056,50064,50068,50076,50080,50088,50092,50100,50104,50112,50116,50128,50132,50140,50144,50152,50156,50160,50164,50168,50176,50180,50196,50200,50208,50212,50216,50220,50224,50228,50232,50236,50252,50256,50268,50272,50284,50288,50300,50304,50312,50316,50324,50328,50332,50336,50342,50346,50354,50358,50374,50378,50386,50390,50406,50418,50422,50434,50438,50442,50450,50454,50458,50466,50470,50478,50482,50490,50494,50498,50540,50582,50586,50590,50606,50610,50626,50630,50634,50642,50646,50650,50662,50700,50704,50708,50716,50720,50734,50744,50750,50756,50762,50768,50772,50776,50782,50786,50790,50798,50802,50820,50824,50828,50832,50848,50852,50856,50860,50864,50868,50888,50908,50912,50916,50920,50928,50936,50940,50956,50976,50996,51000,51005,51014,51023,51028,51033,51038,51051,51056,51065,51074,51091],{"__ignoreMap":63},[68,49315,49316,49318],{"class":70,"line":71},[68,49317,31876],{"class":316},[68,49319,33306],{"class":78},[68,49321,49322,49324],{"class":70,"line":82},[68,49323,31876],{"class":316},[68,49325,33313],{"class":78},[68,49327,49328,49330,49332,49334],{"class":70,"line":98},[68,49329,31876],{"class":316},[68,49331,33324],{"class":78},[68,49333,32867],{"class":316},[68,49335,33329],{"class":78},[68,49337,49338,49340],{"class":70,"line":104},[68,49339,31876],{"class":316},[68,49341,31879],{"class":78},[68,49343,49344,49346,49348,49350],{"class":70,"line":112},[68,49345,32221],{"class":316},[68,49347,32899],{"class":78},[68,49349,31876],{"class":316},[68,49351,33346],{"class":78},[68,49353,49354,49356,49358,49360,49363],{"class":70,"line":124},[68,49355,32221],{"class":316},[68,49357,32852],{"class":78},[68,49359,31876],{"class":316},[68,49361,49362],{"class":78}," ImageFolder ",[68,49364,49365],{"class":302},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[68,49367,49368,49370,49372,49374],{"class":70,"line":1496},[68,49369,32221],{"class":316},[68,49371,32882],{"class":78},[68,49373,31876],{"class":316},[68,49375,32887],{"class":78},[68,49377,49378,49380,49382,49384],{"class":70,"line":1502},[68,49379,31876],{"class":316},[68,49381,32899],{"class":78},[68,49383,32867],{"class":316},[68,49385,32904],{"class":78},[68,49387,49388,49390,49392,49394],{"class":70,"line":1510},[68,49389,31876],{"class":316},[68,49391,32916],{"class":78},[68,49393,32867],{"class":316},[68,49395,32921],{"class":78},[68,49397,49398],{"class":70,"line":1521},[68,49399,33391],{"class":302},[68,49401,49402,49404,49406,49408],{"class":70,"line":3103},[68,49403,32221],{"class":316},[68,49405,33398],{"class":78},[68,49407,31876],{"class":316},[68,49409,44515],{"class":78},[68,49411,49412,49414,49416,49418],{"class":70,"line":3108},[68,49413,32221],{"class":316},[68,49415,32224],{"class":78},[68,49417,31876],{"class":316},[68,49419,32229],{"class":78},[68,49421,49422],{"class":70,"line":3114},[68,49423,3890],{"emptyLinePlaceholder":1567},[68,49425,49426],{"class":70,"line":3119},[68,49427,33426],{"class":302},[68,49429,49430,49432,49434],{"class":70,"line":3133},[68,49431,33431],{"class":316},[68,49433,33434],{"class":74},[68,49435,33437],{"class":78},[68,49437,49438],{"class":70,"line":3138},[68,49439,49440],{"class":302},"    # 导入自己的数据集，并进行数据处理\n",[68,49442,49443],{"class":70,"line":3144},[68,49444,49445],{"class":302},"    # 定义数据集的路径\n",[68,49447,49448,49451,49453,49455,49457,49459,49463],{"class":70,"line":3165},[68,49449,49450],{"class":85},"    ROOT_PATH",[68,49452,1685],{"class":316},[68,49454,2298],{"class":316},[68,49456,1880],{"class":1742},[68,49458,2186],{"class":85},[68,49460,49462],{"class":49461},"sA_wV","\u002Fdata\u002Ftrain",[68,49464,26619],{"class":1742},[68,49466,49467],{"class":70,"line":3170},[68,49468,3890],{"emptyLinePlaceholder":1567},[68,49470,49471],{"class":70,"line":3184},[68,49472,49473],{"class":302},"    # 定义归一化方法\n",[68,49475,49476],{"class":70,"line":3189},[68,49477,49478],{"class":302},"    # 这里需要先计算一下数据集的均值和方差\n",[68,49480,49481],{"class":70,"line":3218},[68,49482,49483],{"class":302},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[68,49485,49486],{"class":70,"line":3223},[68,49487,49488],{"class":302},"    # 第一个参数是均值，第二个参数是方差\n",[68,49490,49491,49494,49496,49499,49502,49504,49507,49509,49512,49515,49518,49520,49523,49525,49528],{"class":70,"line":3240},[68,49492,49493],{"class":78},"    normalize",[68,49495,1685],{"class":316},[68,49497,49498],{"class":78},"transforms.Normalize([",[68,49500,49501],{"class":85},"0.162",[68,49503,2007],{"class":78},[68,49505,49506],{"class":85},"0.151",[68,49508,2007],{"class":78},[68,49510,49511],{"class":85},"0.138",[68,49513,49514],{"class":78},"],[",[68,49516,49517],{"class":85},"0.058",[68,49519,2007],{"class":78},[68,49521,49522],{"class":85},"0.052",[68,49524,2007],{"class":78},[68,49526,49527],{"class":85},"0.048",[68,49529,6147],{"class":78},[68,49531,49532],{"class":70,"line":3245},[68,49533,49534],{"class":302},"    # 定义数据集处理方法变量\n",[68,49536,49537,49540,49542],{"class":70,"line":3250},[68,49538,49539],{"class":78},"    train_transform",[68,49541,1685],{"class":316},[68,49543,49544],{"class":78},"transforms.Compose([\n",[68,49546,49547],{"class":70,"line":3255},[68,49548,49549],{"class":302},"        # 调整图像大小为224*224\n",[68,49551,49552,49555,49557,49559,49561],{"class":70,"line":3269},[68,49553,49554],{"class":78},"        transforms.Resize((",[68,49556,32985],{"class":85},[68,49558,2007],{"class":78},[68,49560,32985],{"class":85},[68,49562,44106],{"class":78},[68,49564,49565],{"class":70,"line":3274},[68,49566,49567],{"class":302},"        # 将图像转换为张量\n",[68,49569,49570],{"class":70,"line":4067},[68,49571,49572],{"class":78},"        transforms.ToTensor(),\n",[68,49574,49575],{"class":70,"line":4081},[68,49576,49577],{"class":78},"        normalize])\n",[68,49579,49580],{"class":70,"line":4089},[68,49581,49582],{"class":302},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[68,49584,49585],{"class":70,"line":4094},[68,49586,49587],{"class":302},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[68,49589,49590],{"class":70,"line":4100},[68,49591,3890],{"emptyLinePlaceholder":1567},[68,49593,49594],{"class":70,"line":4106},[68,49595,49596],{"class":302},"    # 加载数据集\n",[68,49598,49599],{"class":70,"line":4111},[68,49600,49601],{"class":302},"    # 传入数据集路径与处理方法\n",[68,49603,49604,49606,49608,49611,49614,49616,49619,49621],{"class":70,"line":9437},[68,49605,33442],{"class":78},[68,49607,1685],{"class":316},[68,49609,49610],{"class":78},"ImageFolder(",[68,49612,49613],{"class":85},"ROOT_PATH",[68,49615,2007],{"class":78},[68,49617,49618],{"class":6705},"transform",[68,49620,1685],{"class":316},[68,49622,49623],{"class":78},"train_transform)\n",[68,49625,49626],{"class":70,"line":9461},[68,49627,3890],{"emptyLinePlaceholder":1567},[68,49629,49630,49632,49634,49636,49638,49640,49642,49644,49646,49648,49650,49652,49654,49656,49658],{"class":70,"line":9466},[68,49631,33494],{"class":78},[68,49633,1685],{"class":316},[68,49635,33499],{"class":78},[68,49637,33502],{"class":85},[68,49639,1640],{"class":78},[68,49641,33507],{"class":85},[68,49643,2083],{"class":316},[68,49645,8847],{"class":85},[68,49647,33514],{"class":78},[68,49649,33502],{"class":85},[68,49651,1640],{"class":78},[68,49653,33521],{"class":85},[68,49655,2083],{"class":316},[68,49657,8847],{"class":85},[68,49659,33528],{"class":78},[68,49661,49662,49664,49666,49668,49670,49672],{"class":70,"line":9472},[68,49663,33533],{"class":78},[68,49665,1685],{"class":316},[68,49667,33538],{"class":78},[68,49669,33021],{"class":6705},[68,49671,1685],{"class":316},[68,49673,33026],{"class":78},[68,49675,49676,49678,49680,49682],{"class":70,"line":9499},[68,49677,33549],{"class":6705},[68,49679,1685],{"class":316},[68,49681,1826],{"class":85},[68,49683,32950],{"class":78},[68,49685,49686,49688,49690,49692],{"class":70,"line":9504},[68,49687,33561],{"class":6705},[68,49689,1685],{"class":316},[68,49691,32960],{"class":85},[68,49693,32950],{"class":78},[68,49695,49696],{"class":70,"line":9510},[68,49697,33572],{"class":302},[68,49699,49700,49702,49704,49706],{"class":70,"line":9522},[68,49701,33577],{"class":6705},[68,49703,1685],{"class":316},[68,49705,2024],{"class":85},[68,49707,1646],{"class":78},[68,49709,49710,49712,49714,49716,49718,49720],{"class":70,"line":9534},[68,49711,33588],{"class":78},[68,49713,1685],{"class":316},[68,49715,33018],{"class":78},[68,49717,33021],{"class":6705},[68,49719,1685],{"class":316},[68,49721,33599],{"class":78},[68,49723,49724,49726,49728,49730],{"class":70,"line":9546},[68,49725,33604],{"class":6705},[68,49727,1685],{"class":316},[68,49729,1826],{"class":85},[68,49731,32950],{"class":78},[68,49733,49734,49736,49738,49740],{"class":70,"line":11204},[68,49735,33615],{"class":6705},[68,49737,1685],{"class":316},[68,49739,32960],{"class":85},[68,49741,32950],{"class":78},[68,49743,49744,49746,49748,49750],{"class":70,"line":11229},[68,49745,33626],{"class":6705},[68,49747,1685],{"class":316},[68,49749,2024],{"class":85},[68,49751,1646],{"class":78},[68,49753,49754,49756],{"class":70,"line":11252},[68,49755,5580],{"class":316},[68,49757,33639],{"class":78},[68,49759,49760],{"class":70,"line":11276},[68,49761,3890],{"emptyLinePlaceholder":1567},[68,49763,49764],{"class":70,"line":11281},[68,49765,33648],{"class":302},[68,49767,49768],{"class":70,"line":11286},[68,49769,33653],{"class":302},[68,49771,49772],{"class":70,"line":11291},[68,49773,3890],{"emptyLinePlaceholder":1567},[68,49775,49776],{"class":70,"line":11300},[68,49777,33662],{"class":302},[68,49779,49780,49782,49784],{"class":70,"line":11305},[68,49781,33431],{"class":316},[68,49783,33669],{"class":74},[68,49785,33672],{"class":78},[68,49787,49788,49790,49792,49794,49796,49798,49800,49802,49804],{"class":70,"line":11311},[68,49789,32721],{"class":78},[68,49791,1685],{"class":316},[68,49793,31935],{"class":78},[68,49795,32728],{"class":1742},[68,49797,3195],{"class":316},[68,49799,32733],{"class":78},[68,49801,3192],{"class":316},[68,49803,33691],{"class":1742},[68,49805,1646],{"class":78},[68,49807,49808],{"class":70,"line":11332},[68,49809,3890],{"emptyLinePlaceholder":1567},[68,49811,49812],{"class":70,"line":11338},[68,49813,33706],{"class":302},[68,49815,49816],{"class":70,"line":11352},[68,49817,33711],{"class":302},[68,49819,49820],{"class":70,"line":11358},[68,49821,33716],{"class":302},[68,49823,49824,49826,49828,49830,49832,49834,49836],{"class":70,"line":11385},[68,49825,33721],{"class":78},[68,49827,1685],{"class":316},[68,49829,33726],{"class":78},[68,49831,33729],{"class":6705},[68,49833,1685],{"class":316},[68,49835,33734],{"class":85},[68,49837,1646],{"class":78},[68,49839,49840],{"class":70,"line":11394},[68,49841,3890],{"emptyLinePlaceholder":1567},[68,49843,49844],{"class":70,"line":11400},[68,49845,33745],{"class":302},[68,49847,49848,49850,49852],{"class":70,"line":11408},[68,49849,33750],{"class":78},[68,49851,1685],{"class":316},[68,49853,33755],{"class":78},[68,49855,49856],{"class":70,"line":11413},[68,49857,3890],{"emptyLinePlaceholder":1567},[68,49859,49860],{"class":70,"line":18091},[68,49861,33764],{"class":302},[68,49863,49864,49866,49868],{"class":70,"line":18097},[68,49865,32773],{"class":78},[68,49867,1685],{"class":316},[68,49869,33773],{"class":78},[68,49871,49872],{"class":70,"line":18120},[68,49873,33778],{"class":302},[68,49875,49876],{"class":70,"line":18126},[68,49877,33783],{"class":302},[68,49879,49880],{"class":70,"line":18149},[68,49881,33788],{"class":302},[68,49883,49884,49886,49888],{"class":70,"line":18163},[68,49885,33793],{"class":78},[68,49887,1685],{"class":316},[68,49889,33798],{"class":78},[68,49891,49892],{"class":70,"line":18183},[68,49893,3890],{"emptyLinePlaceholder":1567},[68,49895,49896],{"class":70,"line":18189},[68,49897,33811],{"class":302},[68,49899,49900],{"class":70,"line":18200},[68,49901,33816],{"class":302},[68,49903,49904,49906,49908],{"class":70,"line":18223},[68,49905,33821],{"class":78},[68,49907,1685],{"class":316},[68,49909,33826],{"class":85},[68,49911,49912],{"class":70,"line":18245},[68,49913,33831],{"class":302},[68,49915,49916,49918,49920],{"class":70,"line":18250},[68,49917,33836],{"class":78},[68,49919,1685],{"class":316},[68,49921,33841],{"class":78},[68,49923,49924],{"class":70,"line":18256},[68,49925,33846],{"class":302},[68,49927,49928,49930,49932],{"class":70,"line":18270},[68,49929,33851],{"class":78},[68,49931,1685],{"class":316},[68,49933,33841],{"class":78},[68,49935,49936],{"class":70,"line":18283},[68,49937,33860],{"class":302},[68,49939,49940,49942,49944],{"class":70,"line":18288},[68,49941,33865],{"class":78},[68,49943,1685],{"class":316},[68,49945,33841],{"class":78},[68,49947,49948],{"class":70,"line":18302},[68,49949,33874],{"class":302},[68,49951,49952,49954,49956],{"class":70,"line":18307},[68,49953,33879],{"class":78},[68,49955,1685],{"class":316},[68,49957,33841],{"class":78},[68,49959,49960],{"class":70,"line":18313},[68,49961,3890],{"emptyLinePlaceholder":1567},[68,49963,49964],{"class":70,"line":18318},[68,49965,33892],{"class":302},[68,49967,49968,49970,49972],{"class":70,"line":18332},[68,49969,33897],{"class":78},[68,49971,1685],{"class":316},[68,49973,33902],{"class":78},[68,49975,49976],{"class":70,"line":18337},[68,49977,3890],{"emptyLinePlaceholder":1567},[68,49979,49980],{"class":70,"line":18342},[68,49981,33915],{"class":302},[68,49983,49984,49986,49988,49990,49992],{"class":70,"line":18356},[68,49985,4691],{"class":316},[68,49987,33922],{"class":78},[68,49989,27529],{"class":316},[68,49991,33927],{"class":85},[68,49993,33930],{"class":78},[68,49995,49996,49998,50000,50002,50004,50006,50008,50010,50012,50014,50016],{"class":70,"line":18368},[68,49997,33935],{"class":85},[68,49999,1640],{"class":78},[68,50001,33940],{"class":1742},[68,50003,33943],{"class":85},[68,50005,2212],{"class":1742},[68,50007,33943],{"class":85},[68,50009,1880],{"class":1742},[68,50011,33952],{"class":78},[68,50013,2160],{"class":316},[68,50015,1846],{"class":85},[68,50017,31981],{"class":78},[68,50019,50020,50022,50024,50026,50028,50030],{"class":70,"line":18373},[68,50021,33935],{"class":85},[68,50023,1640],{"class":78},[68,50025,33967],{"class":1742},[68,50027,2083],{"class":316},[68,50029,313],{"class":85},[68,50031,1646],{"class":78},[68,50033,50034],{"class":70,"line":18386},[68,50035,3890],{"emptyLinePlaceholder":1567},[68,50037,50038],{"class":70,"line":18391},[68,50039,33982],{"class":302},[68,50041,50042],{"class":70,"line":18396},[68,50043,33987],{"class":302},[68,50045,50046,50048,50050],{"class":70,"line":18401},[68,50047,33992],{"class":78},[68,50049,1685],{"class":316},[68,50051,33826],{"class":85},[68,50053,50054],{"class":70,"line":18414},[68,50055,34001],{"class":302},[68,50057,50058,50060,50062],{"class":70,"line":18419},[68,50059,34006],{"class":78},[68,50061,1685],{"class":316},[68,50063,4575],{"class":85},[68,50065,50066],{"class":70,"line":34117},[68,50067,34015],{"class":302},[68,50069,50070,50072,50074],{"class":70,"line":34123},[68,50071,34020],{"class":78},[68,50073,1685],{"class":316},[68,50075,33826],{"class":85},[68,50077,50078],{"class":70,"line":34129},[68,50079,34029],{"class":302},[68,50081,50082,50084,50086],{"class":70,"line":34135},[68,50083,34034],{"class":78},[68,50085,1685],{"class":316},[68,50087,4575],{"class":85},[68,50089,50090],{"class":70,"line":34141},[68,50091,34043],{"class":302},[68,50093,50094,50096,50098],{"class":70,"line":34152},[68,50095,34048],{"class":78},[68,50097,1685],{"class":316},[68,50099,4575],{"class":85},[68,50101,50102],{"class":70,"line":34158},[68,50103,34057],{"class":302},[68,50105,50106,50108,50110],{"class":70,"line":34178},[68,50107,34062],{"class":78},[68,50109,1685],{"class":316},[68,50111,4575],{"class":85},[68,50113,50114],{"class":70,"line":34184},[68,50115,34071],{"class":302},[68,50117,50118,50120,50122,50124,50126],{"class":70,"line":34195},[68,50119,4893],{"class":316},[68,50121,33085],{"class":78},[68,50123,27529],{"class":316},[68,50125,33090],{"class":85},[68,50127,34084],{"class":78},[68,50129,50130],{"class":70,"line":34201},[68,50131,34089],{"class":302},[68,50133,50134,50136,50138],{"class":70,"line":34207},[68,50135,34094],{"class":78},[68,50137,1685],{"class":316},[68,50139,34099],{"class":78},[68,50141,50142],{"class":70,"line":34213},[68,50143,34104],{"class":302},[68,50145,50146,50148,50150],{"class":70,"line":34219},[68,50147,34109],{"class":78},[68,50149,1685],{"class":316},[68,50151,34114],{"class":78},[68,50153,50154],{"class":70,"line":34225},[68,50155,34120],{"class":302},[68,50157,50158],{"class":70,"line":34231},[68,50159,34126],{"class":78},[68,50161,50162],{"class":70,"line":34237},[68,50163,34132],{"class":302},[68,50165,50166],{"class":70,"line":34257},[68,50167,34138],{"class":302},[68,50169,50170,50172,50174],{"class":70,"line":34263},[68,50171,34144],{"class":78},[68,50173,1685],{"class":316},[68,50175,34149],{"class":78},[68,50177,50178],{"class":70,"line":34279},[68,50179,34155],{"class":302},[68,50181,50182,50184,50186,50188,50190,50192,50194],{"class":70,"line":34285},[68,50183,34161],{"class":78},[68,50185,1685],{"class":316},[68,50187,34166],{"class":78},[68,50189,34169],{"class":6705},[68,50191,1685],{"class":316},[68,50193,1846],{"class":85},[68,50195,1646],{"class":78},[68,50197,50198],{"class":70,"line":34299},[68,50199,34181],{"class":302},[68,50201,50202,50204,50206],{"class":70,"line":34305},[68,50203,34187],{"class":78},[68,50205,1685],{"class":316},[68,50207,34192],{"class":78},[68,50209,50210],{"class":70,"line":34320},[68,50211,34198],{"class":302},[68,50213,50214],{"class":70,"line":34326},[68,50215,34204],{"class":78},[68,50217,50218],{"class":70,"line":34335},[68,50219,34210],{"class":302},[68,50221,50222],{"class":70,"line":34341},[68,50223,34216],{"class":78},[68,50225,50226],{"class":70,"line":34350},[68,50227,34222],{"class":302},[68,50229,50230],{"class":70,"line":34356},[68,50231,34228],{"class":78},[68,50233,50234],{"class":70,"line":34362},[68,50235,34234],{"class":302},[68,50237,50238,50240,50242,50244,50246,50248,50250],{"class":70,"line":34371},[68,50239,34240],{"class":78},[68,50241,10965],{"class":316},[68,50243,34245],{"class":78},[68,50245,2083],{"class":316},[68,50247,34250],{"class":78},[68,50249,1248],{"class":85},[68,50251,1646],{"class":78},[68,50253,50254],{"class":70,"line":34377},[68,50255,34260],{"class":302},[68,50257,50258,50260,50262,50264,50266],{"class":70,"line":34388},[68,50259,34266],{"class":78},[68,50261,10965],{"class":316},[68,50263,34271],{"class":78},[68,50265,4439],{"class":316},[68,50267,34276],{"class":78},[68,50269,50270],{"class":70,"line":34394},[68,50271,34282],{"class":302},[68,50273,50274,50276,50278,50280,50282],{"class":70,"line":34413},[68,50275,34288],{"class":78},[68,50277,10965],{"class":316},[68,50279,34250],{"class":78},[68,50281,1248],{"class":85},[68,50283,1646],{"class":78},[68,50285,50286],{"class":70,"line":34419},[68,50287,34302],{"class":302},[68,50289,50290,50292,50294,50296,50298],{"class":70,"line":34430},[68,50291,4893],{"class":316},[68,50293,34310],{"class":78},[68,50295,27529],{"class":316},[68,50297,33090],{"class":85},[68,50299,34317],{"class":78},[68,50301,50302],{"class":70,"line":34436},[68,50303,34323],{"class":302},[68,50305,50306,50308,50310],{"class":70,"line":34456},[68,50307,34094],{"class":78},[68,50309,1685],{"class":316},[68,50311,34099],{"class":78},[68,50313,50314],{"class":70,"line":34472},[68,50315,34338],{"class":302},[68,50317,50318,50320,50322],{"class":70,"line":34478},[68,50319,34109],{"class":78},[68,50321,1685],{"class":316},[68,50323,34114],{"class":78},[68,50325,50326],{"class":70,"line":34492},[68,50327,34353],{"class":302},[68,50329,50330],{"class":70,"line":34498},[68,50331,34359],{"class":78},[68,50333,50334],{"class":70,"line":34504},[68,50335,37840],{"class":302},[68,50337,50338,50340],{"class":70,"line":34515},[68,50339,34365],{"class":316},[68,50341,34368],{"class":78},[68,50343,50344],{"class":70,"line":34521},[68,50345,34374],{"class":302},[68,50347,50348,50350,50352],{"class":70,"line":34527},[68,50349,37855],{"class":78},[68,50351,1685],{"class":316},[68,50353,34149],{"class":78},[68,50355,50356],{"class":70,"line":34537},[68,50357,34391],{"class":302},[68,50359,50360,50362,50364,50366,50368,50370,50372],{"class":70,"line":34543},[68,50361,37868],{"class":78},[68,50363,1685],{"class":316},[68,50365,34166],{"class":78},[68,50367,34169],{"class":6705},[68,50369,1685],{"class":316},[68,50371,1846],{"class":85},[68,50373,1646],{"class":78},[68,50375,50376],{"class":70,"line":34554},[68,50377,34416],{"class":302},[68,50379,50380,50382,50384],{"class":70,"line":34560},[68,50381,37889],{"class":78},[68,50383,1685],{"class":316},[68,50385,34192],{"class":78},[68,50387,50388],{"class":70,"line":34570},[68,50389,34433],{"class":302},[68,50391,50392,50394,50396,50398,50400,50402,50404],{"class":70,"line":34575},[68,50393,37902],{"class":78},[68,50395,10965],{"class":316},[68,50397,37907],{"class":78},[68,50399,2083],{"class":316},[68,50401,34250],{"class":78},[68,50403,1248],{"class":85},[68,50405,1646],{"class":78},[68,50407,50408,50410,50412,50414,50416],{"class":70,"line":34581},[68,50409,37920],{"class":78},[68,50411,10965],{"class":316},[68,50413,34271],{"class":78},[68,50415,4439],{"class":316},[68,50417,34276],{"class":78},[68,50419,50420],{"class":70,"line":34630},[68,50421,37933],{"class":302},[68,50423,50424,50426,50428,50430,50432],{"class":70,"line":34677},[68,50425,37938],{"class":78},[68,50427,10965],{"class":316},[68,50429,34250],{"class":78},[68,50431,1248],{"class":85},[68,50433,1646],{"class":78},[68,50435,50436],{"class":70,"line":34682},[68,50437,34495],{"class":302},[68,50439,50440],{"class":70,"line":34688},[68,50441,34501],{"class":302},[68,50443,50444,50446,50448],{"class":70,"line":34707},[68,50445,34507],{"class":78},[68,50447,2212],{"class":316},[68,50449,34512],{"class":78},[68,50451,50452],{"class":70,"line":34713},[68,50453,34518],{"class":302},[68,50455,50456],{"class":70,"line":34733},[68,50457,34524],{"class":302},[68,50459,50460,50462,50464],{"class":70,"line":34739},[68,50461,34530],{"class":78},[68,50463,2212],{"class":316},[68,50465,34512],{"class":78},[68,50467,50468],{"class":70,"line":34745},[68,50469,34540],{"class":302},[68,50471,50472,50474,50476],{"class":70,"line":34755},[68,50473,34546],{"class":78},[68,50475,2212],{"class":316},[68,50477,34551],{"class":78},[68,50479,50480],{"class":70,"line":34760},[68,50481,34557],{"class":302},[68,50483,50484,50486,50488],{"class":70,"line":34766},[68,50485,34563],{"class":78},[68,50487,2212],{"class":316},[68,50489,34551],{"class":78},[68,50491,50492],{"class":70,"line":34782},[68,50493,3890],{"emptyLinePlaceholder":1567},[68,50495,50496],{"class":70,"line":34827},[68,50497,34578],{"class":302},[68,50499,50500,50502,50504,50506,50508,50510,50512,50514,50516,50518,50520,50522,50524,50526,50528,50530,50532,50534,50536,50538],{"class":70,"line":34833},[68,50501,33935],{"class":85},[68,50503,1640],{"class":78},[68,50505,5082],{"class":1742},[68,50507,33943],{"class":85},[68,50509,34592],{"class":1742},[68,50511,2523],{"class":85},[68,50513,34597],{"class":316},[68,50515,2573],{"class":85},[68,50517,34602],{"class":1742},[68,50519,2523],{"class":85},[68,50521,34597],{"class":316},[68,50523,2573],{"class":85},[68,50525,5082],{"class":1742},[68,50527,34613],{"class":78},[68,50529,2160],{"class":316},[68,50531,1846],{"class":85},[68,50533,34620],{"class":78},[68,50535,2160],{"class":316},[68,50537,1846],{"class":85},[68,50539,34627],{"class":78},[68,50541,50542,50544,50546,50548,50550,50552,50554,50556,50558,50560,50562,50564,50566,50568,50570,50572,50574,50576,50578,50580],{"class":70,"line":34839},[68,50543,33935],{"class":85},[68,50545,1640],{"class":78},[68,50547,5082],{"class":1742},[68,50549,33943],{"class":85},[68,50551,34641],{"class":1742},[68,50553,2523],{"class":85},[68,50555,34597],{"class":316},[68,50557,2573],{"class":85},[68,50559,34650],{"class":1742},[68,50561,2523],{"class":85},[68,50563,34597],{"class":316},[68,50565,2573],{"class":85},[68,50567,5082],{"class":1742},[68,50569,34661],{"class":78},[68,50571,2160],{"class":316},[68,50573,1846],{"class":85},[68,50575,34668],{"class":78},[68,50577,2160],{"class":316},[68,50579,1846],{"class":85},[68,50581,34627],{"class":78},[68,50583,50584],{"class":70,"line":34845},[68,50585,3890],{"emptyLinePlaceholder":1567},[68,50587,50588],{"class":70,"line":34856},[68,50589,34685],{"class":302},[68,50591,50592,50594,50596,50598,50600,50602,50604],{"class":70,"line":34862},[68,50593,3987],{"class":316},[68,50595,34693],{"class":78},[68,50597,2160],{"class":316},[68,50599,1846],{"class":85},[68,50601,2567],{"class":78},[68,50603,2587],{"class":316},[68,50605,34704],{"class":78},[68,50607,50608],{"class":70,"line":34868},[68,50609,34710],{"class":302},[68,50611,50612,50614,50616,50618,50620,50622,50624],{"class":70,"line":34874},[68,50613,34716],{"class":78},[68,50615,1679],{"class":85},[68,50617,1685],{"class":316},[68,50619,34723],{"class":78},[68,50621,2160],{"class":316},[68,50623,1846],{"class":85},[68,50625,34730],{"class":78},[68,50627,50628],{"class":70,"line":34892},[68,50629,34736],{"class":302},[68,50631,50632],{"class":70,"line":34906},[68,50633,34742],{"class":302},[68,50635,50636,50638,50640],{"class":70,"line":34915},[68,50637,34748],{"class":78},[68,50639,1685],{"class":316},[68,50641,33798],{"class":78},[68,50643,50644],{"class":70,"line":34924},[68,50645,3890],{"emptyLinePlaceholder":1567},[68,50647,50648],{"class":70,"line":34933},[68,50649,34763],{"class":302},[68,50651,50652,50654,50656,50658,50660],{"class":70,"line":34942},[68,50653,34769],{"class":78},[68,50655,1685],{"class":316},[68,50657,34774],{"class":78},[68,50659,2160],{"class":316},[68,50661,34779],{"class":78},[68,50663,50664,50666,50668,50670,50672,50674,50676,50678,50680,50682,50684,50686,50688,50690,50692,50694,50696,50698],{"class":70,"line":34948},[68,50665,33935],{"class":85},[68,50667,1640],{"class":78},[68,50669,34789],{"class":1742},[68,50671,2523],{"class":85},[68,50673,34794],{"class":316},[68,50675,2573],{"class":85},[68,50677,2172],{"class":1742},[68,50679,2523],{"class":85},[68,50681,34794],{"class":316},[68,50683,2573],{"class":85},[68,50685,34807],{"class":1742},[68,50687,34810],{"class":78},[68,50689,34813],{"class":316},[68,50691,2534],{"class":85},[68,50693,34818],{"class":78},[68,50695,1957],{"class":316},[68,50697,2534],{"class":85},[68,50699,31981],{"class":78},[68,50701,50702],{"class":70,"line":34954},[68,50703,38217],{"class":302},[68,50705,50706],{"class":70,"line":34962},[68,50707,38222],{"class":302},[68,50709,50710,50712,50714],{"class":70,"line":34967},[68,50711,38227],{"class":78},[68,50713,34851],{"class":1742},[68,50715,1646],{"class":78},[68,50717,50718],{"class":70,"line":34973},[68,50719,34871],{"class":302},[68,50721,50722,50724,50726,50728,50730,50732],{"class":70,"line":34984},[68,50723,34877],{"class":78},[68,50725,1685],{"class":316},[68,50727,34882],{"class":78},[68,50729,34885],{"class":6705},[68,50731,1685],{"class":316},[68,50733,3038],{"class":78},[68,50735,50736,50738,50740,50742],{"class":70,"line":34990},[68,50737,34895],{"class":1742},[68,50739,2486],{"class":78},[68,50741,34900],{"class":85},[68,50743,34903],{"class":78},[68,50745,50746,50748],{"class":70,"line":35010},[68,50747,34909],{"class":1742},[68,50749,34912],{"class":78},[68,50751,50752,50754],{"class":70,"line":35016},[68,50753,34918],{"class":1742},[68,50755,34921],{"class":78},[68,50757,50758,50760],{"class":70,"line":35022},[68,50759,34927],{"class":1742},[68,50761,34930],{"class":78},[68,50763,50764,50766],{"class":70,"line":35028},[68,50765,34936],{"class":1742},[68,50767,34939],{"class":78},[68,50769,50770],{"class":70,"line":35045},[68,50771,34945],{"class":78},[68,50773,50774],{"class":70,"line":35051},[68,50775,34951],{"class":302},[68,50777,50778,50780],{"class":70,"line":35057},[68,50779,5580],{"class":316},[68,50781,34959],{"class":78},[68,50783,50784],{"class":70,"line":35063},[68,50785,3890],{"emptyLinePlaceholder":1567},[68,50787,50788],{"class":70,"line":35069},[68,50789,34970],{"class":302},[68,50791,50792,50794,50796],{"class":70,"line":35075},[68,50793,33431],{"class":316},[68,50795,34978],{"class":74},[68,50797,34981],{"class":78},[68,50799,50800],{"class":70,"line":35102},[68,50801,34987],{"class":302},[68,50803,50804,50806,50808,50810,50812,50814,50816,50818],{"class":70,"line":35126},[68,50805,34993],{"class":78},[68,50807,33177],{"class":6705},[68,50809,1685],{"class":316},[68,50811,1640],{"class":78},[68,50813,2126],{"class":85},[68,50815,2007],{"class":78},[68,50817,1922],{"class":85},[68,50819,31981],{"class":78},[68,50821,50822],{"class":70,"line":35132},[68,50823,35013],{"class":302},[68,50825,50826],{"class":70,"line":35138},[68,50827,35019],{"class":302},[68,50829,50830],{"class":70,"line":35144},[68,50831,35025],{"class":302},[68,50833,50834,50836,50838,50840,50842,50844,50846],{"class":70,"line":35155},[68,50835,33211],{"class":78},[68,50837,1846],{"class":85},[68,50839,2007],{"class":78},[68,50841,1715],{"class":85},[68,50843,2007],{"class":78},[68,50845,1846],{"class":85},[68,50847,1646],{"class":78},[68,50849,50850],{"class":70,"line":35166},[68,50851,35048],{"class":302},[68,50853,50854],{"class":70,"line":35172},[68,50855,35054],{"class":302},[68,50857,50858],{"class":70,"line":35189},[68,50859,35060],{"class":302},[68,50861,50862],{"class":70,"line":35212},[68,50863,35066],{"class":302},[68,50865,50866],{"class":70,"line":35235},[68,50867,35072],{"class":302},[68,50869,50870,50872,50874,50876,50878,50880,50882,50884,50886],{"class":70,"line":35241},[68,50871,35078],{"class":78},[68,50873,35081],{"class":1742},[68,50875,35084],{"class":78},[68,50877,35087],{"class":1742},[68,50879,2007],{"class":78},[68,50881,35092],{"class":6705},[68,50883,1685],{"class":316},[68,50885,35097],{"class":1742},[68,50887,1646],{"class":78},[68,50889,50890,50892,50894,50896,50898,50900,50902,50904,50906],{"class":70,"line":35246},[68,50891,35078],{"class":78},[68,50893,35081],{"class":1742},[68,50895,35109],{"class":78},[68,50897,35112],{"class":1742},[68,50899,2007],{"class":78},[68,50901,35092],{"class":6705},[68,50903,1685],{"class":316},[68,50905,35121],{"class":1742},[68,50907,1646],{"class":78},[68,50909,50910],{"class":70,"line":35255},[68,50911,35129],{"class":302},[68,50913,50914],{"class":70,"line":35265},[68,50915,35135],{"class":78},[68,50917,50918],{"class":70,"line":35271},[68,50919,35141],{"class":302},[68,50921,50922,50924,50926],{"class":70,"line":35276},[68,50923,35147],{"class":78},[68,50925,35150],{"class":1742},[68,50927,1646],{"class":78},[68,50929,50930,50932,50934],{"class":70,"line":35282},[68,50931,35158],{"class":78},[68,50933,35161],{"class":1742},[68,50935,1646],{"class":78},[68,50937,50938],{"class":70,"line":35295},[68,50939,35169],{"class":302},[68,50941,50942,50944,50946,50948,50950,50952,50954],{"class":70,"line":35301},[68,50943,33211],{"class":78},[68,50945,1846],{"class":85},[68,50947,2007],{"class":78},[68,50949,1715],{"class":85},[68,50951,2007],{"class":78},[68,50953,1715],{"class":85},[68,50955,1646],{"class":78},[68,50957,50958,50960,50962,50964,50966,50968,50970,50972,50974],{"class":70,"line":35312},[68,50959,35078],{"class":78},[68,50961,35081],{"class":1742},[68,50963,35196],{"class":78},[68,50965,35087],{"class":1742},[68,50967,2007],{"class":78},[68,50969,35092],{"class":6705},[68,50971,1685],{"class":316},[68,50973,35207],{"class":1742},[68,50975,1646],{"class":78},[68,50977,50978,50980,50982,50984,50986,50988,50990,50992,50994],{"class":70,"line":35323},[68,50979,35078],{"class":78},[68,50981,35081],{"class":1742},[68,50983,35219],{"class":78},[68,50985,35112],{"class":1742},[68,50987,2007],{"class":78},[68,50989,35092],{"class":6705},[68,50991,1685],{"class":316},[68,50993,35230],{"class":1742},[68,50995,1646],{"class":78},[68,50997,50998],{"class":70,"line":35342},[68,50999,35238],{"class":302},[68,51001,51003],{"class":70,"line":51002},219,[68,51004,35135],{"class":78},[68,51006,51008,51010,51012],{"class":70,"line":51007},220,[68,51009,35147],{"class":78},[68,51011,35081],{"class":1742},[68,51013,1646],{"class":78},[68,51015,51017,51019,51021],{"class":70,"line":51016},221,[68,51018,35158],{"class":78},[68,51020,35260],{"class":1742},[68,51022,1646],{"class":78},[68,51024,51026],{"class":70,"line":51025},222,[68,51027,35268],{"class":78},[68,51029,51031],{"class":70,"line":51030},223,[68,51032,3890],{"emptyLinePlaceholder":1567},[68,51034,51036],{"class":70,"line":51035},224,[68,51037,35279],{"class":302},[68,51039,51041,51043,51045,51047,51049],{"class":70,"line":51040},225,[68,51042,3023],{"class":316},[68,51044,32704],{"class":85},[68,51046,4439],{"class":316},[68,51048,32709],{"class":1742},[68,51050,5229],{"class":78},[68,51052,51054],{"class":70,"line":51053},226,[68,51055,35298],{"class":302},[68,51057,51059,51061,51063],{"class":70,"line":51058},227,[68,51060,46030],{"class":78},[68,51062,1685],{"class":316},[68,51064,46035],{"class":78},[68,51066,51068,51070,51072],{"class":70,"line":51067},228,[68,51069,35315],{"class":78},[68,51071,1685],{"class":316},[68,51073,35320],{"class":78},[68,51075,51077,51079,51081,51083,51085,51087,51089],{"class":70,"line":51076},229,[68,51078,34877],{"class":78},[68,51080,1685],{"class":316},[68,51082,46052],{"class":78},[68,51084,35333],{"class":6705},[68,51086,1685],{"class":316},[68,51088,2534],{"class":85},[68,51090,1646],{"class":78},[68,51092,51094],{"class":70,"line":51093},230,[68,51095,35345],{"class":78},[245,51097,51099],{"id":51098},"_242测试代码","2.4.2.测试代码",[170,51101,51102],{},"使用测试集进行测试与推理",[58,51104,51106],{"className":31862,"code":51105,"language":31864,"meta":63,"style":63},"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",[65,51107,51108,51114,51124,51134,51145,51155,51159,51163,51171,51176,51180,51197,51201,51205,51209,51213,51217,51249,51253,51261,51265,51277,51281,51285,51289,51293,51297,51301,51305,51309,51327,51341,51345,51355,51365,51375,51381,51385,51389,51397,51401,51417,51425,51429,51433,51441,51449,51453,51457,51461,51465,51471,51475,51485,51493,51501,51505,51509,51513,51521,51525,51541,51545,51549,51553,51565,51569,51581,51585,51589,51601,51605,51615,51619,51623,51635,51639,51647,51651,51655,51663,51667,51675,51679,51683,51687,51691,51695,51711,51719,51723,51727,51745,51751,51755,51765,51773,51781,51785,51789,51793,51797,51805,51809,51825,51829,51837,51845],{"__ignoreMap":63},[68,51109,51110,51112],{"class":70,"line":71},[68,51111,31876],{"class":316},[68,51113,31879],{"class":78},[68,51115,51116,51118,51120,51122],{"class":70,"line":82},[68,51117,31876],{"class":316},[68,51119,32899],{"class":78},[68,51121,32867],{"class":316},[68,51123,32904],{"class":78},[68,51125,51126,51128,51130,51132],{"class":70,"line":98},[68,51127,32221],{"class":316},[68,51129,32882],{"class":78},[68,51131,31876],{"class":316},[68,51133,32887],{"class":78},[68,51135,51136,51138,51140,51142],{"class":70,"line":104},[68,51137,32221],{"class":316},[68,51139,32852],{"class":78},[68,51141,31876],{"class":316},[68,51143,51144],{"class":78}," ImageFolder\n",[68,51146,51147,51149,51151,51153],{"class":70,"line":112},[68,51148,32221],{"class":316},[68,51150,33398],{"class":78},[68,51152,31876],{"class":316},[68,51154,46124],{"class":78},[68,51156,51157],{"class":70,"line":124},[68,51158,3890],{"emptyLinePlaceholder":1567},[68,51160,51161],{"class":70,"line":1496},[68,51162,35435],{"class":302},[68,51164,51165,51167,51169],{"class":70,"line":1502},[68,51166,33431],{"class":316},[68,51168,35442],{"class":74},[68,51170,33437],{"class":78},[68,51172,51173],{"class":70,"line":1510},[68,51174,51175],{"class":302},"   # 导入自己的数据集，并进行数据处理\n",[68,51177,51178],{"class":70,"line":1521},[68,51179,49445],{"class":302},[68,51181,51182,51184,51186,51188,51190,51192,51195],{"class":70,"line":3103},[68,51183,49450],{"class":85},[68,51185,1685],{"class":316},[68,51187,2298],{"class":316},[68,51189,1880],{"class":1742},[68,51191,2186],{"class":85},[68,51193,51194],{"class":49461},"\u002Fdata\u002Ftest",[68,51196,26619],{"class":1742},[68,51198,51199],{"class":70,"line":3108},[68,51200,3890],{"emptyLinePlaceholder":1567},[68,51202,51203],{"class":70,"line":3114},[68,51204,49473],{"class":302},[68,51206,51207],{"class":70,"line":3119},[68,51208,49478],{"class":302},[68,51210,51211],{"class":70,"line":3133},[68,51212,49483],{"class":302},[68,51214,51215],{"class":70,"line":3138},[68,51216,49488],{"class":302},[68,51218,51219,51221,51223,51225,51227,51229,51231,51233,51235,51237,51239,51241,51243,51245,51247],{"class":70,"line":3144},[68,51220,49493],{"class":78},[68,51222,1685],{"class":316},[68,51224,49498],{"class":78},[68,51226,49501],{"class":85},[68,51228,2007],{"class":78},[68,51230,49506],{"class":85},[68,51232,2007],{"class":78},[68,51234,49511],{"class":85},[68,51236,49514],{"class":78},[68,51238,49517],{"class":85},[68,51240,2007],{"class":78},[68,51242,49522],{"class":85},[68,51244,2007],{"class":78},[68,51246,49527],{"class":85},[68,51248,6147],{"class":78},[68,51250,51251],{"class":70,"line":3165},[68,51252,49534],{"class":302},[68,51254,51255,51257,51259],{"class":70,"line":3170},[68,51256,49539],{"class":78},[68,51258,1685],{"class":316},[68,51260,49544],{"class":78},[68,51262,51263],{"class":70,"line":3184},[68,51264,49549],{"class":302},[68,51266,51267,51269,51271,51273,51275],{"class":70,"line":3189},[68,51268,49554],{"class":78},[68,51270,32985],{"class":85},[68,51272,2007],{"class":78},[68,51274,32985],{"class":85},[68,51276,44106],{"class":78},[68,51278,51279],{"class":70,"line":3218},[68,51280,49567],{"class":302},[68,51282,51283],{"class":70,"line":3223},[68,51284,49572],{"class":78},[68,51286,51287],{"class":70,"line":3240},[68,51288,49577],{"class":78},[68,51290,51291],{"class":70,"line":3245},[68,51292,49582],{"class":302},[68,51294,51295],{"class":70,"line":3250},[68,51296,49587],{"class":302},[68,51298,51299],{"class":70,"line":3255},[68,51300,3890],{"emptyLinePlaceholder":1567},[68,51302,51303],{"class":70,"line":3269},[68,51304,49596],{"class":302},[68,51306,51307],{"class":70,"line":3274},[68,51308,49601],{"class":302},[68,51310,51311,51313,51315,51317,51319,51321,51323,51325],{"class":70,"line":4067},[68,51312,35449],{"class":78},[68,51314,1685],{"class":316},[68,51316,49610],{"class":78},[68,51318,49613],{"class":85},[68,51320,2007],{"class":78},[68,51322,49618],{"class":6705},[68,51324,1685],{"class":316},[68,51326,49623],{"class":78},[68,51328,51329,51331,51333,51335,51337,51339],{"class":70,"line":4081},[68,51330,35506],{"class":78},[68,51332,1685],{"class":316},[68,51334,33018],{"class":78},[68,51336,33021],{"class":6705},[68,51338,1685],{"class":316},[68,51340,35517],{"class":78},[68,51342,51343],{"class":70,"line":4089},[68,51344,35522],{"class":302},[68,51346,51347,51349,51351,51353],{"class":70,"line":4094},[68,51348,35527],{"class":6705},[68,51350,1685],{"class":316},[68,51352,1846],{"class":85},[68,51354,32950],{"class":78},[68,51356,51357,51359,51361,51363],{"class":70,"line":4100},[68,51358,35538],{"class":6705},[68,51360,1685],{"class":316},[68,51362,32960],{"class":85},[68,51364,32950],{"class":78},[68,51366,51367,51369,51371,51373],{"class":70,"line":4106},[68,51368,35549],{"class":6705},[68,51370,1685],{"class":316},[68,51372,1248],{"class":85},[68,51374,1646],{"class":78},[68,51376,51377,51379],{"class":70,"line":4111},[68,51378,5580],{"class":316},[68,51380,35562],{"class":78},[68,51382,51383],{"class":70,"line":9437},[68,51384,3890],{"emptyLinePlaceholder":1567},[68,51386,51387],{"class":70,"line":9461},[68,51388,35571],{"class":302},[68,51390,51391,51393,51395],{"class":70,"line":9466},[68,51392,33431],{"class":316},[68,51394,35578],{"class":74},[68,51396,35581],{"class":78},[68,51398,51399],{"class":70,"line":9472},[68,51400,35586],{"class":302},[68,51402,51403,51405,51407,51409,51411,51413,51415],{"class":70,"line":9499},[68,51404,32721],{"class":78},[68,51406,1685],{"class":316},[68,51408,32728],{"class":1742},[68,51410,3195],{"class":316},[68,51412,32733],{"class":78},[68,51414,3192],{"class":316},[68,51416,35603],{"class":1742},[68,51418,51419,51421,51423],{"class":70,"line":9504},[68,51420,32773],{"class":78},[68,51422,1685],{"class":316},[68,51424,33773],{"class":78},[68,51426,51427],{"class":70,"line":9510},[68,51428,3890],{"emptyLinePlaceholder":1567},[68,51430,51431],{"class":70,"line":9522},[68,51432,35620],{"class":302},[68,51434,51435,51437,51439],{"class":70,"line":9534},[68,51436,35625],{"class":78},[68,51438,1685],{"class":316},[68,51440,33826],{"class":85},[68,51442,51443,51445,51447],{"class":70,"line":9546},[68,51444,35634],{"class":78},[68,51446,1685],{"class":316},[68,51448,4575],{"class":85},[68,51450,51451],{"class":70,"line":11204},[68,51452,3890],{"emptyLinePlaceholder":1567},[68,51454,51455],{"class":70,"line":11229},[68,51456,35647],{"class":302},[68,51458,51459],{"class":70,"line":11252},[68,51460,35652],{"class":302},[68,51462,51463],{"class":70,"line":11276},[68,51464,35657],{"class":302},[68,51466,51467,51469],{"class":70,"line":11281},[68,51468,35662],{"class":316},[68,51470,34368],{"class":78},[68,51472,51473],{"class":70,"line":11286},[68,51474,35669],{"class":302},[68,51476,51477,51479,51481,51483],{"class":70,"line":11291},[68,51478,4893],{"class":316},[68,51480,35676],{"class":78},[68,51482,27529],{"class":316},[68,51484,35681],{"class":78},[68,51486,51487,51489,51491],{"class":70,"line":11300},[68,51488,35686],{"class":78},[68,51490,1685],{"class":316},[68,51492,35691],{"class":78},[68,51494,51495,51497,51499],{"class":70,"line":11305},[68,51496,35696],{"class":78},[68,51498,1685],{"class":316},[68,51500,35701],{"class":78},[68,51502,51503],{"class":70,"line":11311},[68,51504,35706],{"class":302},[68,51506,51507],{"class":70,"line":11332},[68,51508,34359],{"class":78},[68,51510,51511],{"class":70,"line":11338},[68,51512,35715],{"class":302},[68,51514,51515,51517,51519],{"class":70,"line":11352},[68,51516,34144],{"class":78},[68,51518,1685],{"class":316},[68,51520,35724],{"class":78},[68,51522,51523],{"class":70,"line":11358},[68,51524,35729],{"class":302},[68,51526,51527,51529,51531,51533,51535,51537,51539],{"class":70,"line":11385},[68,51528,34161],{"class":78},[68,51530,1685],{"class":316},[68,51532,34166],{"class":78},[68,51534,34169],{"class":6705},[68,51536,1685],{"class":316},[68,51538,1846],{"class":85},[68,51540,1646],{"class":78},[68,51542,51543],{"class":70,"line":11394},[68,51544,35750],{"class":302},[68,51546,51547],{"class":70,"line":11400},[68,51548,35755],{"class":302},[68,51550,51551],{"class":70,"line":11408},[68,51552,35760],{"class":302},[68,51554,51555,51557,51559,51561,51563],{"class":70,"line":11413},[68,51556,35765],{"class":78},[68,51558,10965],{"class":316},[68,51560,34271],{"class":78},[68,51562,4439],{"class":316},[68,51564,35774],{"class":78},[68,51566,51567],{"class":70,"line":18091},[68,51568,35779],{"class":302},[68,51570,51571,51573,51575,51577,51579],{"class":70,"line":18097},[68,51572,35784],{"class":78},[68,51574,10965],{"class":316},[68,51576,35789],{"class":78},[68,51578,1248],{"class":85},[68,51580,1646],{"class":78},[68,51582,51583],{"class":70,"line":18120},[68,51584,3890],{"emptyLinePlaceholder":1567},[68,51586,51587],{"class":70,"line":18126},[68,51588,35802],{"class":302},[68,51590,51591,51593,51595,51597,51599],{"class":70,"line":18149},[68,51592,35807],{"class":78},[68,51594,1685],{"class":316},[68,51596,35812],{"class":78},[68,51598,2212],{"class":316},[68,51600,35817],{"class":78},[68,51602,51603],{"class":70,"line":18163},[68,51604,35822],{"class":302},[68,51606,51607,51609,51611,51613],{"class":70,"line":18183},[68,51608,33935],{"class":85},[68,51610,1640],{"class":78},[68,51612,35831],{"class":1742},[68,51614,35834],{"class":78},[68,51616,51617],{"class":70,"line":18189},[68,51618,3890],{"emptyLinePlaceholder":1567},[68,51620,51621],{"class":70,"line":18200},[68,51622,35843],{"class":302},[68,51624,51625,51627,51629,51631,51633],{"class":70,"line":18223},[68,51626,3023],{"class":316},[68,51628,32704],{"class":85},[68,51630,4439],{"class":316},[68,51632,32709],{"class":1742},[68,51634,5229],{"class":78},[68,51636,51637],{"class":70,"line":18245},[68,51638,35860],{"class":302},[68,51640,51641,51643,51645],{"class":70,"line":18250},[68,51642,32773],{"class":78},[68,51644,1685],{"class":316},[68,51646,46035],{"class":78},[68,51648,51649],{"class":70,"line":18256},[68,51650,35873],{"class":302},[68,51652,51653],{"class":70,"line":18270},[68,51654,35878],{"class":302},[68,51656,51657,51659,51661],{"class":70,"line":18283},[68,51658,35883],{"class":78},[68,51660,35886],{"class":1742},[68,51662,31981],{"class":78},[68,51664,51665],{"class":70,"line":18288},[68,51666,35893],{"class":302},[68,51668,51669,51671,51673],{"class":70,"line":18302},[68,51670,35506],{"class":78},[68,51672,1685],{"class":316},[68,51674,35902],{"class":78},[68,51676,51677],{"class":70,"line":18307},[68,51678,35907],{"class":302},[68,51680,51681],{"class":70,"line":18313},[68,51682,35912],{"class":78},[68,51684,51685],{"class":70,"line":18318},[68,51686,3890],{"emptyLinePlaceholder":1567},[68,51688,51689],{"class":70,"line":18332},[68,51690,35921],{"class":302},[68,51692,51693],{"class":70,"line":18337},[68,51694,35926],{"class":302},[68,51696,51697,51699,51701,51703,51705,51707,51709],{"class":70,"line":18342},[68,51698,32721],{"class":78},[68,51700,1685],{"class":316},[68,51702,32728],{"class":1742},[68,51704,3195],{"class":316},[68,51706,32733],{"class":78},[68,51708,3192],{"class":316},[68,51710,35603],{"class":1742},[68,51712,51713,51715,51717],{"class":70,"line":18356},[68,51714,32773],{"class":78},[68,51716,1685],{"class":316},[68,51718,33773],{"class":78},[68,51720,51721],{"class":70,"line":18368},[68,51722,35955],{"class":302},[68,51724,51725],{"class":70,"line":18373},[68,51726,35960],{"class":302},[68,51728,51729,51731,51733,51735,51738,51740,51743],{"class":70,"line":18386},[68,51730,35965],{"class":78},[68,51732,1685],{"class":316},[68,51734,2517],{"class":78},[68,51736,51737],{"class":1742},"'猫'",[68,51739,2007],{"class":78},[68,51741,51742],{"class":1742},"'狗'",[68,51744,34730],{"class":78},[68,51746,51747,51749],{"class":70,"line":18391},[68,51748,35662],{"class":316},[68,51750,34368],{"class":78},[68,51752,51753],{"class":70,"line":18396},[68,51754,36030],{"class":302},[68,51756,51757,51759,51761,51763],{"class":70,"line":18401},[68,51758,4893],{"class":316},[68,51760,36037],{"class":78},[68,51762,27529],{"class":316},[68,51764,35681],{"class":78},[68,51766,51767,51769,51771],{"class":70,"line":18414},[68,51768,34094],{"class":78},[68,51770,1685],{"class":316},[68,51772,34099],{"class":78},[68,51774,51775,51777,51779],{"class":70,"line":18419},[68,51776,34109],{"class":78},[68,51778,1685],{"class":316},[68,51780,34114],{"class":78},[68,51782,51783],{"class":70,"line":34117},[68,51784,3890],{"emptyLinePlaceholder":1567},[68,51786,51787],{"class":70,"line":34123},[68,51788,36066],{"class":302},[68,51790,51791],{"class":70,"line":34129},[68,51792,34359],{"class":78},[68,51794,51795],{"class":70,"line":34135},[68,51796,36075],{"class":302},[68,51798,51799,51801,51803],{"class":70,"line":34141},[68,51800,34144],{"class":78},[68,51802,1685],{"class":316},[68,51804,34149],{"class":78},[68,51806,51807],{"class":70,"line":34152},[68,51808,36088],{"class":302},[68,51810,51811,51813,51815,51817,51819,51821,51823],{"class":70,"line":34158},[68,51812,34161],{"class":78},[68,51814,1685],{"class":316},[68,51816,34166],{"class":78},[68,51818,34169],{"class":6705},[68,51820,1685],{"class":316},[68,51822,1846],{"class":85},[68,51824,1646],{"class":78},[68,51826,51827],{"class":70,"line":34178},[68,51828,36109],{"class":302},[68,51830,51831,51833,51835],{"class":70,"line":34184},[68,51832,36114],{"class":78},[68,51834,1685],{"class":316},[68,51836,36119],{"class":78},[68,51838,51839,51841,51843],{"class":70,"line":34195},[68,51840,36124],{"class":78},[68,51842,1685],{"class":316},[68,51844,36129],{"class":78},[68,51846,51847,51849,51851,51853,51855,51857,51859,51861],{"class":70,"line":34201},[68,51848,36134],{"class":85},[68,51850,1640],{"class":78},[68,51852,36139],{"class":1742},[68,51854,36142],{"class":78},[68,51856,36145],{"class":1742},[68,51858,2007],{"class":78},[68,51860,36150],{"class":1742},[68,51862,36153],{"class":78},[1553,51864,51865],{},"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":63,"searchDepth":82,"depth":82,"links":51867},[51868,51869,51870,51871],{"id":32075,"depth":98,"text":32076},{"id":39323,"depth":98,"text":39324},{"id":42756,"depth":98,"text":42757},{"id":46765,"depth":98,"text":46766},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32067,"description":1564},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51878,"title":51879,"body":51880,"description":1564,"extension":1565,"meta":51887,"navigation":1567,"path":51888,"seo":51889,"stem":51890,"__hash__":51891},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51881,"toc":51885},[51882],[10,51883,51879],{"id":51884},"_3yolo模型学习",{"title":63,"searchDepth":82,"depth":82,"links":51886},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51879,"description":1564},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51893,"title":51894,"body":51895,"description":51902,"extension":1565,"meta":51903,"navigation":1567,"path":51905,"seo":51906,"stem":51907,"__hash__":51908},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51896,"toc":51900},[51897],[170,51898,51899],{},"yolo模型还未补充",{"title":63,"searchDepth":82,"depth":82,"links":51901},[],"深度学习学习",{"category":51904},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51894,"description":51902},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51910,"title":51911,"body":51912,"description":1564,"extension":1565,"meta":51937,"navigation":1567,"path":51938,"seo":51939,"stem":51940,"__hash__":51941},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51913,"toc":51935},[51914,51917,51920,51925,51932],[10,51915,51911],{"id":51916},"_1工具",[170,51918,51919],{},"提示错误插件：有问题会提前报错",[170,51921,51922],{},[801,51923],{"alt":63,"src":51924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[170,51926,51927],{},[1867,51928,51931],{"href":51929,"rel":51930},"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",[25350],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[170,51933,51934],{},"alt键加上下箭头可以实现语句的移动",{"title":63,"searchDepth":82,"depth":82,"links":51936},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51911,"description":1564},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51943,"title":51944,"body":51945,"description":1564,"extension":1565,"meta":54807,"navigation":1567,"path":54808,"seo":54809,"stem":54810,"__hash__":54811},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51946,"toc":54758},[51947,51950,51954,51958,51963,51966,51971,51975,51982,51987,51994,51999,52006,52011,52015,52020,52023,52027,52032,52036,52041,52044,52047,52050,52053,52056,52059,52062,52065,52070,52075,52080,52084,52087,52090,52094,52099,52102,52110,52115,52132,52140,52145,52150,52155,52160,52165,52168,52173,52178,52182,52191,52196,52201,52205,52210,52213,52217,52222,52230,52235,52240,52243,52248,52253,52258,52261,52264,52267,52272,52277,52280,52285,52288,52293,52296,52299,52302,52307,52310,52313,52328,52333,52338,52343,52346,52349,52352,52366,52369,52374,52379,52382,52385,52388,52391,52394,52397,52400,52404,52408,52413,52417,52420,52425,52430,52433,52438,52441,52445,52450,52453,52456,52459,52462,52465,52468,52471,52474,52477,52481,52486,52491,52496,52499,52502,52506,52511,52514,52518,52521,52524,52529,52532,52535,52539,52543,52546,52551,52556,52559,52588,52593,52598,52603,52608,52612,52617,52621,52626,52629,52633,52637,52642,52646,52651,52656,52660,52665,52668,52670,52673,52678,52682,52687,52691,52695,52700,52705,52710,52715,52719,52724,52729,52734,52737,52740,52745,52748,52753,52758,52763,52768,52772,53577,53581,53924,53929,53932,53935,53938,53941,53944,53947,53950,53953,53955,53958,53960,53963,53967,53972,53975,53978,53981,53985,53990,53995,54015,54018,54022,54027,54032,54049,54053,54082,54086,54108,54110,54149,54157,54163,54167,54170,54173,54178,54183,54186,54189,54192,54197,54202,54205,54208,54211,54214,54217,54220,54223,54226,54229,54232,54235,54237,54240,54243,54246,54249,54252,54255,54258,54261,54265,54270,54273,54278,54281,54284,54287,54290,54293,54296,54299,54301,54304,54307,54310,54313,54316,54319,54323,54326,54335,54338,54343,54346,54351,54354,54357,54360,54363,54366,54369,54372,54376,54380,54383,54386,54391,54396,54401,54405,54410,54415,54418,54421,54424,54427,54430,54435,54438,54443,54445,54450,54453,54457,54462,54465,54468,54473,54477,54480,54485,54488,54491,54520,54525,54528,54531,54534,54537,54540,54544,54547,54633,54637,54640,54645,54650,54657,54660,54663,54666,54669,54672,54677,54682,54685,54688,54691,54694,54697,54700,54703,54706,54709,54711,54714,54718,54723,54728,54733,54736,54741,54746,54749,54752,54755],[10,51948,51944],{"id":51949},"_2基础语法",[14,51951,51953],{"id":51952},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,51955,51957],{"id":51956},"_211-js组成","2.1.1 js组成",[263,51959,51960],{},[27,51961,51962],{},"js是编程语言，html和css不是编程语言，是标记语言",[170,51964,51965],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[263,51967,51968],{"start":82},[27,51969,51970],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,51972,51974],{"id":51973},"_212-js书写位置","2.1.2 js书写位置",[263,51976,51977],{},[27,51978,51979],{},[268,51980,51981],{},"内部 JavaScript",[170,51983,51984],{},[801,51985],{"alt":63,"src":51986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[263,51988,51989],{"start":82},[27,51990,51991],{},[268,51992,51993],{},"外部 JavaScript",[170,51995,51996],{},[801,51997],{"alt":63,"src":51998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[263,52000,52001],{"start":98},[27,52002,52003],{},[268,52004,52005],{},"内联 JavaScript",[170,52007,52008],{},[801,52009],{"alt":63,"src":52010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,52012,52014],{"id":52013},"_213-javascript注释","2.1.3 JavaScript注释",[170,52016,52017],{},[801,52018],{"alt":63,"src":52019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[170,52021,52022],{},"alt+shift+a一定要记住！",[19,52024,52026],{"id":52025},"_214-javascript结束符","2.1.4 JavaScript结束符",[170,52028,52029],{},[801,52030],{"alt":63,"src":52031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,52033,52035],{"id":52034},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[263,52037,52038],{},[27,52039,52040],{},"输出语法：",[170,52042,52043],{},"①document.write('要出的内容')",[170,52045,52046],{},"向body内输出内容；",[170,52048,52049],{},"如果输出的内容写的是标签，也会被解析cheng",[170,52051,52052],{},"②alert('要出的内容')",[170,52054,52055],{},"页面弹出警告对话框",[170,52057,52058],{},"③console.log('控制台打印')",[170,52060,52061],{},"控制台输出语法，程序员调试使用",[170,52063,52064],{},"输入log就行，自动生成：",[170,52066,52067],{},[801,52068],{"alt":63,"src":52069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[263,52071,52072],{"start":82},[27,52073,52074],{},"输入语法：",[170,52076,52077],{},[801,52078],{"alt":63,"src":52079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,52081,52083],{"id":52082},"_2116-字面量","21.1.6 字面量",[170,52085,52086],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[170,52088,52089],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52091,52093],{"id":52092},"_22-变量","2.2 变量",[263,52095,52096],{},[27,52097,52098],{},"变量声明",[170,52100,52101],{},"let 变量名",[24,52103,52104,52107],{},[27,52105,52106],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[27,52108,52109],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[263,52111,52112],{"start":82},[27,52113,52114],{},"变量赋值",[58,52116,52120],{"className":52117,"code":52118,"language":52119,"meta":63,"style":63},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[65,52121,52122,52127],{"__ignoreMap":63},[68,52123,52124],{"class":70,"line":71},[68,52125,52126],{"class":78},"let age\n",[68,52128,52129],{"class":70,"line":82},[68,52130,52131],{"class":78},"age=18\n",[263,52133,52134,52137],{"start":98},[27,52135,52136],{},"连这些（变量的初始化）：let age=18",[27,52138,52139],{},"更新变量",[170,52141,52142],{},[801,52143],{"alt":63,"src":52144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[263,52146,52147],{"start":112},[27,52148,52149],{},"声明多个变量",[170,52151,52152],{},[801,52153],{"alt":63,"src":52154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[263,52156,52157],{"start":124},[27,52158,52159],{},"变量命名规则与规范",[170,52161,52162],{},[801,52163],{"alt":63,"src":52164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[170,52166,52167],{},"遵守小驼峰！",[263,52169,52170],{"start":1496},[27,52171,52172],{},"变量拓展-let和var的区别",[170,52174,52175],{},[801,52176],{"alt":63,"src":52177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52179,52181],{"id":52180},"_23-数组","2.3 数组",[58,52183,52185],{"className":52117,"code":52184,"language":52119,"meta":63,"style":63},"let arr = []\n",[65,52186,52187],{"__ignoreMap":63},[68,52188,52189],{"class":70,"line":71},[68,52190,52184],{"class":78},[170,52192,52193],{},[801,52194],{"alt":63,"src":52195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[170,52197,52198],{},[801,52199],{"alt":63,"src":52200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52202,52204],{"id":52203},"_24-常量","2.4 常量",[170,52206,52207],{},[801,52208],{"alt":63,"src":52209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[170,52211,52212],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52214,52216],{"id":52215},"_25-数据类型","2.5 数据类型",[170,52218,52219],{},[801,52220],{"alt":63,"src":52221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[263,52223,52224,52227],{},[27,52225,52226],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[27,52228,52229],{},"算数运算符：",[170,52231,52232],{},[801,52233],{"alt":63,"src":52234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[263,52236,52237],{"start":98},[27,52238,52239],{},"数字类型（Number）",[170,52241,52242],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[170,52244,52245],{},[801,52246],{"alt":63,"src":52247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[263,52249,52250],{"start":104},[27,52251,52252],{},"字符串类型（string）",[170,52254,52255],{},[801,52256],{"alt":63,"src":52257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[170,52259,52260],{},"反引号也是可以使用的",[170,52262,52263],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[170,52265,52266],{},"例如：document.write(\"我今年\"+age+\"岁\")",[263,52268,52269],{"start":112},[27,52270,52271],{},"模板字符串",[170,52273,52274],{},[801,52275],{"alt":63,"src":52276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[170,52278,52279],{},"类似于python的字符串格式化",[263,52281,52282],{"start":124},[27,52283,52284],{},"布尔类型",[170,52286,52287],{},"true 和 false",[263,52289,52290],{"start":1496},[27,52291,52292],{},"未定义类型（underfined）",[170,52294,52295],{},"表示没有赋值",[170,52297,52298],{},"未定义类型是比较特殊的类型，只有一个值undefined",[170,52300,52301],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[263,52303,52304],{"start":1502},[27,52305,52306],{},"null（空类型）",[170,52308,52309],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[170,52311,52312],{},"赋值了，但是内容为空",[58,52314,52316],{"className":52117,"code":52315,"language":52119,"meta":63,"style":63},"typeof null\n输出的是'object'，是一个对象数据类型\n",[65,52317,52318,52323],{"__ignoreMap":63},[68,52319,52320],{"class":70,"line":71},[68,52321,52322],{"class":78},"typeof null\n",[68,52324,52325],{"class":70,"line":82},[68,52326,52327],{"class":78},"输出的是'object'，是一个对象数据类型\n",[263,52329,52330],{"start":1510},[27,52331,52332],{},"控制台检测数据类型",[170,52334,52335],{},[801,52336],{"alt":63,"src":52337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[263,52339,52340],{"start":1521},[27,52341,52342],{},"类型转换",[170,52344,52345],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[170,52347,52348],{},"转换方式：隐式转换和显示转换",[170,52350,52351],{},"①隐式转换",[24,52353,52354,52357,52360,52363],{},[27,52355,52356],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[27,52358,52359],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[27,52361,52362],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[27,52364,52365],{},"任何数据和字符串相加结果都是字符串",[170,52367,52368],{},"②显示转换",[170,52370,52371],{},[801,52372],{"alt":63,"src":52373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[170,52375,52376],{},[801,52377],{"alt":63,"src":52378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[170,52380,52381],{},"在输入的时候要用好隐式转换，简单写起来",[170,52383,52384],{},"let num = +prompt(’请输入数字：‘)",[170,52386,52387],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[170,52389,52390],{},"console.log(parseInt('12.333px'))",[170,52392,52393],{},"输出为：12",[170,52395,52396],{},"console.log(parseInt('a'a'a12.333px'))",[170,52398,52399],{},"输出：NaN",[14,52401,52403],{"id":52402},"_26-运算符","2.6 运算符",[19,52405,52407],{"id":52406},"_261-赋值运算符","2.6.1 赋值运算符",[170,52409,52410],{},[801,52411],{"alt":63,"src":52412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,52414,52416],{"id":52415},"_262-一元运算符","2.6.2 一元运算符",[170,52418,52419],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[170,52421,52422],{},[801,52423],{"alt":63,"src":52424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[170,52426,52427],{},[801,52428],{"alt":63,"src":52429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[170,52431,52432],{},"两者的区别：",[170,52434,52435],{},[801,52436],{"alt":63,"src":52437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[170,52439,52440],{},"前置先自加；后置后加，代码执行完之后再加",[19,52442,52444],{"id":52443},"_263-比较运算符","2.6.3 比较运算符",[170,52446,52447],{},[801,52448],{"alt":63,"src":52449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[170,52451,52452],{},"比较运算符也有隐式转换",[170,52454,52455],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[170,52457,52458],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[170,52460,52461],{},"要使用三等，开发的时候",[170,52463,52464],{},"NaN不等于任何人，包括它自己",[170,52466,52467],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[170,52469,52470],{},"7\u002F10=0.7",[170,52472,52473],{},"最后：0.5+0.2=0.7",[170,52475,52476],{},"字符串比较，比较的是字符对应的ASCII码",[19,52478,52480],{"id":52479},"_264-逻辑运算符","2.6.4 逻辑运算符",[170,52482,52483],{},[801,52484],{"alt":63,"src":52485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[170,52487,52488],{},[801,52489],{"alt":63,"src":52490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[170,52492,52493],{},[801,52494],{"alt":63,"src":52495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[170,52497,52498],{},"上述题目选D",[170,52500,52501],{},"与真2假1；或真1假2",[19,52503,52505],{"id":52504},"_265-运算符优先级","2.6.5 运算符优先级",[170,52507,52508],{},[801,52509],{"alt":63,"src":52510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[170,52512,52513],{},"先算逻辑与，后算逻辑或",[14,52515,52517],{"id":52516},"_27-语句","2.7 语句",[170,52519,52520],{},"表达式：是可以被求值的代码，会有结果给我们",[170,52522,52523],{},"语句：语句是可以被执行的代码，例如prompt()",[170,52525,52526],{},[801,52527],{"alt":63,"src":52528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[170,52530,52531],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[170,52533,52534],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,52536,52538],{"id":52537},"_271-分支语句","2.7.1 分支语句",[245,52540,52542],{"id":52541},"_2711-if分支语句","2.7.1.1 if分支语句",[170,52544,52545],{},"if语句单行简单的话，可以不写{}，写在一行就行",[263,52547,52548],{},[27,52549,52550],{},"单分支语句",[170,52552,52553],{},[801,52554],{"alt":63,"src":52555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[170,52557,52558],{},"除了0，所有数字都为真",[58,52560,52562],{"className":52117,"code":52561,"language":52119,"meta":63,"style":63},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[65,52563,52564,52569,52574,52579,52583],{"__ignoreMap":63},[68,52565,52566],{"class":70,"line":71},[68,52567,52568],{"class":78},"if（0) {\n",[68,52570,52571],{"class":70,"line":82},[68,52572,52573],{"class":78},"    let a=1\n",[68,52575,52576],{"class":70,"line":98},[68,52577,52578],{"class":78},"    alert(typeof a)\n",[68,52580,52581],{"class":70,"line":104},[68,52582,101],{"class":78},[68,52584,52585],{"class":70,"line":112},[68,52586,52587],{"class":78},"不输出，括号为假\n",[263,52589,52590],{"start":82},[27,52591,52592],{},"双分支语句",[170,52594,52595],{},[801,52596],{"alt":63,"src":52597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[263,52599,52600],{"start":98},[27,52601,52602],{},"多分支语句",[170,52604,52605],{},[801,52606],{"alt":63,"src":52607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[245,52609,52611],{"id":52610},"_2712-三元运算符","2.7.1.2 三元运算符",[170,52613,52614],{},[801,52615],{"alt":63,"src":52616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[245,52618,52620],{"id":52619},"_2713-switch语句","2.7.1.3 switch语句",[170,52622,52623],{},[801,52624],{"alt":63,"src":52625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[170,52627,52628],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,52630,52632],{"id":52631},"_272-循环语句","2.7.2 循环语句",[245,52634,52636],{"id":52635},"_2721-断点演示","2.7.2.1 断点演示",[170,52638,52639],{},[801,52640],{"alt":63,"src":52641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[245,52643,52645],{"id":52644},"_2722-while循环","2.7.2.2 while循环",[170,52647,52648],{},[801,52649],{"alt":63,"src":52650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[170,52652,52653],{},[801,52654],{"alt":63,"src":52655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[245,52657,52659],{"id":52658},"_2723-for循环","2.7.2.3 for循环",[170,52661,52662],{},[801,52663],{"alt":63,"src":52664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[170,52666,52667],{},"for(;;) {",[170,52669,2573],{},[170,52671,52672],{},"表示无限循环",[170,52674,52675],{},[801,52676],{"alt":63,"src":52677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[245,52679,52681],{"id":52680},"_2724-循环的退出","2.7.2.4 循环的退出",[170,52683,52684],{},[801,52685],{"alt":63,"src":52686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52688,52690],{"id":52689},"_28-数组","2.8 数组",[19,52692,52694],{"id":52693},"_281-基础认识","2.8.1 基础认识",[170,52696,52697],{},[801,52698],{"alt":63,"src":52699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[170,52701,52702],{},[801,52703],{"alt":63,"src":52704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[170,52706,52707],{},[801,52708],{"alt":63,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[170,52711,52712],{},[801,52713],{"alt":63,"src":52714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,52716,52718],{"id":52717},"_282-操作数组","2.8.2 操作数组",[170,52720,52721],{},[801,52722],{"alt":63,"src":52723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[263,52725,52726],{},[27,52727,52728],{},"添加元素",[170,52730,52731],{},[801,52732],{"alt":63,"src":52733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[170,52735,52736],{},"console.log(arr.push('green'))",[170,52738,52739],{},"输出结果：为新数组的长度",[170,52741,52742],{},[801,52743],{"alt":63,"src":52744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[170,52746,52747],{},"push用的非常多，一定要记住",[263,52749,52750],{},[27,52751,52752],{},"删除元素",[170,52754,52755],{},[801,52756],{"alt":63,"src":52757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[170,52759,52760],{},[801,52761],{"alt":63,"src":52762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[170,52764,52765],{},[801,52766],{"alt":63,"src":52767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,52769,52771],{"id":52770},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[58,52773,52775],{"className":52117,"code":52774,"language":52119,"meta":63,"style":63},"\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",[65,52776,52777,52792,52808,52812,52821,52839,52863,52885,52899,52907,52914,52925,52936,52940,52944,52951,52963,52977,52990,53009,53026,53041,53053,53065,53077,53081,53085,53096,53106,53118,53130,53142,53153,53157,53161,53173,53177,53191,53195,53199,53210,53224,53236,53250,53254,53263,53272,53276,53285,53289,53298,53303,53308,53321,53349,53354,53359,53384,53389,53393,53398,53403,53418,53422,53427,53457,53469,53485,53501,53515,53520,53527,53531,53536,53549,53557,53565,53569],{"__ignoreMap":63},[68,52778,52779,52782,52786,52789],{"class":70,"line":71},[68,52780,52781],{"class":78},"\u003C!",[68,52783,52785],{"class":52784},"s9eBZ","DOCTYPE",[68,52787,52788],{"class":74}," html",[68,52790,52791],{"class":78},">\n",[68,52793,52794,52796,52798,52801,52803,52806],{"class":70,"line":82},[68,52795,2537],{"class":78},[68,52797,52119],{"class":52784},[68,52799,52800],{"class":74}," lang",[68,52802,1685],{"class":78},[68,52804,52805],{"class":1742},"\"en\"",[68,52807,52791],{"class":78},[68,52809,52810],{"class":70,"line":98},[68,52811,3890],{"emptyLinePlaceholder":1567},[68,52813,52814,52816,52819],{"class":70,"line":104},[68,52815,2537],{"class":78},[68,52817,52818],{"class":52784},"head",[68,52820,52791],{"class":78},[68,52822,52823,52826,52829,52832,52834,52837],{"class":70,"line":112},[68,52824,52825],{"class":78},"    \u003C",[68,52827,52828],{"class":52784},"meta",[68,52830,52831],{"class":74}," charset",[68,52833,1685],{"class":78},[68,52835,52836],{"class":1742},"\"UTF-8\"",[68,52838,52791],{"class":78},[68,52840,52841,52843,52845,52848,52850,52853,52856,52858,52861],{"class":70,"line":124},[68,52842,52825],{"class":78},[68,52844,52828],{"class":52784},[68,52846,52847],{"class":74}," http-equiv",[68,52849,1685],{"class":78},[68,52851,52852],{"class":1742},"\"X-UA-Compatible\"",[68,52854,52855],{"class":74}," content",[68,52857,1685],{"class":78},[68,52859,52860],{"class":1742},"\"IE=edge\"",[68,52862,52791],{"class":78},[68,52864,52865,52867,52869,52871,52873,52876,52878,52880,52883],{"class":70,"line":1496},[68,52866,52825],{"class":78},[68,52868,52828],{"class":52784},[68,52870,16408],{"class":74},[68,52872,1685],{"class":78},[68,52874,52875],{"class":1742},"\"viewport\"",[68,52877,52855],{"class":74},[68,52879,1685],{"class":78},[68,52881,52882],{"class":1742},"\"width=device-width, initial-scale=1.0\"",[68,52884,52791],{"class":78},[68,52886,52887,52889,52892,52895,52897],{"class":70,"line":1502},[68,52888,52825],{"class":78},[68,52890,52891],{"class":52784},"title",[68,52893,52894],{"class":78},">Document\u003C\u002F",[68,52896,52891],{"class":52784},[68,52898,52791],{"class":78},[68,52900,52901,52903,52905],{"class":70,"line":1510},[68,52902,52825],{"class":78},[68,52904,1553],{"class":52784},[68,52906,52791],{"class":78},[68,52908,52909,52912],{"class":70,"line":1521},[68,52910,52911],{"class":52784},"        *",[68,52913,79],{"class":78},[68,52915,52916,52919,52921,52923],{"class":70,"line":3103},[68,52917,52918],{"class":85},"            margin",[68,52920,89],{"class":78},[68,52922,1248],{"class":85},[68,52924,95],{"class":78},[68,52926,52927,52930,52932,52934],{"class":70,"line":3108},[68,52928,52929],{"class":85},"            padding",[68,52931,89],{"class":78},[68,52933,1248],{"class":85},[68,52935,95],{"class":78},[68,52937,52938],{"class":70,"line":3114},[68,52939,4019],{"class":78},[68,52941,52942],{"class":70,"line":3119},[68,52943,3890],{"emptyLinePlaceholder":1567},[68,52945,52946,52949],{"class":70,"line":3133},[68,52947,52948],{"class":74},"        .box",[68,52950,79],{"class":78},[68,52952,52953,52956,52958,52961],{"class":70,"line":3138},[68,52954,52955],{"class":85},"            display",[68,52957,89],{"class":78},[68,52959,52960],{"class":85},"flex",[68,52962,95],{"class":78},[68,52964,52965,52968,52970,52973,52975],{"class":70,"line":3144},[68,52966,52967],{"class":85},"            width",[68,52969,89],{"class":78},[68,52971,52972],{"class":85},"700",[68,52974,317],{"class":316},[68,52976,95],{"class":78},[68,52978,52979,52982,52984,52986,52988],{"class":70,"line":3165},[68,52980,52981],{"class":85},"            height",[68,52983,89],{"class":78},[68,52985,5463],{"class":85},[68,52987,317],{"class":316},[68,52989,95],{"class":78},[68,52991,52992,52995,52997,52999,53001,53004,53007],{"class":70,"line":3170},[68,52993,52994],{"class":85},"            border-left",[68,52996,89],{"class":78},[68,52998,1846],{"class":85},[68,53000,317],{"class":316},[68,53002,53003],{"class":85}," solid",[68,53005,53006],{"class":85}," pink",[68,53008,95],{"class":78},[68,53010,53011,53014,53016,53018,53020,53022,53024],{"class":70,"line":3184},[68,53012,53013],{"class":85},"            border-bottom",[68,53015,89],{"class":78},[68,53017,1846],{"class":85},[68,53019,317],{"class":316},[68,53021,53003],{"class":85},[68,53023,53006],{"class":85},[68,53025,95],{"class":78},[68,53027,53028,53030,53032,53034,53036,53039],{"class":70,"line":3189},[68,53029,52918],{"class":85},[68,53031,89],{"class":78},[68,53033,2284],{"class":85},[68,53035,317],{"class":316},[68,53037,53038],{"class":85}," auto",[68,53040,95],{"class":78},[68,53042,53043,53046,53048,53051],{"class":70,"line":3218},[68,53044,53045],{"class":85},"            justify-content",[68,53047,89],{"class":78},[68,53049,53050],{"class":85},"space-around",[68,53052,95],{"class":78},[68,53054,53055,53058,53060,53063],{"class":70,"line":3223},[68,53056,53057],{"class":85},"            align-items",[68,53059,89],{"class":78},[68,53061,53062],{"class":85},"flex-end",[68,53064,95],{"class":78},[68,53066,53067,53070,53072,53075],{"class":70,"line":3240},[68,53068,53069],{"class":85},"            text-align",[68,53071,89],{"class":78},[68,53073,53074],{"class":85},"center",[68,53076,95],{"class":78},[68,53078,53079],{"class":70,"line":3245},[68,53080,4019],{"class":78},[68,53082,53083],{"class":70,"line":3250},[68,53084,3890],{"emptyLinePlaceholder":1567},[68,53086,53087,53089,53091,53094],{"class":70,"line":3255},[68,53088,52948],{"class":74},[68,53090,2587],{"class":316},[68,53092,53093],{"class":52784},"div",[68,53095,79],{"class":78},[68,53097,53098,53100,53102,53104],{"class":70,"line":3269},[68,53099,52955],{"class":85},[68,53101,89],{"class":78},[68,53103,52960],{"class":85},[68,53105,95],{"class":78},[68,53107,53108,53110,53112,53114,53116],{"class":70,"line":3274},[68,53109,52967],{"class":85},[68,53111,89],{"class":78},[68,53113,2284],{"class":85},[68,53115,317],{"class":316},[68,53117,95],{"class":78},[68,53119,53120,53123,53125,53128],{"class":70,"line":4067},[68,53121,53122],{"class":85},"            background-color",[68,53124,89],{"class":78},[68,53126,53127],{"class":85},"pink",[68,53129,95],{"class":78},[68,53131,53132,53135,53137,53140],{"class":70,"line":4081},[68,53133,53134],{"class":85},"            flex-direction",[68,53136,89],{"class":78},[68,53138,53139],{"class":85},"column",[68,53141,95],{"class":78},[68,53143,53144,53146,53148,53151],{"class":70,"line":4089},[68,53145,53045],{"class":85},[68,53147,89],{"class":78},[68,53149,53150],{"class":85},"space-between",[68,53152,95],{"class":78},[68,53154,53155],{"class":70,"line":4094},[68,53156,4019],{"class":78},[68,53158,53159],{"class":70,"line":4100},[68,53160,3890],{"emptyLinePlaceholder":1567},[68,53162,53163,53165,53168,53171],{"class":70,"line":4106},[68,53164,52948],{"class":74},[68,53166,53167],{"class":52784}," div",[68,53169,53170],{"class":52784}," span",[68,53172,79],{"class":78},[68,53174,53175],{"class":70,"line":4111},[68,53176,3890],{"emptyLinePlaceholder":1567},[68,53178,53179,53182,53184,53187,53189],{"class":70,"line":9437},[68,53180,53181],{"class":85},"            margin-top",[68,53183,89],{"class":78},[68,53185,53186],{"class":85},"-20",[68,53188,317],{"class":316},[68,53190,95],{"class":78},[68,53192,53193],{"class":70,"line":9461},[68,53194,4019],{"class":78},[68,53196,53197],{"class":70,"line":9466},[68,53198,3890],{"emptyLinePlaceholder":1567},[68,53200,53201,53203,53205,53208],{"class":70,"line":9472},[68,53202,52948],{"class":74},[68,53204,53167],{"class":52784},[68,53206,53207],{"class":52784}," h4",[68,53209,79],{"class":78},[68,53211,53212,53215,53217,53220,53222],{"class":70,"line":9499},[68,53213,53214],{"class":85},"            margin-bottom",[68,53216,89],{"class":78},[68,53218,53219],{"class":85},"-35",[68,53221,317],{"class":316},[68,53223,95],{"class":78},[68,53225,53226,53228,53230,53232,53234],{"class":70,"line":9504},[68,53227,52967],{"class":85},[68,53229,89],{"class":78},[68,53231,1985],{"class":85},[68,53233,317],{"class":316},[68,53235,95],{"class":78},[68,53237,53238,53241,53243,53246,53248],{"class":70,"line":9510},[68,53239,53240],{"class":85},"            margin-left",[68,53242,89],{"class":78},[68,53244,53245],{"class":85},"-10",[68,53247,317],{"class":316},[68,53249,95],{"class":78},[68,53251,53252],{"class":70,"line":9522},[68,53253,4019],{"class":78},[68,53255,53256,53259,53261],{"class":70,"line":9534},[68,53257,53258],{"class":78},"    \u003C\u002F",[68,53260,1553],{"class":52784},[68,53262,52791],{"class":78},[68,53264,53265,53268,53270],{"class":70,"line":9546},[68,53266,53267],{"class":78},"\u003C\u002F",[68,53269,52818],{"class":52784},[68,53271,52791],{"class":78},[68,53273,53274],{"class":70,"line":11204},[68,53275,3890],{"emptyLinePlaceholder":1567},[68,53277,53278,53280,53283],{"class":70,"line":11229},[68,53279,2537],{"class":78},[68,53281,53282],{"class":52784},"body",[68,53284,52791],{"class":78},[68,53286,53287],{"class":70,"line":11252},[68,53288,3890],{"emptyLinePlaceholder":1567},[68,53290,53291,53293,53296],{"class":70,"line":11276},[68,53292,52825],{"class":78},[68,53294,53295],{"class":52784},"script",[68,53297,52791],{"class":78},[68,53299,53300],{"class":70,"line":11281},[68,53301,53302],{"class":302},"        \u002F\u002F 1. 四次弹框效果\n",[68,53304,53305],{"class":70,"line":11286},[68,53306,53307],{"class":302},"        \u002F\u002F 声明一个新的数组\n",[68,53309,53310,53313,53316,53318],{"class":70,"line":11291},[68,53311,53312],{"class":316},"        let",[68,53314,53315],{"class":78}," arr ",[68,53317,1685],{"class":316},[68,53319,53320],{"class":78}," []\n",[68,53322,53323,53325,53327,53330,53332,53334,53336,53338,53340,53343,53345,53347],{"class":70,"line":11300},[68,53324,4893],{"class":316},[68,53326,3149],{"class":78},[68,53328,53329],{"class":316},"let",[68,53331,10926],{"class":78},[68,53333,1685],{"class":316},[68,53335,26604],{"class":85},[68,53337,10933],{"class":78},[68,53339,3079],{"class":316},[68,53341,53342],{"class":85}," 4",[68,53344,4704],{"class":78},[68,53346,3782],{"class":316},[68,53348,13930],{"class":78},[68,53350,53351],{"class":70,"line":11305},[68,53352,53353],{"class":302},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[68,53355,53356],{"class":70,"line":11311},[68,53357,53358],{"class":302},"            \u002F\u002F arr.push(num)\n",[68,53360,53361,53364,53367,53369,53372,53374,53377,53379,53382],{"class":70,"line":11332},[68,53362,53363],{"class":78},"            arr.",[68,53365,53366],{"class":74},"push",[68,53368,1640],{"class":78},[68,53370,53371],{"class":74},"prompt",[68,53373,1640],{"class":78},[68,53375,53376],{"class":1742},"`请输入第${",[68,53378,2070],{"class":78},[68,53380,53381],{"class":1742},"}季度的数据:`",[68,53383,31981],{"class":78},[68,53385,53386],{"class":70,"line":11338},[68,53387,53388],{"class":302},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[68,53390,53391],{"class":70,"line":11352},[68,53392,4019],{"class":78},[68,53394,53395],{"class":70,"line":11358},[68,53396,53397],{"class":302},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[68,53399,53400],{"class":70,"line":11385},[68,53401,53402],{"class":302},"        \u002F\u002F 盒子开头\n",[68,53404,53405,53408,53411,53413,53416],{"class":70,"line":11394},[68,53406,53407],{"class":78},"        document.",[68,53409,53410],{"class":74},"write",[68,53412,1640],{"class":78},[68,53414,53415],{"class":1742},"` \u003Cdiv class=\"box\">`",[68,53417,1646],{"class":78},[68,53419,53420],{"class":70,"line":11400},[68,53421,3890],{"emptyLinePlaceholder":1567},[68,53423,53424],{"class":70,"line":11408},[68,53425,53426],{"class":302},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[68,53428,53429,53431,53433,53435,53437,53439,53441,53443,53445,53448,53451,53453,53455],{"class":70,"line":11413},[68,53430,4893],{"class":316},[68,53432,3149],{"class":78},[68,53434,53329],{"class":316},[68,53436,10926],{"class":78},[68,53438,1685],{"class":316},[68,53440,5583],{"class":85},[68,53442,10933],{"class":78},[68,53444,2537],{"class":316},[68,53446,53447],{"class":78}," arr.",[68,53449,53450],{"class":85},"length",[68,53452,4704],{"class":78},[68,53454,3782],{"class":316},[68,53456,13930],{"class":78},[68,53458,53459,53462,53464,53466],{"class":70,"line":18091},[68,53460,53461],{"class":78},"            document.",[68,53463,53410],{"class":74},[68,53465,1640],{"class":78},[68,53467,53468],{"class":1742},"`\n",[68,53470,53471,53474,53476,53478,53480,53482],{"class":70,"line":18097},[68,53472,53473],{"class":1742},"              \u003Cdiv style=\"height: ${",[68,53475,5370],{"class":78},[68,53477,2517],{"class":1742},[68,53479,2070],{"class":78},[68,53481,2567],{"class":1742},[68,53483,53484],{"class":1742},"}px;\">\n",[68,53486,53487,53490,53492,53494,53496,53498],{"class":70,"line":18120},[68,53488,53489],{"class":1742},"                \u003Cspan>${",[68,53491,5370],{"class":78},[68,53493,2517],{"class":1742},[68,53495,2070],{"class":78},[68,53497,2567],{"class":1742},[68,53499,53500],{"class":1742},"}\u003C\u002Fspan>\n",[68,53502,53503,53506,53508,53510,53512],{"class":70,"line":18126},[68,53504,53505],{"class":1742},"                \u003Ch4>第${",[68,53507,2070],{"class":78},[68,53509,47050],{"class":316},[68,53511,26604],{"class":85},[68,53513,53514],{"class":1742},"}季度\u003C\u002Fh4>\n",[68,53516,53517],{"class":70,"line":18149},[68,53518,53519],{"class":1742},"              \u003C\u002Fdiv>          \n",[68,53521,53522,53525],{"class":70,"line":18163},[68,53523,53524],{"class":1742},"            `",[68,53526,1646],{"class":78},[68,53528,53529],{"class":70,"line":18183},[68,53530,4019],{"class":78},[68,53532,53533],{"class":70,"line":18189},[68,53534,53535],{"class":302},"        \u002F\u002F 盒子结尾\n",[68,53537,53538,53540,53542,53544,53547],{"class":70,"line":18200},[68,53539,53407],{"class":78},[68,53541,53410],{"class":74},[68,53543,1640],{"class":78},[68,53545,53546],{"class":1742},"` \u003C\u002Fdiv>`",[68,53548,1646],{"class":78},[68,53550,53551,53553,53555],{"class":70,"line":18223},[68,53552,53258],{"class":78},[68,53554,53295],{"class":52784},[68,53556,52791],{"class":78},[68,53558,53559,53561,53563],{"class":70,"line":18245},[68,53560,53267],{"class":78},[68,53562,53282],{"class":52784},[68,53564,52791],{"class":78},[68,53566,53567],{"class":70,"line":18250},[68,53568,3890],{"emptyLinePlaceholder":1567},[68,53570,53571,53573,53575],{"class":70,"line":18256},[68,53572,53267],{"class":78},[68,53574,52119],{"class":52784},[68,53576,52791],{"class":78},[19,53578,53580],{"id":53579},"_284-冒泡排序","2.8.4 冒泡排序",[58,53582,53584],{"className":52117,"code":53583,"language":52119,"meta":63,"style":63},"\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",[65,53585,53586,53596,53610,53614,53622,53637,53657,53669,53677,53681,53689,53697,53729,53762,53799,53804,53823,53828,53841,53856,53872,53876,53881,53885,53895,53904,53912,53916],{"__ignoreMap":63},[68,53587,53588,53590,53592,53594],{"class":70,"line":71},[68,53589,52781],{"class":78},[68,53591,52785],{"class":52784},[68,53593,52788],{"class":74},[68,53595,52791],{"class":78},[68,53597,53598,53600,53602,53604,53606,53608],{"class":70,"line":82},[68,53599,2537],{"class":78},[68,53601,52119],{"class":52784},[68,53603,52800],{"class":74},[68,53605,1685],{"class":78},[68,53607,52805],{"class":1742},[68,53609,52791],{"class":78},[68,53611,53612],{"class":70,"line":98},[68,53613,3890],{"emptyLinePlaceholder":1567},[68,53615,53616,53618,53620],{"class":70,"line":104},[68,53617,2537],{"class":78},[68,53619,52818],{"class":52784},[68,53621,52791],{"class":78},[68,53623,53624,53627,53629,53631,53633,53635],{"class":70,"line":112},[68,53625,53626],{"class":78},"  \u003C",[68,53628,52828],{"class":52784},[68,53630,52831],{"class":74},[68,53632,1685],{"class":78},[68,53634,52836],{"class":1742},[68,53636,52791],{"class":78},[68,53638,53639,53641,53643,53645,53647,53649,53651,53653,53655],{"class":70,"line":124},[68,53640,53626],{"class":78},[68,53642,52828],{"class":52784},[68,53644,16408],{"class":74},[68,53646,1685],{"class":78},[68,53648,52875],{"class":1742},[68,53650,52855],{"class":74},[68,53652,1685],{"class":78},[68,53654,52882],{"class":1742},[68,53656,52791],{"class":78},[68,53658,53659,53661,53663,53665,53667],{"class":70,"line":1496},[68,53660,53626],{"class":78},[68,53662,52891],{"class":52784},[68,53664,52894],{"class":78},[68,53666,52891],{"class":52784},[68,53668,52791],{"class":78},[68,53670,53671,53673,53675],{"class":70,"line":1502},[68,53672,53267],{"class":78},[68,53674,52818],{"class":52784},[68,53676,52791],{"class":78},[68,53678,53679],{"class":70,"line":1510},[68,53680,3890],{"emptyLinePlaceholder":1567},[68,53682,53683,53685,53687],{"class":70,"line":1521},[68,53684,2537],{"class":78},[68,53686,53282],{"class":52784},[68,53688,52791],{"class":78},[68,53690,53691,53693,53695],{"class":70,"line":3103},[68,53692,53626],{"class":78},[68,53694,53295],{"class":52784},[68,53696,52791],{"class":78},[68,53698,53699,53702,53704,53706,53709,53711,53713,53715,53717,53719,53721,53723,53725,53727],{"class":70,"line":3108},[68,53700,53701],{"class":316},"    let",[68,53703,53315],{"class":78},[68,53705,1685],{"class":316},[68,53707,53708],{"class":78}," [",[68,53710,1948],{"class":85},[68,53712,13923],{"class":78},[68,53714,1922],{"class":85},[68,53716,13923],{"class":78},[68,53718,1709],{"class":85},[68,53720,13923],{"class":78},[68,53722,1715],{"class":85},[68,53724,13923],{"class":78},[68,53726,1846],{"class":85},[68,53728,34730],{"class":78},[68,53730,53731,53733,53735,53737,53739,53741,53743,53745,53747,53749,53751,53754,53756,53758,53760],{"class":70,"line":3114},[68,53732,4691],{"class":316},[68,53734,3149],{"class":78},[68,53736,53329],{"class":316},[68,53738,10926],{"class":78},[68,53740,1685],{"class":316},[68,53742,5583],{"class":85},[68,53744,10933],{"class":78},[68,53746,2537],{"class":316},[68,53748,53447],{"class":78},[68,53750,53450],{"class":85},[68,53752,53753],{"class":316}," -",[68,53755,26604],{"class":85},[68,53757,4704],{"class":78},[68,53759,3782],{"class":316},[68,53761,13930],{"class":78},[68,53763,53764,53767,53769,53771,53773,53775,53777,53779,53781,53783,53785,53787,53789,53791,53793,53795,53797],{"class":70,"line":3119},[68,53765,53766],{"class":316},"      for",[68,53768,3149],{"class":78},[68,53770,53329],{"class":316},[68,53772,10988],{"class":78},[68,53774,1685],{"class":316},[68,53776,5583],{"class":85},[68,53778,10995],{"class":78},[68,53780,2537],{"class":316},[68,53782,53447],{"class":78},[68,53784,53450],{"class":85},[68,53786,53753],{"class":316},[68,53788,10926],{"class":78},[68,53790,2160],{"class":316},[68,53792,26604],{"class":85},[68,53794,11002],{"class":78},[68,53796,3782],{"class":316},[68,53798,13930],{"class":78},[68,53800,53801],{"class":70,"line":3133},[68,53802,53803],{"class":302},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[68,53805,53806,53808,53811,53813,53816,53818,53820],{"class":70,"line":3138},[68,53807,3987],{"class":316},[68,53809,53810],{"class":78}," (arr[j] ",[68,53812,2587],{"class":316},[68,53814,53815],{"class":78}," arr[j ",[68,53817,2109],{"class":316},[68,53819,26604],{"class":85},[68,53821,53822],{"class":78},"]) {\n",[68,53824,53825],{"class":70,"line":3144},[68,53826,53827],{"class":302},"          \u002F\u002F 交换两个变量\n",[68,53829,53830,53833,53836,53838],{"class":70,"line":3165},[68,53831,53832],{"class":316},"          let",[68,53834,53835],{"class":78}," tmp ",[68,53837,1685],{"class":316},[68,53839,53840],{"class":78}," arr[j]\n",[68,53842,53843,53846,53848,53850,53852,53854],{"class":70,"line":3170},[68,53844,53845],{"class":78},"          arr[j] ",[68,53847,1685],{"class":316},[68,53849,53815],{"class":78},[68,53851,2109],{"class":316},[68,53853,26604],{"class":85},[68,53855,34730],{"class":78},[68,53857,53858,53861,53863,53865,53867,53869],{"class":70,"line":3184},[68,53859,53860],{"class":78},"          arr[j ",[68,53862,2109],{"class":316},[68,53864,26604],{"class":85},[68,53866,5933],{"class":78},[68,53868,1685],{"class":316},[68,53870,53871],{"class":78}," tmp\n",[68,53873,53874],{"class":70,"line":3189},[68,53875,4019],{"class":78},[68,53877,53878],{"class":70,"line":3218},[68,53879,53880],{"class":78},"      }\n",[68,53882,53883],{"class":70,"line":3223},[68,53884,3677],{"class":78},[68,53886,53887,53890,53892],{"class":70,"line":3240},[68,53888,53889],{"class":78},"    document.",[68,53891,53410],{"class":74},[68,53893,53894],{"class":78},"(arr)\n",[68,53896,53897,53900,53902],{"class":70,"line":3245},[68,53898,53899],{"class":78},"  \u003C\u002F",[68,53901,53295],{"class":52784},[68,53903,52791],{"class":78},[68,53905,53906,53908,53910],{"class":70,"line":3250},[68,53907,53267],{"class":78},[68,53909,53282],{"class":52784},[68,53911,52791],{"class":78},[68,53913,53914],{"class":70,"line":3255},[68,53915,3890],{"emptyLinePlaceholder":1567},[68,53917,53918,53920,53922],{"class":70,"line":3269},[68,53919,53267],{"class":78},[68,53921,52119],{"class":52784},[68,53923,52791],{"class":78},[170,53925,53926],{},[801,53927],{"alt":63,"src":53928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[170,53930,53931],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[170,53933,53934],{},"let arr = [4, 2, 5, 1, 3]",[170,53936,53937],{},"\u002F\u002F 1.升序排列写法",[170,53939,53940],{},"arr.sort(function (a, b) {",[170,53942,53943],{},"return a - b",[170,53945,53946],{},"})",[170,53948,53949],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[170,53951,53952],{},"\u002F\u002F 降序排列写法",[170,53954,53940],{},[170,53956,53957],{},"return b - a",[170,53959,53946],{},[170,53961,53962],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53964,53966],{"id":53965},"_29-函数","2.9 函数",[170,53968,53969],{},[801,53970],{"alt":63,"src":53971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[170,53973,53974],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[170,53976,53977],{},"函数的声明用function",[170,53979,53980],{},"函数里边可以嵌套函数",[19,53982,53984],{"id":53983},"_291-函数传参","2.9.1 函数传参",[170,53986,53987],{},[801,53988],{"alt":63,"src":53989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[170,53991,53992],{},[801,53993],{"alt":63,"src":53994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[24,53996,53997,54000,54003,54006,54009,54012],{},[27,53998,53999],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[27,54001,54002],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[27,54004,54005],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[27,54007,54008],{},"开发中尽量保持形参和实参个数一致",[27,54010,54011],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[27,54013,54014],{},"形参只在函数中有用，所以不需要进行声明这个变量",[170,54016,54017],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,54019,54021],{"id":54020},"_292-函数的返回值","2.9.2 函数的返回值",[170,54023,54024],{},[801,54025],{"alt":63,"src":54026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[170,54028,54029],{},[801,54030],{"alt":63,"src":54031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[24,54033,54034,54037,54040,54043,54046],{},[27,54035,54036],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[27,54038,54039],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[27,54041,54042],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[27,54044,54045],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[27,54047,54048],{},"断点调试:进入函数内部看执行过程F11",[19,54050,54052],{"id":54051},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[58,54054,54056],{"className":52117,"code":54055,"language":52119,"meta":63,"style":63},"    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",[65,54057,54058,54063,54068,54072,54077],{"__ignoreMap":63},[68,54059,54060],{"class":70,"line":71},[68,54061,54062],{"class":78},"    function fn(a, b) {\n",[68,54064,54065],{"class":70,"line":82},[68,54066,54067],{"class":78},"      console.log(a + b);\n",[68,54069,54070],{"class":70,"line":98},[68,54071,3677],{"class":78},[68,54073,54074],{"class":70,"line":104},[68,54075,54076],{"class":78},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[68,54078,54079],{"class":70,"line":112},[68,54080,54081],{"class":78},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,54083,54085],{"id":54084},"_294-作用域","2.9.4 作用域",[24,54087,54088,54094,54099,54102,54105],{},[27,54089,54090,54091],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[268,54092,54093],{},"作用域",[27,54095,54096],{},[268,54097,54098],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[27,54100,54101],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[27,54103,54104],{},"函数内部可以直接所使用全局变量",[27,54106,54107],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[170,54109,16121],{},[58,54111,54113],{"className":52117,"code":54112,"language":52119,"meta":63,"style":63},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[65,54114,54115,54120,54125,54129,54134,54139,54144],{"__ignoreMap":63},[68,54116,54117],{"class":70,"line":71},[68,54118,54119],{"class":78},"    function fun() {\n",[68,54121,54122],{"class":70,"line":82},[68,54123,54124],{"class":78},"      num = 10\n",[68,54126,54127],{"class":70,"line":98},[68,54128,3677],{"class":78},[68,54130,54131],{"class":70,"line":104},[68,54132,54133],{"class":78},"    fun()\n",[68,54135,54136],{"class":70,"line":112},[68,54137,54138],{"class":78},"    console.log(num)\n",[68,54140,54141],{"class":70,"line":124},[68,54142,54143],{"class":78},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[68,54145,54146],{"class":70,"line":1496},[68,54147,54148],{"class":78},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[24,54150,54151,54154],{},[27,54152,54153],{},"函数内部的形参可以看做是局部变量",[27,54155,54156],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[170,54158,54159,54160],{},"变量访问原则： ",[268,54161,54162],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,54164,54166],{"id":54165},"_295-匿名函数","2.9.5 匿名函数",[170,54168,54169],{},"函数可以分为具名函数和匿名函数",[170,54171,54172],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[263,54174,54175],{},[27,54176,54177],{},"函数表达式",[170,54179,54180],{},[801,54181],{"alt":63,"src":54182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[170,54184,54185],{},"里边也可以写参数",[170,54187,54188],{},"具名函数调用位置可以随意调整；",[170,54190,54191],{},"匿名函数函数表达式形式只能在声明后才可以使用",[263,54193,54194],{"start":82},[27,54195,54196],{},"立即执行函数",[170,54198,54199],{},[801,54200],{"alt":63,"src":54201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[170,54203,54204],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[170,54206,54207],{},"写法：两个小括号，然后在第一个小括号中写function",[170,54209,54210],{},"(function () {})();",[170,54212,54213],{},"不要落下最后的;",[170,54215,54216],{},"立即执行函数必须要加;",[170,54218,54219],{},"分号写前写后都没问题",[170,54221,54222],{},"写前：",[170,54224,54225],{},"(function() {})()",[170,54227,54228],{},";(function () {})();",[170,54230,54231],{},"写后:",[170,54233,54234],{},"(function() {})();",[170,54236,54210],{},[170,54238,54239],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[170,54241,54242],{},"还有一种写法：",[170,54244,54245],{},"(function(){}());",[170,54247,54248],{},"或者:",[170,54250,54251],{},"!function(){}();",[170,54253,54254],{},"立即执行函数有时候也是可以加名字的：",[170,54256,54257],{},"(function flexible(window,document) {}(window,document));",[170,54259,54260],{},"省一些调用方法",[19,54262,54264],{"id":54263},"_296-逻辑中断","2.9.6 逻辑中断!!!",[170,54266,54267],{},[801,54268],{"alt":63,"src":54269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[170,54271,54272],{},"这样就不用非得给x,y初始化了",[170,54274,54275],{},[801,54276],{"alt":63,"src":54277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[170,54279,54280],{},"代码执行时先看左边",[170,54282,54283],{},"例如：console.log(false && 3+5)",[170,54285,54286],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[170,54288,54289],{},"&&都是真时，就返回最后一个真值",[170,54291,54292],{},"console.log(11 && 22)",[170,54294,54295],{},"输出22",[170,54297,54298],{},"逻辑与：遇真则真",[170,54300,16121],{},[170,54302,54303],{},"let age=1",[170,54305,54306],{},"console.log(11 || age++)",[170,54308,54309],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[170,54311,54312],{},"console.log(11 || 22)",[170,54314,54315],{},"||逻辑或遇到真就直接输出，输出结果为11",[170,54317,54318],{},"||如果都是假的话，就取最后一个假的值了",[19,54320,54322],{"id":54321},"_297-转换为boolean型","2.9.7 转换为Boolean型",[170,54324,54325],{},"显示转换：",[170,54327,54328,54331,54332],{},[268,54329,54330],{},"记忆","： ",[268,54333,54334],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[170,54336,54337],{},"空字符串为假，其他字符串全为真",[170,54339,54340],{},[801,54341],{"alt":63,"src":54342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[170,54344,54345],{},"隐式转换：",[170,54347,54348],{},[801,54349],{"alt":63,"src":54350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[170,54352,54353],{},"隐式转换:",[170,54355,54356],{},"null+3=3",[170,54358,54359],{},"undefined+3=NaN",[170,54361,54362],{},"null==undefined 输出true,他两个都当0看",[170,54364,54365],{},"null===undefined 输出false",[170,54367,54368],{},"undefined做任何操作都是NaN",[170,54370,54371],{},"NaN不等于NaN，NaN表示计算错误",[14,54373,54375],{"id":54374},"_210-对象","2.10 对象",[19,54377,54379],{"id":54378},"_2101-对象的介绍","2.10.1 对象的介绍",[170,54381,54382],{},"对象也是一种数据类型，里边的数据是无序的",[170,54384,54385],{},"对象由属性和方法组成",[170,54387,54388],{},[801,54389],{"alt":63,"src":54390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[170,54392,54393],{},[801,54394],{"alt":63,"src":54395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[170,54397,54398],{},[801,54399],{"alt":63,"src":54400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,54402,54404],{"id":54403},"_2102-对象属性","2.10.2 对象属性",[170,54406,54407],{},[801,54408],{"alt":63,"src":54409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[263,54411,54412],{},[27,54413,54414],{},"查询对象",[170,54416,54417],{},"对象名.属性 goods.uname",[170,54419,54420],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[170,54422,54423],{},"不带字符串的属性名也可以使用 对象名['属性名']",[170,54425,54426],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[170,54428,54429],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[263,54431,54432],{"start":82},[27,54433,54434],{},"重新赋值",[170,54436,54437],{},"对象名.属性=新值",[263,54439,54440],{"start":98},[27,54441,54442],{},"增加新数据",[170,54444,54437],{},[263,54446,54447],{"start":104},[27,54448,54449],{},"删除对象中的属性",[170,54451,54452],{},"delete 对象名.属性",[19,54454,54456],{"id":54455},"_2103-对象方法","2.10.3 对象方法",[170,54458,54459],{},[801,54460],{"alt":63,"src":54461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[170,54463,54464],{},"后边跟的是匿名函数",[170,54466,54467],{},"对象外面的叫函数；对象内部的叫方法",[170,54469,54470],{},[801,54471],{"alt":63,"src":54472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,54474,54476],{"id":54475},"_2104-遍历对象","2.10.4 遍历对象",[170,54478,54479],{},"理解为加括号的python字典遍历",[170,54481,54482],{},[801,54483],{"alt":63,"src":54484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[170,54486,54487],{},"k是字符串类型",[170,54489,54490],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[58,54492,54494],{"className":52117,"code":54493,"language":52119,"meta":63,"style":63},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[65,54495,54496,54501,54506,54511,54516],{"__ignoreMap":63},[68,54497,54498],{"class":70,"line":71},[68,54499,54500],{"class":78},"   let arr = [1, 2, 3]\n",[68,54502,54503],{"class":70,"line":82},[68,54504,54505],{"class":78},"    for (let k in arr) {\n",[68,54507,54508],{"class":70,"line":98},[68,54509,54510],{"class":78},"      console.log(k)\n",[68,54512,54513],{"class":70,"line":104},[68,54514,54515],{"class":78},"      console.log(arr[k])\n",[68,54517,54518],{"class":70,"line":112},[68,54519,3677],{"class":78},[170,54521,54522],{},[801,54523],{"alt":63,"src":54524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[170,54526,54527],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[170,54529,54530],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[170,54532,54533],{},"for in 得到的k是属性名",[53295,54535,54536],{},"\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",[170,54538,54539],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,54541,54543],{"id":54542},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[170,54545,54546],{},"数组中放对象信息",[58,54548,54552],{"className":54549,"code":54550,"language":54551,"meta":63,"style":63},"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",[65,54553,54554,54562,54567,54572,54577,54582,54587,54592,54597,54602,54607,54612,54617,54621,54625],{"__ignoreMap":63},[68,54555,54556,54558,54560],{"class":70,"line":71},[68,54557,2537],{"class":78},[68,54559,53295],{"class":52784},[68,54561,52791],{"class":78},[68,54563,54564],{"class":70,"line":82},[68,54565,54566],{"class":78},"    let students = [\n",[68,54568,54569],{"class":70,"line":98},[68,54570,54571],{"class":78},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[68,54573,54574],{"class":70,"line":104},[68,54575,54576],{"class":78},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[68,54578,54579],{"class":70,"line":112},[68,54580,54581],{"class":78},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[68,54583,54584],{"class":70,"line":124},[68,54585,54586],{"class":78},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[68,54588,54589],{"class":70,"line":1496},[68,54590,54591],{"class":78},"    ]\n",[68,54593,54594],{"class":70,"line":1502},[68,54595,54596],{"class":78},"    for (let i = 0; i \u003C students.length; i++) {\n",[68,54598,54599],{"class":70,"line":1510},[68,54600,54601],{"class":78},"      for (let k in students[i]) {\n",[68,54603,54604],{"class":70,"line":1521},[68,54605,54606],{"class":78},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[68,54608,54609],{"class":70,"line":3103},[68,54610,54611],{"class":78},"        \u002F\u002F输出每个人的名字：\n",[68,54613,54614],{"class":70,"line":3108},[68,54615,54616],{"class":78},"        \u002F\u002Fconsole.log(students[i].name)\n",[68,54618,54619],{"class":70,"line":3114},[68,54620,53880],{"class":78},[68,54622,54623],{"class":70,"line":3119},[68,54624,3677],{"class":78},[68,54626,54627,54629,54631],{"class":70,"line":3133},[68,54628,53899],{"class":78},[68,54630,53295],{"class":52784},[68,54632,52791],{"class":78},[19,54634,54636],{"id":54635},"_2106-内置对象","2.10.6 内置对象",[170,54638,54639],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[263,54641,54642],{},[27,54643,54644],{},"数学对象Math",[170,54646,54647],{},[801,54648],{"alt":63,"src":54649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[170,54651,54652],{},[1867,54653,54656],{"href":54654,"rel":54655},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25350],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[170,54658,54659],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[170,54661,54662],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[170,54664,54665],{},"数组不可以使用Math中的max,min来求最大值与最小值",[170,54667,54668],{},"null是一个空对象，可以认为：null类似于let obj={}",[170,54670,54671],{},"null属于对象数据类型",[263,54673,54674],{"start":82},[27,54675,54676],{},"生成任意范围随机数",[170,54678,54679],{},[801,54680],{"alt":63,"src":54681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[170,54683,54684],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[170,54686,54687],{},"乘以几就取不到几",[170,54689,54690],{},"取数组中的随机元素：",[170,54692,54693],{},"let arr = ['red', 'green', 'blue']",[170,54695,54696],{},"let random = Math.floor(Math.random() * arr.length)",[170,54698,54699],{},"console.log(arr[random])",[170,54701,54702],{},"这个函数得到的是全闭区间",[170,54704,54705],{},"function getRandom(N, M) {",[170,54707,54708],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[170,54710,2573],{},[170,54712,54713],{},"console.log(getRandom(4, 8))",[19,54715,54717],{"id":54716},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[170,54719,54720],{},[801,54721],{"alt":63,"src":54722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[170,54724,54725],{},[801,54726],{"alt":63,"src":54727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[170,54729,54730],{},[801,54731],{"alt":63,"src":54732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[170,54734,54735],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[170,54737,54738],{},[801,54739],{"alt":63,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[170,54742,54743],{},[801,54744],{"alt":63,"src":54745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[170,54747,54748],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[170,54750,54751],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[170,54753,54754],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1553,54756,54757],{},"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":63,"searchDepth":82,"depth":82,"links":54759},[54760,54768,54769,54770,54771,54772,54779,54783,54789,54798],{"id":51952,"depth":82,"text":51953,"children":54761},[54762,54763,54764,54765,54766,54767],{"id":51956,"depth":98,"text":51957},{"id":51973,"depth":98,"text":51974},{"id":52013,"depth":98,"text":52014},{"id":52025,"depth":98,"text":52026},{"id":52034,"depth":98,"text":52035},{"id":52082,"depth":98,"text":52083},{"id":52092,"depth":82,"text":52093},{"id":52180,"depth":82,"text":52181},{"id":52203,"depth":82,"text":52204},{"id":52215,"depth":82,"text":52216},{"id":52402,"depth":82,"text":52403,"children":54773},[54774,54775,54776,54777,54778],{"id":52406,"depth":98,"text":52407},{"id":52415,"depth":98,"text":52416},{"id":52443,"depth":98,"text":52444},{"id":52479,"depth":98,"text":52480},{"id":52504,"depth":98,"text":52505},{"id":52516,"depth":82,"text":52517,"children":54780},[54781,54782],{"id":52537,"depth":98,"text":52538},{"id":52631,"depth":98,"text":52632},{"id":52689,"depth":82,"text":52690,"children":54784},[54785,54786,54787,54788],{"id":52693,"depth":98,"text":52694},{"id":52717,"depth":98,"text":52718},{"id":52770,"depth":98,"text":52771},{"id":53579,"depth":98,"text":53580},{"id":53965,"depth":82,"text":53966,"children":54790},[54791,54792,54793,54794,54795,54796,54797],{"id":53983,"depth":98,"text":53984},{"id":54020,"depth":98,"text":54021},{"id":54051,"depth":98,"text":54052},{"id":54084,"depth":98,"text":54085},{"id":54165,"depth":98,"text":54166},{"id":54263,"depth":98,"text":54264},{"id":54321,"depth":98,"text":54322},{"id":54374,"depth":82,"text":54375,"children":54799},[54800,54801,54802,54803,54804,54805,54806],{"id":54378,"depth":98,"text":54379},{"id":54403,"depth":98,"text":54404},{"id":54455,"depth":98,"text":54456},{"id":54475,"depth":98,"text":54476},{"id":54542,"depth":98,"text":54543},{"id":54635,"depth":98,"text":54636},{"id":54716,"depth":98,"text":54717},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51944,"description":1564},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54813,"title":54814,"body":54815,"description":1564,"extension":1565,"meta":78150,"navigation":1567,"path":78151,"seo":78152,"stem":78153,"__hash__":78154},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54816,"toc":78090},[54817,54820,54823,54826,54831,54834,54837,54840,54844,54848,54854,54859,54867,54874,54877,54881,54886,54891,54896,54899,54902,54913,54916,54920,54923,54926,54931,54936,54941,54944,54947,55039,55042,55047,55050,55055,55058,55061,55066,55069,55074,55078,55081,55095,55099,55104,55107,55110,55114,55119,55122,55126,55130,55135,55139,55144,55147,55150,55153,55156,55159,55162,55167,55172,55199,55202,55205,55208,55213,55216,55219,55222,55225,55229,55258,55262,55267,55272,55275,55278,55281,55286,55401,55406,55411,55572,55577,55580,55584,55589,55594,55597,55600,55603,55606,55609,55612,55615,55618,55621,55624,55627,55630,55633,55636,55638,55641,55644,55647,55652,55656,56053,56056,56062,56066,56071,57350,57355,57358,57361,57364,57369,58565,58569,58575,58580,58583,58588,58593,58597,58601,58606,58609,58614,58617,58620,58624,59532,59535,59539,59760,59763,59766,59769,59995,59998,60222,60225,60229,60234,60237,60240,60468,60471,60504,60507,60511,60516,60520,60523,60526,60529,60532,60535,60538,60541,60546,61826,61830,61833,62926,62930,62933,62936,62939,62942,62946,62949,62952,62954,62962,64443,64447,64450,64453,64456,64665,64668,64672,64676,64681,64686,64689,64692,64697,64701,64706,64709,64818,64822,64827,64832,64835,64838,64842,64847,64852,64857,64860,64863,64874,64877,64882,64887,64890,64893,64966,64970,64975,64978,64980,64991,64995,65000,66326,66329,66332,66335,66337,66340,66343,66346,66349,66352,66355,66358,66361,66364,66367,66370,66373,66375,66377,66380,66384,67478,67481,67484,67500,67514,67517,67522,67528,67533,67537,67541,67546,67550,67555,67997,68002,68005,68009,68014,68017,68020,68024,68029,68033,68038,68043,68047,68052,68057,68060,68065,68070,68074,68079,68084,68188,68191,68195,68200,68566,68569,68572,68575,68578,68581,68584,68587,68590,69886,69890,69895,69900,69903,69906,69909,69912,69914,69919,69924,69927,69931,69936,69941,69946,69949,69952,69955,69958,69961,69966,69969,69973,69978,69983,69987,69992,69995,70000,70003,70006,70009,70012,70015,70020,70023,70026,70029,70032,70036,70041,70044,70048,70053,70056,70059,70063,70092,70095,70099,70103,70108,70112,70117,70120,70123,70126,70129,70132,70135,70138,70141,70144,70147,70150,70153,70156,70159,70163,70168,70173,70176,70180,70184,70189,70192,70196,70199,70202,70207,70212,70217,70222,70227,70230,70233,70238,70243,70247,70252,70255,70260,70263,70266,70269,70272,70277,70280,70289,70293,70298,70301,70304,70308,70311,70316,70320,70323,70329,70335,70339,70365,70368,71929,71932,72428,72431,72436,72441,72446,72450,72455,72460,72465,72469,72474,72477,72480,72483,72486,72490,72493,72498,72501,72506,72510,72515,72518,72523,72528,72533,72536,72539,72544,72549,72552,72555,72559,72562,72567,72570,72575,72578,72583,72588,72593,72596,72601,72666,72669,72680,72684,72689,72861,72865,72870,72873,72876,72879,72883,72894,72898,72901,72906,72911,72914,72917,72920,72923,72926,72928,72931,72934,72937,72942,72945,72950,72953,72957,72960,72963,72977,72981,72984,73039,73044,73047,73050,73055,73058,73062,73067,73197,73201,73206,73211,73292,73297,73301,73304,73309,73314,73320,73323,73326,73329,73333,73338,73341,73352,73356,73373,76419,76423,76426,76429,76432,76453,76457,76460,76468,76471,76476,76479,76482,76487,76492,76496,76517,76521,76526,76529,76532,76535,76538,76542,76547,76550,76554,76559,76562,76567,76570,76575,76578,76583,77786,77790,77795,77798,77803,78087],[10,54818,54814],{"id":54819},"_3web-apis",[170,54821,54822],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[170,54824,54825],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[170,54827,54828],{},[801,54829],{"alt":63,"src":54830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[170,54832,54833],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[170,54835,54836],{},"建议数组和对象使用 const 来声明",[170,54838,54839],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54841,54843],{"id":54842},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,54845,54847],{"id":54846},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[170,54849,54850,54853],{},[65,54851,54852],{},"document"," = HTML 文件解析后的对象化表示；",[170,54855,54856,54858],{},[65,54857,54852],{}," ≠ HTML 文件本身",[170,54860,54861,54866],{},[268,54862,54863],{},[65,54864,54865],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[170,54868,54869,54873],{},[268,54870,54871],{},[65,54872,54852],{}," ：容器里的内容，代表当前加载的网页（DOM）",[170,54875,54876],{},"document实际上为window.document的简写",[19,54878,54880],{"id":54879},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[170,54882,54883],{},[801,54884],{"alt":63,"src":54885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[170,54887,54888],{},[801,54889],{"alt":63,"src":54890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[170,54892,54893],{},[801,54894],{"alt":63,"src":54895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[170,54897,54898],{},"console.dir()",[170,54900,54901],{},"dir用来打印对象",[24,54903,54904,54907,54910],{},[27,54905,54906],{},"任何一个标签，都是一个对象",[27,54908,54909],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[27,54911,54912],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[170,54914,54915],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,54917,54919],{"id":54918},"_312-获取dom对象","3.1.2 获取DoM对象",[170,54921,54922],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[170,54924,54925],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[170,54927,54928],{},[268,54929,54930],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[263,54932,54933],{},[27,54934,54935],{},"利用CSS选择器来获取标签元素",[170,54937,54938],{},[801,54939],{"alt":63,"src":54940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[170,54942,54943],{},"里边的选择器必须必须加引号！！！",[170,54945,54946],{},"只选择第一个元素",[58,54948,54950],{"className":54549,"code":54949,"language":54551,"meta":63,"style":63},"\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",[65,54951,54952,54960,54981,55000,55008,55013,55018,55023,55031],{"__ignoreMap":63},[68,54953,54954,54956,54958],{"class":70,"line":71},[68,54955,2537],{"class":78},[68,54957,53282],{"class":52784},[68,54959,52791],{"class":78},[68,54961,54962,54964,54966,54969,54971,54974,54977,54979],{"class":70,"line":82},[68,54963,53626],{"class":78},[68,54965,53093],{"class":52784},[68,54967,54968],{"class":74}," class",[68,54970,1685],{"class":78},[68,54972,54973],{"class":1742},"\"box\"",[68,54975,54976],{"class":78},">123\u003C\u002F",[68,54978,53093],{"class":52784},[68,54980,52791],{"class":78},[68,54982,54983,54985,54987,54989,54991,54993,54996,54998],{"class":70,"line":98},[68,54984,53626],{"class":78},[68,54986,53093],{"class":52784},[68,54988,54968],{"class":74},[68,54990,1685],{"class":78},[68,54992,54973],{"class":1742},[68,54994,54995],{"class":78},">456\u003C\u002F",[68,54997,53093],{"class":52784},[68,54999,52791],{"class":78},[68,55001,55002,55004,55006],{"class":70,"line":104},[68,55003,53626],{"class":78},[68,55005,53295],{"class":52784},[68,55007,52791],{"class":78},[68,55009,55010],{"class":70,"line":112},[68,55011,55012],{"class":78},"    \u002F\u002F 1.获取匹配的第一个元素\n",[68,55014,55015],{"class":70,"line":124},[68,55016,55017],{"class":78},"    const box = document.querySelector('div')\n",[68,55019,55020],{"class":70,"line":1496},[68,55021,55022],{"class":78},"    console.dir(box)\n",[68,55024,55025,55027,55029],{"class":70,"line":1502},[68,55026,53899],{"class":78},[68,55028,53295],{"class":52784},[68,55030,52791],{"class":78},[68,55032,55033,55035,55037],{"class":70,"line":1510},[68,55034,53267],{"class":78},[68,55036,53282],{"class":52784},[68,55038,52791],{"class":78},[170,55040,55041],{},"只选123，不选456",[170,55043,55044],{},[801,55045],{"alt":63,"src":55046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[170,55048,55049],{},"返回的是一个数组的集合，不能对其进行直接修改",[170,55051,55052],{},[801,55053],{"alt":63,"src":55054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[170,55056,55057],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[170,55059,55060],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[263,55062,55063],{"start":82},[27,55064,55065],{},"其他方法来获取标签元素",[170,55067,55068],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[170,55070,55071],{},[801,55072],{"alt":63,"src":55073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,55075,55077],{"id":55076},"_313-操作元素的内容","3.1.3 操作元素的内容",[170,55079,55080],{},"设置修改DOM元素内容有两种方式：",[24,55082,55083,55086,55089,55092],{},[27,55084,55085],{},"元素.innerText=''",[27,55087,55088],{},"元素.innerHTML=''",[27,55090,55091],{},"不写字符串输出数字也是可以的",[27,55093,55094],{},"元素.innerHtml=1",[245,55096,55098],{"id":55097},"_3131-innertext","3.1.3.1 innerText",[170,55100,55101],{},[801,55102],{"alt":63,"src":55103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[170,55105,55106],{},"思路：实现了修改盒子中的内容！",[170,55108,55109],{},"它只显示纯文本，不解析标签",[245,55111,55113],{"id":55112},"_3132-innerhtml","3.1.3.2 innerHTML",[170,55115,55116],{},[801,55117],{"alt":63,"src":55118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[170,55120,55121],{},"相比于innerText，他的强大之处在于可以解析标签",[19,55123,55125],{"id":55124},"_314-操作元素属性","3.1.4 操作元素属性",[245,55127,55129],{"id":55128},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[170,55131,55132],{},[801,55133],{"alt":63,"src":55134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[245,55136,55138],{"id":55137},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[170,55140,55141],{},[801,55142],{"alt":63,"src":55143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[170,55145,55146],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[170,55148,55149],{},"div.style.backgroundColor = 'hotpink'",[170,55151,55152],{},"如果按照css的写法，-表示减，就会出错",[170,55154,55155],{},"body元素不需要再获取，直接用就行！！！！！！",[170,55157,55158],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[170,55160,55161],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[170,55163,55164],{},[801,55165],{"alt":63,"src":55166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[170,55168,55169],{},[801,55170],{"alt":63,"src":55171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[263,55173,55174,55177,55180,55183,55186,55189],{},[27,55175,55176],{},"className这个方式就是修改很多样式的时候来使用的！",[27,55178,55179],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[27,55181,55182],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[27,55184,55185],{},"className为属性名，如果还用class的话就导致与关键字冲突",[27,55187,55188],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[27,55190,55191,55192,55197],{},"解析标签的时候就变为了",[53093,55193],{"className":55194},[55195,55196],"nav","box",[546,55198],{},[170,55200,55201],{},"例子：",[53093,55203],{"className":55204},[55195],[53295,55206,55207],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[170,55209,55210],{},[801,55211],{"alt":63,"src":55212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[170,55214,55215],{},"追加和删除类名用classList",[170,55217,55218],{},"常用于类似于开关的操作",[170,55220,55221],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[170,55223,55224],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[245,55226,55228],{"id":55227},"_3143-牢记点","3.1.4.3 牢记点",[263,55230,55231,55234,55237,55240,55243,55246,55249,55252,55255],{},[27,55232,55233],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[27,55235,55236],{},"使用style属性操作css时不要忘记引号",[27,55238,55239],{},"使用className或者classList时也不要忘记引号",[27,55241,55242],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[27,55244,55245],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[27,55247,55248],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[27,55250,55251],{},"若： let arr=['1','2',3] arr[0]=1",[27,55253,55254],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[27,55256,55257],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,55259,55261],{"id":55260},"_315-操作表单元素","3.1.5 操作表单元素",[263,55263,55264],{},[27,55265,55266],{},"天生的属性",[170,55268,55269],{},[801,55270],{"alt":63,"src":55271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[170,55273,55274],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[170,55276,55277],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[170,55279,55280],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[170,55282,55283],{},[801,55284],{"alt":63,"src":55285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[58,55287,55289],{"className":52117,"code":55288,"language":52119,"meta":63,"style":63},"在复选框中如果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",[65,55290,55291,55296,55328,55333,55338,55343,55348,55352,55357,55362,55379,55391,55396],{"__ignoreMap":63},[68,55292,55293],{"class":70,"line":71},[68,55294,55295],{"class":78},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[68,55297,55298,55300,55303,55306,55308,55311,55313,55315,55317,55319,55321,55323,55326],{"class":70,"line":82},[68,55299,2537],{"class":78},[68,55301,55302],{"class":52784},"input",[68,55304,55305],{"class":74}," type",[68,55307,1685],{"class":78},[68,55309,55310],{"class":1742},"\"checkbox\"",[68,55312,16408],{"class":74},[68,55314,1685],{"class":78},[68,55316,9141],{"class":1742},[68,55318,16447],{"class":74},[68,55320,1685],{"class":78},[68,55322,9141],{"class":1742},[68,55324,55325],{"class":74}," checked",[68,55327,52791],{"class":78},[68,55329,55330],{"class":70,"line":98},[68,55331,55332],{"class":78},"不选的话：\n",[68,55334,55335],{"class":70,"line":104},[68,55336,55337],{"class":78},"const input = document.querySelector('input')\n",[68,55339,55340],{"class":70,"line":112},[68,55341,55342],{"class":78},"input.checked=false\n",[68,55344,55345],{"class":70,"line":124},[68,55346,55347],{"class":78},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[68,55349,55350],{"class":70,"line":1496},[68,55351,3890],{"emptyLinePlaceholder":1567},[68,55353,55354],{"class":70,"line":1502},[68,55355,55356],{"class":78},"禁用按钮：\n",[68,55358,55359],{"class":70,"line":1510},[68,55360,55361],{"class":78},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[68,55363,55364,55366,55369,55372,55375,55377],{"class":70,"line":1521},[68,55365,2537],{"class":78},[68,55367,55368],{"class":52784},"button",[68,55370,55371],{"class":74}," disabled",[68,55373,55374],{"class":78},">点击\u003C\u002F",[68,55376,55368],{"class":52784},[68,55378,52791],{"class":78},[68,55380,55381,55383,55385,55387,55389],{"class":70,"line":3103},[68,55382,2537],{"class":78},[68,55384,55368],{"class":52784},[68,55386,55374],{"class":78},[68,55388,55368],{"class":52784},[68,55390,52791],{"class":78},[68,55392,55393],{"class":70,"line":3108},[68,55394,55395],{"class":78},"const bt = document.querySelector('button')\n",[68,55397,55398],{"class":70,"line":3114},[68,55399,55400],{"class":78},"bt.disabled = false\n",[263,55402,55403],{"start":82},[27,55404,55405],{},"自定义属性",[170,55407,55408],{},[801,55409],{"alt":63,"src":55410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[58,55412,55414],{"className":54549,"code":55413,"language":54551,"meta":63,"style":63},"\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",[65,55415,55416,55424,55452,55471,55490,55509,55528,55536,55541,55546,55551,55556,55564],{"__ignoreMap":63},[68,55417,55418,55420,55422],{"class":70,"line":71},[68,55419,2537],{"class":78},[68,55421,53282],{"class":52784},[68,55423,52791],{"class":78},[68,55425,55426,55428,55430,55433,55435,55437,55440,55442,55445,55448,55450],{"class":70,"line":82},[68,55427,53626],{"class":78},[68,55429,53093],{"class":52784},[68,55431,55432],{"class":74}," data-id",[68,55434,1685],{"class":78},[68,55436,5168],{"class":1742},[68,55438,55439],{"class":74}," data-spm",[68,55441,1685],{"class":78},[68,55443,55444],{"class":1742},"\"我不知道\"",[68,55446,55447],{"class":78},">1\u003C\u002F",[68,55449,53093],{"class":52784},[68,55451,52791],{"class":78},[68,55453,55454,55456,55458,55460,55462,55464,55467,55469],{"class":70,"line":98},[68,55455,53626],{"class":78},[68,55457,53093],{"class":52784},[68,55459,55432],{"class":74},[68,55461,1685],{"class":78},[68,55463,5191],{"class":1742},[68,55465,55466],{"class":78},">2\u003C\u002F",[68,55468,53093],{"class":52784},[68,55470,52791],{"class":78},[68,55472,55473,55475,55477,55479,55481,55483,55486,55488],{"class":70,"line":104},[68,55474,53626],{"class":78},[68,55476,53093],{"class":52784},[68,55478,55432],{"class":74},[68,55480,1685],{"class":78},[68,55482,5204],{"class":1742},[68,55484,55485],{"class":78},">3\u003C\u002F",[68,55487,53093],{"class":52784},[68,55489,52791],{"class":78},[68,55491,55492,55494,55496,55498,55500,55502,55505,55507],{"class":70,"line":112},[68,55493,53626],{"class":78},[68,55495,53093],{"class":52784},[68,55497,55432],{"class":74},[68,55499,1685],{"class":78},[68,55501,5217],{"class":1742},[68,55503,55504],{"class":78},">4\u003C\u002F",[68,55506,53093],{"class":52784},[68,55508,52791],{"class":78},[68,55510,55511,55513,55515,55517,55519,55521,55524,55526],{"class":70,"line":124},[68,55512,53626],{"class":78},[68,55514,53093],{"class":52784},[68,55516,55432],{"class":74},[68,55518,1685],{"class":78},[68,55520,5238],{"class":1742},[68,55522,55523],{"class":78},">5\u003C\u002F",[68,55525,53093],{"class":52784},[68,55527,52791],{"class":78},[68,55529,55530,55532,55534],{"class":70,"line":1496},[68,55531,53626],{"class":78},[68,55533,53295],{"class":52784},[68,55535,52791],{"class":78},[68,55537,55538],{"class":70,"line":1502},[68,55539,55540],{"class":78},"    const one = document.querySelector('div')\n",[68,55542,55543],{"class":70,"line":1510},[68,55544,55545],{"class":78},"    console.log(one.dataset)\n",[68,55547,55548],{"class":70,"line":1521},[68,55549,55550],{"class":78},"    console.log(one.dataset.id)\n",[68,55552,55553],{"class":70,"line":3103},[68,55554,55555],{"class":78},"    console.log(one.dataset.spm)\n",[68,55557,55558,55560,55562],{"class":70,"line":3108},[68,55559,53899],{"class":78},[68,55561,53295],{"class":52784},[68,55563,52791],{"class":78},[68,55565,55566,55568,55570],{"class":70,"line":3114},[68,55567,53267],{"class":78},[68,55569,53282],{"class":52784},[68,55571,52791],{"class":78},[170,55573,55574],{},[801,55575],{"alt":63,"src":55576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[170,55578,55579],{},"document.querySelector选择的是第一个对象（元素）",[19,55581,55583],{"id":55582},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[170,55585,55586],{},[801,55587],{"alt":63,"src":55588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[170,55590,55591],{},[801,55592],{"alt":63,"src":55593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[170,55595,55596],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53295,55598,55599],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[170,55601,55602],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53295,55604,55605],{},"\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",[170,55607,55608],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[170,55610,55611],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[170,55613,55614],{},"单位为毫秒！！！",[170,55616,55617],{},"可以搭配匿名函数来用！！！",[170,55619,55620],{},"setInterval(function () {",[170,55622,55623],{},"alert('两秒执行一次')",[170,55625,55626],{},"}, 2000)",[170,55628,55629],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[170,55631,55632],{},"function fn() {",[170,55634,55635],{},"document.write(1)",[170,55637,2573],{},[170,55639,55640],{},"setInterval(fn, 1000)",[170,55642,55643],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[170,55645,55646],{},"setInterval('fn()', 1000)",[170,55648,55649],{},[801,55650],{"alt":63,"src":55651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[245,55653,55655],{"id":55654},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[58,55657,55659],{"className":52117,"code":55658,"language":52119,"meta":63,"style":63},"\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",[65,55660,55661,55671,55685,55689,55697,55711,55731,55743,55751,55755,55763,55800,55805,55810,55815,55823,55831,55853,55861,55866,55888,55893,55898,55909,55914,55934,55942,55957,55972,55983,55988,55998,56008,56012,56021,56025,56033,56041,56045],{"__ignoreMap":63},[68,55662,55663,55665,55667,55669],{"class":70,"line":71},[68,55664,52781],{"class":78},[68,55666,52785],{"class":52784},[68,55668,52788],{"class":74},[68,55670,52791],{"class":78},[68,55672,55673,55675,55677,55679,55681,55683],{"class":70,"line":82},[68,55674,2537],{"class":78},[68,55676,52119],{"class":52784},[68,55678,52800],{"class":74},[68,55680,1685],{"class":78},[68,55682,52805],{"class":1742},[68,55684,52791],{"class":78},[68,55686,55687],{"class":70,"line":98},[68,55688,3890],{"emptyLinePlaceholder":1567},[68,55690,55691,55693,55695],{"class":70,"line":104},[68,55692,2537],{"class":78},[68,55694,52818],{"class":52784},[68,55696,52791],{"class":78},[68,55698,55699,55701,55703,55705,55707,55709],{"class":70,"line":112},[68,55700,53626],{"class":78},[68,55702,52828],{"class":52784},[68,55704,52831],{"class":74},[68,55706,1685],{"class":78},[68,55708,52836],{"class":1742},[68,55710,52791],{"class":78},[68,55712,55713,55715,55717,55719,55721,55723,55725,55727,55729],{"class":70,"line":124},[68,55714,53626],{"class":78},[68,55716,52828],{"class":52784},[68,55718,16408],{"class":74},[68,55720,1685],{"class":78},[68,55722,52875],{"class":1742},[68,55724,52855],{"class":74},[68,55726,1685],{"class":78},[68,55728,52882],{"class":1742},[68,55730,52791],{"class":78},[68,55732,55733,55735,55737,55739,55741],{"class":70,"line":1496},[68,55734,53626],{"class":78},[68,55736,52891],{"class":52784},[68,55738,52894],{"class":78},[68,55740,52891],{"class":52784},[68,55742,52791],{"class":78},[68,55744,55745,55747,55749],{"class":70,"line":1502},[68,55746,53267],{"class":78},[68,55748,52818],{"class":52784},[68,55750,52791],{"class":78},[68,55752,55753],{"class":70,"line":1510},[68,55754,3890],{"emptyLinePlaceholder":1567},[68,55756,55757,55759,55761],{"class":70,"line":1521},[68,55758,2537],{"class":78},[68,55760,53282],{"class":52784},[68,55762,52791],{"class":78},[68,55764,55765,55767,55770,55772,55774,55776,55778,55780,55782,55785,55787,55790,55793,55795,55798],{"class":70,"line":3103},[68,55766,53626],{"class":78},[68,55768,55769],{"class":52784},"textarea",[68,55771,16408],{"class":74},[68,55773,1685],{"class":78},[68,55775,9141],{"class":1742},[68,55777,16447],{"class":74},[68,55779,1685],{"class":78},[68,55781,9141],{"class":1742},[68,55783,55784],{"class":74}," cols",[68,55786,1685],{"class":78},[68,55788,55789],{"class":1742},"\"30\"",[68,55791,55792],{"class":74}," rows",[68,55794,1685],{"class":78},[68,55796,55797],{"class":1742},"\"10\"",[68,55799,52791],{"class":78},[68,55801,55802],{"class":70,"line":3108},[68,55803,55804],{"class":78},"        用户注册协议\n",[68,55806,55807],{"class":70,"line":3114},[68,55808,55809],{"class":78},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[68,55811,55812],{"class":70,"line":3119},[68,55813,55814],{"class":78},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[68,55816,55817,55819,55821],{"class":70,"line":3133},[68,55818,53258],{"class":78},[68,55820,55769],{"class":52784},[68,55822,52791],{"class":78},[68,55824,55825,55827,55829],{"class":70,"line":3138},[68,55826,53626],{"class":78},[68,55828,546],{"class":52784},[68,55830,52791],{"class":78},[68,55832,55833,55835,55837,55839,55841,55844,55846,55849,55851],{"class":70,"line":3144},[68,55834,53626],{"class":78},[68,55836,55368],{"class":52784},[68,55838,54968],{"class":74},[68,55840,1685],{"class":78},[68,55842,55843],{"class":1742},"\"btn\"",[68,55845,55371],{"class":74},[68,55847,55848],{"class":78},">我已经阅读用户协议(5)\u003C\u002F",[68,55850,55368],{"class":52784},[68,55852,52791],{"class":78},[68,55854,55855,55857,55859],{"class":70,"line":3165},[68,55856,53626],{"class":78},[68,55858,53295],{"class":52784},[68,55860,52791],{"class":78},[68,55862,55863],{"class":70,"line":3170},[68,55864,55865],{"class":302},"    \u002F\u002F 1. 获取元素\n",[68,55867,55868,55870,55873,55875,55878,55881,55883,55886],{"class":70,"line":3184},[68,55869,12709],{"class":316},[68,55871,55872],{"class":85}," btn",[68,55874,15052],{"class":316},[68,55876,55877],{"class":78}," document.",[68,55879,55880],{"class":74},"querySelector",[68,55882,1640],{"class":78},[68,55884,55885],{"class":1742},"'.btn'",[68,55887,1646],{"class":78},[68,55889,55890],{"class":70,"line":3189},[68,55891,55892],{"class":302},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[68,55894,55895],{"class":70,"line":3218},[68,55896,55897],{"class":302},"    \u002F\u002F 2. 倒计时\n",[68,55899,55900,55902,55904,55906],{"class":70,"line":3223},[68,55901,53701],{"class":316},[68,55903,10926],{"class":78},[68,55905,1685],{"class":316},[68,55907,55908],{"class":85}," 5\n",[68,55910,55911],{"class":70,"line":3240},[68,55912,55913],{"class":302},"    \u002F\u002F 2.1 开启定时器\n",[68,55915,55916,55918,55921,55923,55926,55928,55931],{"class":70,"line":3245},[68,55917,53701],{"class":316},[68,55919,55920],{"class":78}," n ",[68,55922,1685],{"class":316},[68,55924,55925],{"class":74}," setInterval",[68,55927,1640],{"class":78},[68,55929,55930],{"class":316},"function",[68,55932,55933],{"class":78}," () {\n",[68,55935,55936,55939],{"class":70,"line":3250},[68,55937,55938],{"class":78},"      i",[68,55940,55941],{"class":316},"--\n",[68,55943,55944,55947,55949,55952,55954],{"class":70,"line":3255},[68,55945,55946],{"class":78},"      btn.innerHTML ",[68,55948,1685],{"class":316},[68,55950,55951],{"class":1742}," `我已经阅读用户协议(${",[68,55953,2070],{"class":78},[68,55955,55956],{"class":1742},"})`\n",[68,55958,55959,55962,55965,55968,55970],{"class":70,"line":3269},[68,55960,55961],{"class":316},"      if",[68,55963,55964],{"class":78}," (i ",[68,55966,55967],{"class":316},"===",[68,55969,5583],{"class":85},[68,55971,13930],{"class":78},[68,55973,55974,55977,55980],{"class":70,"line":3274},[68,55975,55976],{"class":74},"        clearInterval",[68,55978,55979],{"class":78},"(n)  ",[68,55981,55982],{"class":302},"\u002F\u002F 关闭定时器\n",[68,55984,55985],{"class":70,"line":4067},[68,55986,55987],{"class":302},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[68,55989,55990,55993,55995],{"class":70,"line":4081},[68,55991,55992],{"class":78},"        btn.disabled ",[68,55994,1685],{"class":316},[68,55996,55997],{"class":85}," false\n",[68,55999,56000,56003,56005],{"class":70,"line":4089},[68,56001,56002],{"class":78},"        btn.innerHTML ",[68,56004,1685],{"class":316},[68,56006,56007],{"class":1742}," '同意'\n",[68,56009,56010],{"class":70,"line":4094},[68,56011,53880],{"class":78},[68,56013,56014,56017,56019],{"class":70,"line":4100},[68,56015,56016],{"class":78},"    }, ",[68,56018,7899],{"class":85},[68,56020,1646],{"class":78},[68,56022,56023],{"class":70,"line":4106},[68,56024,3890],{"emptyLinePlaceholder":1567},[68,56026,56027,56029,56031],{"class":70,"line":4111},[68,56028,53899],{"class":78},[68,56030,53295],{"class":52784},[68,56032,52791],{"class":78},[68,56034,56035,56037,56039],{"class":70,"line":9437},[68,56036,53267],{"class":78},[68,56038,53282],{"class":52784},[68,56040,52791],{"class":78},[68,56042,56043],{"class":70,"line":9461},[68,56044,3890],{"emptyLinePlaceholder":1567},[68,56046,56047,56049,56051],{"class":70,"line":9466},[68,56048,53267],{"class":78},[68,56050,52119],{"class":52784},[68,56052,52791],{"class":78},[170,56054,56055],{},"不要一直想着用死循环,避免死循环",[170,56057,56058,56061],{},[65,56059,56060],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[245,56063,56065],{"id":56064},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[263,56067,56068],{},[27,56069,56070],{},"法1",[58,56072,56074],{"className":52117,"code":56073,"language":52119,"meta":63,"style":63},"\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",[65,56075,56076,56086,56100,56104,56112,56126,56146,56158,56166,56172,56183,56194,56198,56202,56209,56220,56224,56228,56235,56246,56260,56273,56287,56291,56295,56302,56312,56323,56334,56346,56358,56370,56374,56378,56386,56396,56409,56421,56434,56438,56442,56449,56459,56471,56483,56494,56505,56515,56527,56539,56543,56547,56556,56568,56580,56608,56621,56625,56629,56636,56647,56651,56659,56667,56671,56679,56693,56708,56732,56740,56755,56768,56776,56797,56809,56821,56833,56845,56857,56869,56881,56890,56898,56906,56914,56926,56949,56968,56987,57006,57025,57044,57063,57083,57087,57107,57126,57146,57167,57178,57195,57205,57215,57225,57230,57235,57240,57245,57270,57283,57287,57310,57314,57322,57330,57338,57342],{"__ignoreMap":63},[68,56077,56078,56080,56082,56084],{"class":70,"line":71},[68,56079,52781],{"class":78},[68,56081,52785],{"class":52784},[68,56083,52788],{"class":74},[68,56085,52791],{"class":78},[68,56087,56088,56090,56092,56094,56096,56098],{"class":70,"line":82},[68,56089,2537],{"class":78},[68,56091,52119],{"class":52784},[68,56093,52800],{"class":74},[68,56095,1685],{"class":78},[68,56097,52805],{"class":1742},[68,56099,52791],{"class":78},[68,56101,56102],{"class":70,"line":98},[68,56103,3890],{"emptyLinePlaceholder":1567},[68,56105,56106,56108,56110],{"class":70,"line":104},[68,56107,2537],{"class":78},[68,56109,52818],{"class":52784},[68,56111,52791],{"class":78},[68,56113,56114,56116,56118,56120,56122,56124],{"class":70,"line":112},[68,56115,53626],{"class":78},[68,56117,52828],{"class":52784},[68,56119,52831],{"class":74},[68,56121,1685],{"class":78},[68,56123,52836],{"class":1742},[68,56125,52791],{"class":78},[68,56127,56128,56130,56132,56134,56136,56138,56140,56142,56144],{"class":70,"line":124},[68,56129,53626],{"class":78},[68,56131,52828],{"class":52784},[68,56133,16408],{"class":74},[68,56135,1685],{"class":78},[68,56137,52875],{"class":1742},[68,56139,52855],{"class":74},[68,56141,1685],{"class":78},[68,56143,52882],{"class":1742},[68,56145,52791],{"class":78},[68,56147,56148,56150,56152,56154,56156],{"class":70,"line":1496},[68,56149,53626],{"class":78},[68,56151,52891],{"class":52784},[68,56153,52894],{"class":78},[68,56155,52891],{"class":52784},[68,56157,52791],{"class":78},[68,56159,56160,56162,56164],{"class":70,"line":1502},[68,56161,53626],{"class":78},[68,56163,1553],{"class":52784},[68,56165,52791],{"class":78},[68,56167,56168,56170],{"class":70,"line":1510},[68,56169,7892],{"class":52784},[68,56171,79],{"class":78},[68,56173,56174,56177,56179,56181],{"class":70,"line":1521},[68,56175,56176],{"class":85},"      padding",[68,56178,89],{"class":78},[68,56180,1248],{"class":85},[68,56182,95],{"class":78},[68,56184,56185,56188,56190,56192],{"class":70,"line":3103},[68,56186,56187],{"class":85},"      margin",[68,56189,89],{"class":78},[68,56191,1248],{"class":85},[68,56193,95],{"class":78},[68,56195,56196],{"class":70,"line":3108},[68,56197,3677],{"class":78},[68,56199,56200],{"class":70,"line":3114},[68,56201,3890],{"emptyLinePlaceholder":1567},[68,56203,56204,56207],{"class":70,"line":3119},[68,56205,56206],{"class":52784},"    li",[68,56208,79],{"class":78},[68,56210,56211,56214,56216,56218],{"class":70,"line":3133},[68,56212,56213],{"class":85},"      list-style",[68,56215,89],{"class":78},[68,56217,151],{"class":85},[68,56219,95],{"class":78},[68,56221,56222],{"class":70,"line":3138},[68,56223,3677],{"class":78},[68,56225,56226],{"class":70,"line":3144},[68,56227,3890],{"emptyLinePlaceholder":1567},[68,56229,56230,56233],{"class":70,"line":3165},[68,56231,56232],{"class":74},"    .box",[68,56234,79],{"class":78},[68,56236,56237,56240,56242,56244],{"class":70,"line":3170},[68,56238,56239],{"class":85},"      position",[68,56241,89],{"class":78},[68,56243,296],{"class":85},[68,56245,95],{"class":78},[68,56247,56248,56251,56253,56256,56258],{"class":70,"line":3184},[68,56249,56250],{"class":85},"      width",[68,56252,89],{"class":78},[68,56254,56255],{"class":85},"976",[68,56257,317],{"class":316},[68,56259,95],{"class":78},[68,56261,56262,56265,56267,56269,56271],{"class":70,"line":3189},[68,56263,56264],{"class":85},"      height",[68,56266,89],{"class":78},[68,56268,3031],{"class":85},[68,56270,317],{"class":316},[68,56272,95],{"class":78},[68,56274,56275,56277,56279,56281,56283,56285],{"class":70,"line":3218},[68,56276,56187],{"class":85},[68,56278,89],{"class":78},[68,56280,1940],{"class":85},[68,56282,317],{"class":316},[68,56284,53038],{"class":85},[68,56286,95],{"class":78},[68,56288,56289],{"class":70,"line":3223},[68,56290,3677],{"class":78},[68,56292,56293],{"class":70,"line":3240},[68,56294,3890],{"emptyLinePlaceholder":1567},[68,56296,56297,56300],{"class":70,"line":3245},[68,56298,56299],{"class":74},"    .slider-footer",[68,56301,79],{"class":78},[68,56303,56304,56306,56308,56310],{"class":70,"line":3250},[68,56305,56239],{"class":85},[68,56307,89],{"class":78},[68,56309,379],{"class":85},[68,56311,95],{"class":78},[68,56313,56314,56317,56319,56321],{"class":70,"line":3255},[68,56315,56316],{"class":85},"      left",[68,56318,89],{"class":78},[68,56320,1248],{"class":85},[68,56322,95],{"class":78},[68,56324,56325,56328,56330,56332],{"class":70,"line":3269},[68,56326,56327],{"class":85},"      bottom",[68,56329,89],{"class":78},[68,56331,1248],{"class":85},[68,56333,95],{"class":78},[68,56335,56336,56338,56340,56342,56344],{"class":70,"line":3274},[68,56337,56250],{"class":85},[68,56339,89],{"class":78},[68,56341,1940],{"class":85},[68,56343,1957],{"class":316},[68,56345,95],{"class":78},[68,56347,56348,56350,56352,56354,56356],{"class":70,"line":4067},[68,56349,56264],{"class":85},[68,56351,89],{"class":78},[68,56353,2203],{"class":85},[68,56355,1957],{"class":316},[68,56357,95],{"class":78},[68,56359,56360,56363,56365,56368],{"class":70,"line":4081},[68,56361,56362],{"class":85},"      background-color",[68,56364,89],{"class":78},[68,56366,56367],{"class":85},"skyblue",[68,56369,95],{"class":78},[68,56371,56372],{"class":70,"line":4089},[68,56373,3677],{"class":78},[68,56375,56376],{"class":70,"line":4094},[68,56377,3890],{"emptyLinePlaceholder":1567},[68,56379,56380,56382,56384],{"class":70,"line":4100},[68,56381,56299],{"class":74},[68,56383,8314],{"class":52784},[68,56385,79],{"class":78},[68,56387,56388,56390,56392,56394],{"class":70,"line":4106},[68,56389,56239],{"class":85},[68,56391,89],{"class":78},[68,56393,379],{"class":85},[68,56395,95],{"class":78},[68,56397,56398,56401,56403,56405,56407],{"class":70,"line":4111},[68,56399,56400],{"class":85},"      font-size",[68,56402,89],{"class":78},[68,56404,2528],{"class":85},[68,56406,317],{"class":316},[68,56408,95],{"class":78},[68,56410,56411,56413,56415,56417,56419],{"class":70,"line":9437},[68,56412,56316],{"class":85},[68,56414,89],{"class":78},[68,56416,333],{"class":85},[68,56418,317],{"class":316},[68,56420,95],{"class":78},[68,56422,56423,56426,56428,56430,56432],{"class":70,"line":9461},[68,56424,56425],{"class":85},"      top",[68,56427,89],{"class":78},[68,56429,1948],{"class":85},[68,56431,317],{"class":316},[68,56433,95],{"class":78},[68,56435,56436],{"class":70,"line":9466},[68,56437,3677],{"class":78},[68,56439,56440],{"class":70,"line":9472},[68,56441,3890],{"emptyLinePlaceholder":1567},[68,56443,56444,56447],{"class":70,"line":9499},[68,56445,56446],{"class":52784},"    ul",[68,56448,79],{"class":78},[68,56450,56451,56453,56455,56457],{"class":70,"line":9504},[68,56452,56239],{"class":85},[68,56454,89],{"class":78},[68,56456,379],{"class":85},[68,56458,95],{"class":78},[68,56460,56461,56463,56465,56467,56469],{"class":70,"line":9510},[68,56462,56425],{"class":85},[68,56464,89],{"class":78},[68,56466,2408],{"class":85},[68,56468,317],{"class":316},[68,56470,95],{"class":78},[68,56472,56473,56475,56477,56479,56481],{"class":70,"line":9522},[68,56474,56316],{"class":85},[68,56476,89],{"class":78},[68,56478,333],{"class":85},[68,56480,317],{"class":316},[68,56482,95],{"class":78},[68,56484,56485,56488,56490,56492],{"class":70,"line":9534},[68,56486,56487],{"class":85},"      display",[68,56489,89],{"class":78},[68,56491,52960],{"class":85},[68,56493,95],{"class":78},[68,56495,56496,56499,56501,56503],{"class":70,"line":9546},[68,56497,56498],{"class":85},"      justify-content",[68,56500,89],{"class":78},[68,56502,53150],{"class":85},[68,56504,95],{"class":78},[68,56506,56507,56509,56511,56513],{"class":70,"line":11204},[68,56508,56239],{"class":85},[68,56510,89],{"class":78},[68,56512,379],{"class":85},[68,56514,95],{"class":78},[68,56516,56517,56519,56521,56523,56525],{"class":70,"line":11229},[68,56518,56250],{"class":85},[68,56520,89],{"class":78},[68,56522,5482],{"class":85},[68,56524,317],{"class":316},[68,56526,95],{"class":78},[68,56528,56529,56531,56533,56535,56537],{"class":70,"line":11252},[68,56530,56264],{"class":85},[68,56532,89],{"class":78},[68,56534,333],{"class":85},[68,56536,317],{"class":316},[68,56538,95],{"class":78},[68,56540,56541],{"class":70,"line":11276},[68,56542,3677],{"class":78},[68,56544,56545],{"class":70,"line":11281},[68,56546,3890],{"emptyLinePlaceholder":1567},[68,56548,56549,56551,56554],{"class":70,"line":11286},[68,56550,56446],{"class":52784},[68,56552,56553],{"class":52784}," li",[68,56555,79],{"class":78},[68,56557,56558,56560,56562,56564,56566],{"class":70,"line":11291},[68,56559,56250],{"class":85},[68,56561,89],{"class":78},[68,56563,333],{"class":85},[68,56565,317],{"class":316},[68,56567,95],{"class":78},[68,56569,56570,56572,56574,56576,56578],{"class":70,"line":11300},[68,56571,56264],{"class":85},[68,56573,89],{"class":78},[68,56575,333],{"class":85},[68,56577,317],{"class":316},[68,56579,95],{"class":78},[68,56581,56582,56584,56586,56589,56591,56593,56595,56597,56599,56601,56603,56606],{"class":70,"line":11305},[68,56583,56362],{"class":85},[68,56585,89],{"class":78},[68,56587,56588],{"class":85},"rgba",[68,56590,1640],{"class":78},[68,56592,1248],{"class":85},[68,56594,13923],{"class":78},[68,56596,1248],{"class":85},[68,56598,13923],{"class":78},[68,56600,1248],{"class":85},[68,56602,13923],{"class":78},[68,56604,56605],{"class":85},".4",[68,56607,4209],{"class":78},[68,56609,56610,56613,56615,56617,56619],{"class":70,"line":11311},[68,56611,56612],{"class":85},"      border-radius",[68,56614,89],{"class":78},[68,56616,313],{"class":85},[68,56618,317],{"class":316},[68,56620,95],{"class":78},[68,56622,56623],{"class":70,"line":11332},[68,56624,3677],{"class":78},[68,56626,56627],{"class":70,"line":11338},[68,56628,3890],{"emptyLinePlaceholder":1567},[68,56630,56631,56634],{"class":70,"line":11352},[68,56632,56633],{"class":74},"    .activate",[68,56635,79],{"class":78},[68,56637,56638,56640,56642,56645],{"class":70,"line":11358},[68,56639,56362],{"class":85},[68,56641,89],{"class":78},[68,56643,56644],{"class":85},"#f7f7f7",[68,56646,95],{"class":78},[68,56648,56649],{"class":70,"line":11385},[68,56650,3677],{"class":78},[68,56652,56653,56655,56657],{"class":70,"line":11394},[68,56654,53899],{"class":78},[68,56656,1553],{"class":52784},[68,56658,52791],{"class":78},[68,56660,56661,56663,56665],{"class":70,"line":11400},[68,56662,53267],{"class":78},[68,56664,52818],{"class":52784},[68,56666,52791],{"class":78},[68,56668,56669],{"class":70,"line":11408},[68,56670,3890],{"emptyLinePlaceholder":1567},[68,56672,56673,56675,56677],{"class":70,"line":11413},[68,56674,2537],{"class":78},[68,56676,53282],{"class":52784},[68,56678,52791],{"class":78},[68,56680,56681,56683,56685,56687,56689,56691],{"class":70,"line":18091},[68,56682,53626],{"class":78},[68,56684,53093],{"class":52784},[68,56686,54968],{"class":74},[68,56688,1685],{"class":78},[68,56690,54973],{"class":1742},[68,56692,52791],{"class":78},[68,56694,56695,56697,56699,56701,56703,56706],{"class":70,"line":18097},[68,56696,52825],{"class":78},[68,56698,53093],{"class":52784},[68,56700,54968],{"class":74},[68,56702,1685],{"class":78},[68,56704,56705],{"class":1742},"\"slider-wrapper\"",[68,56707,52791],{"class":78},[68,56709,56710,56713,56715,56718,56720,56723,56726,56728,56730],{"class":70,"line":18120},[68,56711,56712],{"class":78},"      \u003C",[68,56714,801],{"class":52784},[68,56716,56717],{"class":74}," src",[68,56719,1685],{"class":78},[68,56721,56722],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,56724,56725],{"class":74}," alt",[68,56727,1685],{"class":78},[68,56729,9141],{"class":1742},[68,56731,52791],{"class":78},[68,56733,56734,56736,56738],{"class":70,"line":18126},[68,56735,53258],{"class":78},[68,56737,53093],{"class":52784},[68,56739,52791],{"class":78},[68,56741,56742,56744,56746,56748,56750,56753],{"class":70,"line":18149},[68,56743,52825],{"class":78},[68,56745,53093],{"class":52784},[68,56747,54968],{"class":74},[68,56749,1685],{"class":78},[68,56751,56752],{"class":1742},"\"slider-footer\"",[68,56754,52791],{"class":78},[68,56756,56757,56759,56761,56764,56766],{"class":70,"line":18163},[68,56758,56712],{"class":78},[68,56760,170],{"class":52784},[68,56762,56763],{"class":78},">对人类来说会不会太超前了?\u003C\u002F",[68,56765,170],{"class":52784},[68,56767,52791],{"class":78},[68,56769,56770,56772,56774],{"class":70,"line":18183},[68,56771,56712],{"class":78},[68,56773,24],{"class":52784},[68,56775,52791],{"class":78},[68,56777,56778,56781,56783,56785,56787,56790,56793,56795],{"class":70,"line":18189},[68,56779,56780],{"class":78},"        \u003C",[68,56782,27],{"class":52784},[68,56784,54968],{"class":74},[68,56786,1685],{"class":78},[68,56788,56789],{"class":1742},"\"activate\"",[68,56791,56792],{"class":78},">\u003C\u002F",[68,56794,27],{"class":52784},[68,56796,52791],{"class":78},[68,56798,56799,56801,56803,56805,56807],{"class":70,"line":18200},[68,56800,56780],{"class":78},[68,56802,27],{"class":52784},[68,56804,56792],{"class":78},[68,56806,27],{"class":52784},[68,56808,52791],{"class":78},[68,56810,56811,56813,56815,56817,56819],{"class":70,"line":18223},[68,56812,56780],{"class":78},[68,56814,27],{"class":52784},[68,56816,56792],{"class":78},[68,56818,27],{"class":52784},[68,56820,52791],{"class":78},[68,56822,56823,56825,56827,56829,56831],{"class":70,"line":18245},[68,56824,56780],{"class":78},[68,56826,27],{"class":52784},[68,56828,56792],{"class":78},[68,56830,27],{"class":52784},[68,56832,52791],{"class":78},[68,56834,56835,56837,56839,56841,56843],{"class":70,"line":18250},[68,56836,56780],{"class":78},[68,56838,27],{"class":52784},[68,56840,56792],{"class":78},[68,56842,27],{"class":52784},[68,56844,52791],{"class":78},[68,56846,56847,56849,56851,56853,56855],{"class":70,"line":18256},[68,56848,56780],{"class":78},[68,56850,27],{"class":52784},[68,56852,56792],{"class":78},[68,56854,27],{"class":52784},[68,56856,52791],{"class":78},[68,56858,56859,56861,56863,56865,56867],{"class":70,"line":18270},[68,56860,56780],{"class":78},[68,56862,27],{"class":52784},[68,56864,56792],{"class":78},[68,56866,27],{"class":52784},[68,56868,52791],{"class":78},[68,56870,56871,56873,56875,56877,56879],{"class":70,"line":18283},[68,56872,56780],{"class":78},[68,56874,27],{"class":52784},[68,56876,56792],{"class":78},[68,56878,27],{"class":52784},[68,56880,52791],{"class":78},[68,56882,56883,56886,56888],{"class":70,"line":18288},[68,56884,56885],{"class":78},"      \u003C\u002F",[68,56887,24],{"class":52784},[68,56889,52791],{"class":78},[68,56891,56892,56894,56896],{"class":70,"line":18302},[68,56893,53258],{"class":78},[68,56895,53093],{"class":52784},[68,56897,52791],{"class":78},[68,56899,56900,56902,56904],{"class":70,"line":18307},[68,56901,53899],{"class":78},[68,56903,53093],{"class":52784},[68,56905,52791],{"class":78},[68,56907,56908,56910,56912],{"class":70,"line":18313},[68,56909,53626],{"class":78},[68,56911,53295],{"class":52784},[68,56913,52791],{"class":78},[68,56915,56916,56918,56921,56923],{"class":70,"line":18318},[68,56917,12709],{"class":316},[68,56919,56920],{"class":85}," arrImage",[68,56922,15052],{"class":316},[68,56924,56925],{"class":78}," [\n",[68,56927,56928,56931,56934,56937,56940,56943,56946],{"class":70,"line":18332},[68,56929,56930],{"class":78},"      { url: ",[68,56932,56933],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[68,56935,56936],{"class":78},", title: ",[68,56938,56939],{"class":1742},"'对人类来说会不会太超前了?'",[68,56941,56942],{"class":78},", color: ",[68,56944,56945],{"class":1742},"'rgba(100,67,68)'",[68,56947,56948],{"class":78}," },\n",[68,56950,56951,56953,56956,56958,56961,56963,56966],{"class":70,"line":18337},[68,56952,56930],{"class":78},[68,56954,56955],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[68,56957,56936],{"class":78},[68,56959,56960],{"class":1742},"'开启剑与雪的黑暗传说!'",[68,56962,56942],{"class":78},[68,56964,56965],{"class":1742},"'rgba(43,35,26)'",[68,56967,56948],{"class":78},[68,56969,56970,56972,56975,56977,56980,56982,56985],{"class":70,"line":18342},[68,56971,56930],{"class":78},[68,56973,56974],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[68,56976,56936],{"class":78},[68,56978,56979],{"class":1742},"'真正的jo厨出现了!'",[68,56981,56942],{"class":78},[68,56983,56984],{"class":1742},"'rgba(36,31,33)'",[68,56986,56948],{"class":78},[68,56988,56989,56991,56994,56996,56999,57001,57004],{"class":70,"line":18356},[68,56990,56930],{"class":78},[68,56992,56993],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[68,56995,56936],{"class":78},[68,56997,56998],{"class":1742},"'李玉刚:让世界通过b站看到东方大国文化'",[68,57000,56942],{"class":78},[68,57002,57003],{"class":1742},"'rgba(139,98,66)'",[68,57005,56948],{"class":78},[68,57007,57008,57010,57013,57015,57018,57020,57023],{"class":70,"line":18368},[68,57009,56930],{"class":78},[68,57011,57012],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[68,57014,56936],{"class":78},[68,57016,57017],{"class":1742},"'快来分享你的寒假日常吧'",[68,57019,56942],{"class":78},[68,57021,57022],{"class":1742},"'rgba(67,90,92)'",[68,57024,56948],{"class":78},[68,57026,57027,57029,57032,57034,57037,57039,57042],{"class":70,"line":18373},[68,57028,56930],{"class":78},[68,57030,57031],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[68,57033,56936],{"class":78},[68,57035,57036],{"class":1742},"'哔哩哔哩小年YEAR'",[68,57038,56942],{"class":78},[68,57040,57041],{"class":1742},"'rgba(166,131,143)'",[68,57043,56948],{"class":78},[68,57045,57046,57048,57051,57053,57056,57058,57061],{"class":70,"line":18386},[68,57047,56930],{"class":78},[68,57049,57050],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[68,57052,56936],{"class":78},[68,57054,57055],{"class":1742},"'一站式解决你的电脑配置问题'",[68,57057,56942],{"class":78},[68,57059,57060],{"class":1742},"'rgba(53,29,25)'",[68,57062,56948],{"class":78},[68,57064,57065,57067,57070,57072,57075,57077,57080],{"class":70,"line":18391},[68,57066,56930],{"class":78},[68,57068,57069],{"class":1742},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[68,57071,56936],{"class":78},[68,57073,57074],{"class":1742},"'谁不想和小猫咪贴贴呢?'",[68,57076,56942],{"class":78},[68,57078,57079],{"class":1742},"'rgba(99,72,114)'",[68,57081,57082],{"class":78}," }\n",[68,57084,57085],{"class":70,"line":18396},[68,57086,54591],{"class":78},[68,57088,57089,57091,57094,57096,57098,57100,57102,57105],{"class":70,"line":18401},[68,57090,12709],{"class":316},[68,57092,57093],{"class":85}," img",[68,57095,15052],{"class":316},[68,57097,55877],{"class":78},[68,57099,55880],{"class":74},[68,57101,1640],{"class":78},[68,57103,57104],{"class":1742},"'.slider-wrapper img'",[68,57106,1646],{"class":78},[68,57108,57109,57111,57113,57115,57117,57119,57121,57124],{"class":70,"line":18414},[68,57110,12709],{"class":316},[68,57112,8314],{"class":85},[68,57114,15052],{"class":316},[68,57116,55877],{"class":78},[68,57118,55880],{"class":74},[68,57120,1640],{"class":78},[68,57122,57123],{"class":1742},"'.slider-footer p'",[68,57125,1646],{"class":78},[68,57127,57128,57130,57133,57135,57137,57139,57141,57144],{"class":70,"line":18419},[68,57129,12709],{"class":316},[68,57131,57132],{"class":85}," color",[68,57134,15052],{"class":316},[68,57136,55877],{"class":78},[68,57138,55880],{"class":74},[68,57140,1640],{"class":78},[68,57142,57143],{"class":1742},"'.slider-footer'",[68,57145,1646],{"class":78},[68,57147,57148,57150,57153,57155,57157,57160,57162,57165],{"class":70,"line":34117},[68,57149,12709],{"class":316},[68,57151,57152],{"class":85}," lis",[68,57154,15052],{"class":316},[68,57156,55877],{"class":78},[68,57158,57159],{"class":74},"querySelectorAll",[68,57161,1640],{"class":78},[68,57163,57164],{"class":1742},"'.slider-footer ul li'",[68,57166,1646],{"class":78},[68,57168,57169,57171,57173,57175],{"class":70,"line":34123},[68,57170,53701],{"class":316},[68,57172,10926],{"class":78},[68,57174,1685],{"class":316},[68,57176,57177],{"class":85}," 1\n",[68,57179,57180,57182,57185,57187,57189,57191,57193],{"class":70,"line":34129},[68,57181,53701],{"class":316},[68,57183,57184],{"class":78}," timer ",[68,57186,1685],{"class":316},[68,57188,55925],{"class":74},[68,57190,1640],{"class":78},[68,57192,55930],{"class":316},[68,57194,55933],{"class":78},[68,57196,57197,57200,57202],{"class":70,"line":34135},[68,57198,57199],{"class":78},"      img.src ",[68,57201,1685],{"class":316},[68,57203,57204],{"class":78}," arrImage[i].url\n",[68,57206,57207,57210,57212],{"class":70,"line":34141},[68,57208,57209],{"class":78},"      p.innerHTML ",[68,57211,1685],{"class":316},[68,57213,57214],{"class":78}," arrImage[i].title\n",[68,57216,57217,57220,57222],{"class":70,"line":34152},[68,57218,57219],{"class":78},"      color.style.backgroundColor ",[68,57221,1685],{"class":316},[68,57223,57224],{"class":78}," arrImage[i].color\n",[68,57226,57227],{"class":70,"line":34158},[68,57228,57229],{"class":302},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[68,57231,57232],{"class":70,"line":34178},[68,57233,57234],{"class":302},"      \u002F\u002F li.classList.add('activate')\n",[68,57236,57237],{"class":70,"line":34184},[68,57238,57239],{"class":302},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[68,57241,57242],{"class":70,"line":34195},[68,57243,57244],{"class":302},"      \u002F\u002F lis[i].classList.remove('activate')\n",[68,57246,57247,57250,57252,57254,57257,57260,57263,57265,57268],{"class":70,"line":34201},[68,57248,57249],{"class":78},"      document.",[68,57251,55880],{"class":74},[68,57253,1640],{"class":78},[68,57255,57256],{"class":1742},"'.activate'",[68,57258,57259],{"class":78},")?.classList.",[68,57261,57262],{"class":74},"toggle",[68,57264,1640],{"class":78},[68,57266,57267],{"class":1742},"'activate'",[68,57269,1646],{"class":78},[68,57271,57272,57275,57277,57279,57281],{"class":70,"line":34207},[68,57273,57274],{"class":78},"      lis[i].classList.",[68,57276,6823],{"class":74},[68,57278,1640],{"class":78},[68,57280,57267],{"class":1742},[68,57282,1646],{"class":78},[68,57284,57285],{"class":70,"line":34213},[68,57286,3890],{"emptyLinePlaceholder":1567},[68,57288,57289,57292,57294,57296,57298,57300,57302,57304,57307],{"class":70,"line":34219},[68,57290,57291],{"class":78},"      i ",[68,57293,1685],{"class":316},[68,57295,55964],{"class":78},[68,57297,2109],{"class":316},[68,57299,26604],{"class":85},[68,57301,15202],{"class":78},[68,57303,1957],{"class":316},[68,57305,57306],{"class":78}," arrImage.",[68,57308,57309],{"class":85},"length\n",[68,57311,57312],{"class":70,"line":34225},[68,57313,3890],{"emptyLinePlaceholder":1567},[68,57315,57316,57318,57320],{"class":70,"line":34231},[68,57317,56016],{"class":78},[68,57319,7899],{"class":85},[68,57321,1646],{"class":78},[68,57323,57324,57326,57328],{"class":70,"line":34237},[68,57325,53899],{"class":78},[68,57327,53295],{"class":52784},[68,57329,52791],{"class":78},[68,57331,57332,57334,57336],{"class":70,"line":34257},[68,57333,53267],{"class":78},[68,57335,53282],{"class":52784},[68,57337,52791],{"class":78},[68,57339,57340],{"class":70,"line":34263},[68,57341,3890],{"emptyLinePlaceholder":1567},[68,57343,57344,57346,57348],{"class":70,"line":34279},[68,57345,53267],{"class":78},[68,57347,52119],{"class":52784},[68,57349,52791],{"class":78},[170,57351,57352],{},[801,57353],{"alt":63,"src":57354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[170,57356,57357],{},"?.就是短路保护,确保输出正常进行",[170,57359,57360],{},"不要忘记取余%,有时候可以用",[170,57362,57363],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[263,57365,57366],{"start":82},[27,57367,57368],{},"法2",[58,57370,57372],{"className":52117,"code":57371,"language":52119,"meta":63,"style":63},"\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",[65,57373,57374,57384,57398,57402,57410,57424,57444,57456,57464,57470,57480,57490,57494,57498,57504,57514,57518,57522,57528,57538,57550,57562,57576,57580,57584,57590,57600,57610,57620,57632,57644,57654,57658,57662,57670,57680,57692,57704,57716,57720,57724,57730,57740,57752,57764,57774,57784,57794,57806,57818,57822,57826,57834,57846,57858,57884,57896,57900,57904,57910,57920,57924,57932,57940,57944,57952,57966,57980,58000,58008,58022,58034,58042,58060,58072,58084,58096,58108,58120,58132,58144,58152,58160,58168,58176,58187,58203,58219,58235,58251,58267,58283,58299,58315,58319,58324,58342,58360,58370,58375,58380,58391,58397,58412,58421,58425,58430,58439,58444,58453,58458,58463,58468,58491,58521,58525,58533,58537,58545,58553,58557],{"__ignoreMap":63},[68,57375,57376,57378,57380,57382],{"class":70,"line":71},[68,57377,52781],{"class":78},[68,57379,52785],{"class":52784},[68,57381,52788],{"class":74},[68,57383,52791],{"class":78},[68,57385,57386,57388,57390,57392,57394,57396],{"class":70,"line":82},[68,57387,2537],{"class":78},[68,57389,52119],{"class":52784},[68,57391,52800],{"class":74},[68,57393,1685],{"class":78},[68,57395,52805],{"class":1742},[68,57397,52791],{"class":78},[68,57399,57400],{"class":70,"line":98},[68,57401,3890],{"emptyLinePlaceholder":1567},[68,57403,57404,57406,57408],{"class":70,"line":104},[68,57405,2537],{"class":78},[68,57407,52818],{"class":52784},[68,57409,52791],{"class":78},[68,57411,57412,57414,57416,57418,57420,57422],{"class":70,"line":112},[68,57413,53626],{"class":78},[68,57415,52828],{"class":52784},[68,57417,52831],{"class":74},[68,57419,1685],{"class":78},[68,57421,52836],{"class":1742},[68,57423,52791],{"class":78},[68,57425,57426,57428,57430,57432,57434,57436,57438,57440,57442],{"class":70,"line":124},[68,57427,53626],{"class":78},[68,57429,52828],{"class":52784},[68,57431,16408],{"class":74},[68,57433,1685],{"class":78},[68,57435,52875],{"class":1742},[68,57437,52855],{"class":74},[68,57439,1685],{"class":78},[68,57441,52882],{"class":1742},[68,57443,52791],{"class":78},[68,57445,57446,57448,57450,57452,57454],{"class":70,"line":1496},[68,57447,53626],{"class":78},[68,57449,52891],{"class":52784},[68,57451,52894],{"class":78},[68,57453,52891],{"class":52784},[68,57455,52791],{"class":78},[68,57457,57458,57460,57462],{"class":70,"line":1502},[68,57459,53626],{"class":78},[68,57461,1553],{"class":52784},[68,57463,52791],{"class":78},[68,57465,57466,57468],{"class":70,"line":1510},[68,57467,7892],{"class":52784},[68,57469,79],{"class":78},[68,57471,57472,57474,57476,57478],{"class":70,"line":1521},[68,57473,56176],{"class":85},[68,57475,89],{"class":78},[68,57477,1248],{"class":85},[68,57479,95],{"class":78},[68,57481,57482,57484,57486,57488],{"class":70,"line":3103},[68,57483,56187],{"class":85},[68,57485,89],{"class":78},[68,57487,1248],{"class":85},[68,57489,95],{"class":78},[68,57491,57492],{"class":70,"line":3108},[68,57493,3677],{"class":78},[68,57495,57496],{"class":70,"line":3114},[68,57497,3890],{"emptyLinePlaceholder":1567},[68,57499,57500,57502],{"class":70,"line":3119},[68,57501,56206],{"class":52784},[68,57503,79],{"class":78},[68,57505,57506,57508,57510,57512],{"class":70,"line":3133},[68,57507,56213],{"class":85},[68,57509,89],{"class":78},[68,57511,151],{"class":85},[68,57513,95],{"class":78},[68,57515,57516],{"class":70,"line":3138},[68,57517,3677],{"class":78},[68,57519,57520],{"class":70,"line":3144},[68,57521,3890],{"emptyLinePlaceholder":1567},[68,57523,57524,57526],{"class":70,"line":3165},[68,57525,56232],{"class":74},[68,57527,79],{"class":78},[68,57529,57530,57532,57534,57536],{"class":70,"line":3170},[68,57531,56239],{"class":85},[68,57533,89],{"class":78},[68,57535,296],{"class":85},[68,57537,95],{"class":78},[68,57539,57540,57542,57544,57546,57548],{"class":70,"line":3184},[68,57541,56250],{"class":85},[68,57543,89],{"class":78},[68,57545,56255],{"class":85},[68,57547,317],{"class":316},[68,57549,95],{"class":78},[68,57551,57552,57554,57556,57558,57560],{"class":70,"line":3189},[68,57553,56264],{"class":85},[68,57555,89],{"class":78},[68,57557,3031],{"class":85},[68,57559,317],{"class":316},[68,57561,95],{"class":78},[68,57563,57564,57566,57568,57570,57572,57574],{"class":70,"line":3218},[68,57565,56187],{"class":85},[68,57567,89],{"class":78},[68,57569,1940],{"class":85},[68,57571,317],{"class":316},[68,57573,53038],{"class":85},[68,57575,95],{"class":78},[68,57577,57578],{"class":70,"line":3223},[68,57579,3677],{"class":78},[68,57581,57582],{"class":70,"line":3240},[68,57583,3890],{"emptyLinePlaceholder":1567},[68,57585,57586,57588],{"class":70,"line":3245},[68,57587,56299],{"class":74},[68,57589,79],{"class":78},[68,57591,57592,57594,57596,57598],{"class":70,"line":3250},[68,57593,56239],{"class":85},[68,57595,89],{"class":78},[68,57597,379],{"class":85},[68,57599,95],{"class":78},[68,57601,57602,57604,57606,57608],{"class":70,"line":3255},[68,57603,56316],{"class":85},[68,57605,89],{"class":78},[68,57607,1248],{"class":85},[68,57609,95],{"class":78},[68,57611,57612,57614,57616,57618],{"class":70,"line":3269},[68,57613,56327],{"class":85},[68,57615,89],{"class":78},[68,57617,1248],{"class":85},[68,57619,95],{"class":78},[68,57621,57622,57624,57626,57628,57630],{"class":70,"line":3274},[68,57623,56250],{"class":85},[68,57625,89],{"class":78},[68,57627,1940],{"class":85},[68,57629,1957],{"class":316},[68,57631,95],{"class":78},[68,57633,57634,57636,57638,57640,57642],{"class":70,"line":4067},[68,57635,56264],{"class":85},[68,57637,89],{"class":78},[68,57639,2203],{"class":85},[68,57641,1957],{"class":316},[68,57643,95],{"class":78},[68,57645,57646,57648,57650,57652],{"class":70,"line":4081},[68,57647,56362],{"class":85},[68,57649,89],{"class":78},[68,57651,56367],{"class":85},[68,57653,95],{"class":78},[68,57655,57656],{"class":70,"line":4089},[68,57657,3677],{"class":78},[68,57659,57660],{"class":70,"line":4094},[68,57661,3890],{"emptyLinePlaceholder":1567},[68,57663,57664,57666,57668],{"class":70,"line":4100},[68,57665,56299],{"class":74},[68,57667,8314],{"class":52784},[68,57669,79],{"class":78},[68,57671,57672,57674,57676,57678],{"class":70,"line":4106},[68,57673,56239],{"class":85},[68,57675,89],{"class":78},[68,57677,379],{"class":85},[68,57679,95],{"class":78},[68,57681,57682,57684,57686,57688,57690],{"class":70,"line":4111},[68,57683,56400],{"class":85},[68,57685,89],{"class":78},[68,57687,2528],{"class":85},[68,57689,317],{"class":316},[68,57691,95],{"class":78},[68,57693,57694,57696,57698,57700,57702],{"class":70,"line":9437},[68,57695,56316],{"class":85},[68,57697,89],{"class":78},[68,57699,333],{"class":85},[68,57701,317],{"class":316},[68,57703,95],{"class":78},[68,57705,57706,57708,57710,57712,57714],{"class":70,"line":9461},[68,57707,56425],{"class":85},[68,57709,89],{"class":78},[68,57711,1948],{"class":85},[68,57713,317],{"class":316},[68,57715,95],{"class":78},[68,57717,57718],{"class":70,"line":9466},[68,57719,3677],{"class":78},[68,57721,57722],{"class":70,"line":9472},[68,57723,3890],{"emptyLinePlaceholder":1567},[68,57725,57726,57728],{"class":70,"line":9499},[68,57727,56446],{"class":52784},[68,57729,79],{"class":78},[68,57731,57732,57734,57736,57738],{"class":70,"line":9504},[68,57733,56239],{"class":85},[68,57735,89],{"class":78},[68,57737,379],{"class":85},[68,57739,95],{"class":78},[68,57741,57742,57744,57746,57748,57750],{"class":70,"line":9510},[68,57743,56425],{"class":85},[68,57745,89],{"class":78},[68,57747,2408],{"class":85},[68,57749,317],{"class":316},[68,57751,95],{"class":78},[68,57753,57754,57756,57758,57760,57762],{"class":70,"line":9522},[68,57755,56316],{"class":85},[68,57757,89],{"class":78},[68,57759,333],{"class":85},[68,57761,317],{"class":316},[68,57763,95],{"class":78},[68,57765,57766,57768,57770,57772],{"class":70,"line":9534},[68,57767,56487],{"class":85},[68,57769,89],{"class":78},[68,57771,52960],{"class":85},[68,57773,95],{"class":78},[68,57775,57776,57778,57780,57782],{"class":70,"line":9546},[68,57777,56498],{"class":85},[68,57779,89],{"class":78},[68,57781,53150],{"class":85},[68,57783,95],{"class":78},[68,57785,57786,57788,57790,57792],{"class":70,"line":11204},[68,57787,56239],{"class":85},[68,57789,89],{"class":78},[68,57791,379],{"class":85},[68,57793,95],{"class":78},[68,57795,57796,57798,57800,57802,57804],{"class":70,"line":11229},[68,57797,56250],{"class":85},[68,57799,89],{"class":78},[68,57801,5482],{"class":85},[68,57803,317],{"class":316},[68,57805,95],{"class":78},[68,57807,57808,57810,57812,57814,57816],{"class":70,"line":11252},[68,57809,56264],{"class":85},[68,57811,89],{"class":78},[68,57813,333],{"class":85},[68,57815,317],{"class":316},[68,57817,95],{"class":78},[68,57819,57820],{"class":70,"line":11276},[68,57821,3677],{"class":78},[68,57823,57824],{"class":70,"line":11281},[68,57825,3890],{"emptyLinePlaceholder":1567},[68,57827,57828,57830,57832],{"class":70,"line":11286},[68,57829,56446],{"class":52784},[68,57831,56553],{"class":52784},[68,57833,79],{"class":78},[68,57835,57836,57838,57840,57842,57844],{"class":70,"line":11291},[68,57837,56250],{"class":85},[68,57839,89],{"class":78},[68,57841,333],{"class":85},[68,57843,317],{"class":316},[68,57845,95],{"class":78},[68,57847,57848,57850,57852,57854,57856],{"class":70,"line":11300},[68,57849,56264],{"class":85},[68,57851,89],{"class":78},[68,57853,333],{"class":85},[68,57855,317],{"class":316},[68,57857,95],{"class":78},[68,57859,57860,57862,57864,57866,57868,57870,57872,57874,57876,57878,57880,57882],{"class":70,"line":11305},[68,57861,56362],{"class":85},[68,57863,89],{"class":78},[68,57865,56588],{"class":85},[68,57867,1640],{"class":78},[68,57869,1248],{"class":85},[68,57871,13923],{"class":78},[68,57873,1248],{"class":85},[68,57875,13923],{"class":78},[68,57877,1248],{"class":85},[68,57879,13923],{"class":78},[68,57881,56605],{"class":85},[68,57883,4209],{"class":78},[68,57885,57886,57888,57890,57892,57894],{"class":70,"line":11311},[68,57887,56612],{"class":85},[68,57889,89],{"class":78},[68,57891,313],{"class":85},[68,57893,317],{"class":316},[68,57895,95],{"class":78},[68,57897,57898],{"class":70,"line":11332},[68,57899,3677],{"class":78},[68,57901,57902],{"class":70,"line":11338},[68,57903,3890],{"emptyLinePlaceholder":1567},[68,57905,57906,57908],{"class":70,"line":11352},[68,57907,56633],{"class":74},[68,57909,79],{"class":78},[68,57911,57912,57914,57916,57918],{"class":70,"line":11358},[68,57913,56362],{"class":85},[68,57915,89],{"class":78},[68,57917,56644],{"class":85},[68,57919,95],{"class":78},[68,57921,57922],{"class":70,"line":11385},[68,57923,3677],{"class":78},[68,57925,57926,57928,57930],{"class":70,"line":11394},[68,57927,53899],{"class":78},[68,57929,1553],{"class":52784},[68,57931,52791],{"class":78},[68,57933,57934,57936,57938],{"class":70,"line":11400},[68,57935,53267],{"class":78},[68,57937,52818],{"class":52784},[68,57939,52791],{"class":78},[68,57941,57942],{"class":70,"line":11408},[68,57943,3890],{"emptyLinePlaceholder":1567},[68,57945,57946,57948,57950],{"class":70,"line":11413},[68,57947,2537],{"class":78},[68,57949,53282],{"class":52784},[68,57951,52791],{"class":78},[68,57953,57954,57956,57958,57960,57962,57964],{"class":70,"line":18091},[68,57955,53626],{"class":78},[68,57957,53093],{"class":52784},[68,57959,54968],{"class":74},[68,57961,1685],{"class":78},[68,57963,54973],{"class":1742},[68,57965,52791],{"class":78},[68,57967,57968,57970,57972,57974,57976,57978],{"class":70,"line":18097},[68,57969,52825],{"class":78},[68,57971,53093],{"class":52784},[68,57973,54968],{"class":74},[68,57975,1685],{"class":78},[68,57977,56705],{"class":1742},[68,57979,52791],{"class":78},[68,57981,57982,57984,57986,57988,57990,57992,57994,57996,57998],{"class":70,"line":18120},[68,57983,56712],{"class":78},[68,57985,801],{"class":52784},[68,57987,56717],{"class":74},[68,57989,1685],{"class":78},[68,57991,56722],{"class":1742},[68,57993,56725],{"class":74},[68,57995,1685],{"class":78},[68,57997,9141],{"class":1742},[68,57999,52791],{"class":78},[68,58001,58002,58004,58006],{"class":70,"line":18126},[68,58003,53258],{"class":78},[68,58005,53093],{"class":52784},[68,58007,52791],{"class":78},[68,58009,58010,58012,58014,58016,58018,58020],{"class":70,"line":18149},[68,58011,52825],{"class":78},[68,58013,53093],{"class":52784},[68,58015,54968],{"class":74},[68,58017,1685],{"class":78},[68,58019,56752],{"class":1742},[68,58021,52791],{"class":78},[68,58023,58024,58026,58028,58030,58032],{"class":70,"line":18163},[68,58025,56712],{"class":78},[68,58027,170],{"class":52784},[68,58029,56763],{"class":78},[68,58031,170],{"class":52784},[68,58033,52791],{"class":78},[68,58035,58036,58038,58040],{"class":70,"line":18183},[68,58037,56712],{"class":78},[68,58039,24],{"class":52784},[68,58041,52791],{"class":78},[68,58043,58044,58046,58048,58050,58052,58054,58056,58058],{"class":70,"line":18189},[68,58045,56780],{"class":78},[68,58047,27],{"class":52784},[68,58049,54968],{"class":74},[68,58051,1685],{"class":78},[68,58053,56789],{"class":1742},[68,58055,56792],{"class":78},[68,58057,27],{"class":52784},[68,58059,52791],{"class":78},[68,58061,58062,58064,58066,58068,58070],{"class":70,"line":18200},[68,58063,56780],{"class":78},[68,58065,27],{"class":52784},[68,58067,56792],{"class":78},[68,58069,27],{"class":52784},[68,58071,52791],{"class":78},[68,58073,58074,58076,58078,58080,58082],{"class":70,"line":18223},[68,58075,56780],{"class":78},[68,58077,27],{"class":52784},[68,58079,56792],{"class":78},[68,58081,27],{"class":52784},[68,58083,52791],{"class":78},[68,58085,58086,58088,58090,58092,58094],{"class":70,"line":18245},[68,58087,56780],{"class":78},[68,58089,27],{"class":52784},[68,58091,56792],{"class":78},[68,58093,27],{"class":52784},[68,58095,52791],{"class":78},[68,58097,58098,58100,58102,58104,58106],{"class":70,"line":18250},[68,58099,56780],{"class":78},[68,58101,27],{"class":52784},[68,58103,56792],{"class":78},[68,58105,27],{"class":52784},[68,58107,52791],{"class":78},[68,58109,58110,58112,58114,58116,58118],{"class":70,"line":18256},[68,58111,56780],{"class":78},[68,58113,27],{"class":52784},[68,58115,56792],{"class":78},[68,58117,27],{"class":52784},[68,58119,52791],{"class":78},[68,58121,58122,58124,58126,58128,58130],{"class":70,"line":18270},[68,58123,56780],{"class":78},[68,58125,27],{"class":52784},[68,58127,56792],{"class":78},[68,58129,27],{"class":52784},[68,58131,52791],{"class":78},[68,58133,58134,58136,58138,58140,58142],{"class":70,"line":18283},[68,58135,56780],{"class":78},[68,58137,27],{"class":52784},[68,58139,56792],{"class":78},[68,58141,27],{"class":52784},[68,58143,52791],{"class":78},[68,58145,58146,58148,58150],{"class":70,"line":18288},[68,58147,56885],{"class":78},[68,58149,24],{"class":52784},[68,58151,52791],{"class":78},[68,58153,58154,58156,58158],{"class":70,"line":18302},[68,58155,53258],{"class":78},[68,58157,53093],{"class":52784},[68,58159,52791],{"class":78},[68,58161,58162,58164,58166],{"class":70,"line":18307},[68,58163,53899],{"class":78},[68,58165,53093],{"class":52784},[68,58167,52791],{"class":78},[68,58169,58170,58172,58174],{"class":70,"line":18313},[68,58171,53626],{"class":78},[68,58173,53295],{"class":52784},[68,58175,52791],{"class":78},[68,58177,58178,58180,58183,58185],{"class":70,"line":18318},[68,58179,12709],{"class":316},[68,58181,58182],{"class":85}," sliderData",[68,58184,15052],{"class":316},[68,58186,56925],{"class":78},[68,58188,58189,58191,58193,58195,58197,58199,58201],{"class":70,"line":18332},[68,58190,56930],{"class":78},[68,58192,56933],{"class":1742},[68,58194,56936],{"class":78},[68,58196,56939],{"class":1742},[68,58198,56942],{"class":78},[68,58200,56945],{"class":1742},[68,58202,56948],{"class":78},[68,58204,58205,58207,58209,58211,58213,58215,58217],{"class":70,"line":18337},[68,58206,56930],{"class":78},[68,58208,56955],{"class":1742},[68,58210,56936],{"class":78},[68,58212,56960],{"class":1742},[68,58214,56942],{"class":78},[68,58216,56965],{"class":1742},[68,58218,56948],{"class":78},[68,58220,58221,58223,58225,58227,58229,58231,58233],{"class":70,"line":18342},[68,58222,56930],{"class":78},[68,58224,56974],{"class":1742},[68,58226,56936],{"class":78},[68,58228,56979],{"class":1742},[68,58230,56942],{"class":78},[68,58232,56984],{"class":1742},[68,58234,56948],{"class":78},[68,58236,58237,58239,58241,58243,58245,58247,58249],{"class":70,"line":18356},[68,58238,56930],{"class":78},[68,58240,56993],{"class":1742},[68,58242,56936],{"class":78},[68,58244,56998],{"class":1742},[68,58246,56942],{"class":78},[68,58248,57003],{"class":1742},[68,58250,56948],{"class":78},[68,58252,58253,58255,58257,58259,58261,58263,58265],{"class":70,"line":18368},[68,58254,56930],{"class":78},[68,58256,57012],{"class":1742},[68,58258,56936],{"class":78},[68,58260,57017],{"class":1742},[68,58262,56942],{"class":78},[68,58264,57022],{"class":1742},[68,58266,56948],{"class":78},[68,58268,58269,58271,58273,58275,58277,58279,58281],{"class":70,"line":18373},[68,58270,56930],{"class":78},[68,58272,57031],{"class":1742},[68,58274,56936],{"class":78},[68,58276,57036],{"class":1742},[68,58278,56942],{"class":78},[68,58280,57041],{"class":1742},[68,58282,56948],{"class":78},[68,58284,58285,58287,58289,58291,58293,58295,58297],{"class":70,"line":18386},[68,58286,56930],{"class":78},[68,58288,57050],{"class":1742},[68,58290,56936],{"class":78},[68,58292,57055],{"class":1742},[68,58294,56942],{"class":78},[68,58296,57060],{"class":1742},[68,58298,56948],{"class":78},[68,58300,58301,58303,58305,58307,58309,58311,58313],{"class":70,"line":18391},[68,58302,56930],{"class":78},[68,58304,57069],{"class":1742},[68,58306,56936],{"class":78},[68,58308,57074],{"class":1742},[68,58310,56942],{"class":78},[68,58312,57079],{"class":1742},[68,58314,57082],{"class":78},[68,58316,58317],{"class":70,"line":18396},[68,58318,54591],{"class":78},[68,58320,58321],{"class":70,"line":18401},[68,58322,58323],{"class":302},"    \u002F\u002F 1.获取元素\n",[68,58325,58326,58328,58330,58332,58334,58336,58338,58340],{"class":70,"line":18414},[68,58327,12709],{"class":316},[68,58329,57093],{"class":85},[68,58331,15052],{"class":316},[68,58333,55877],{"class":78},[68,58335,55880],{"class":74},[68,58337,1640],{"class":78},[68,58339,57104],{"class":1742},[68,58341,1646],{"class":78},[68,58343,58344,58346,58348,58350,58352,58354,58356,58358],{"class":70,"line":18419},[68,58345,12709],{"class":316},[68,58347,8314],{"class":85},[68,58349,15052],{"class":316},[68,58351,55877],{"class":78},[68,58353,55880],{"class":74},[68,58355,1640],{"class":78},[68,58357,57123],{"class":1742},[68,58359,1646],{"class":78},[68,58361,58362,58364,58366,58368],{"class":70,"line":34117},[68,58363,53701],{"class":316},[68,58365,10926],{"class":78},[68,58367,1685],{"class":316},[68,58369,48817],{"class":85},[68,58371,58372],{"class":70,"line":34123},[68,58373,58374],{"class":302},"    \u002F\u002F 2.开启定时器\n",[68,58376,58377],{"class":70,"line":34129},[68,58378,58379],{"class":302},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[68,58381,58382,58385,58387,58389],{"class":70,"line":34135},[68,58383,58384],{"class":74},"    setInterval",[68,58386,1640],{"class":78},[68,58388,55930],{"class":316},[68,58390,55933],{"class":78},[68,58392,58393,58395],{"class":70,"line":34141},[68,58394,55938],{"class":78},[68,58396,4192],{"class":316},[68,58398,58399,58401,58403,58405,58408,58410],{"class":70,"line":34152},[68,58400,55961],{"class":316},[68,58402,55964],{"class":78},[68,58404,3201],{"class":316},[68,58406,58407],{"class":78}," sliderData.",[68,58409,53450],{"class":85},[68,58411,13930],{"class":78},[68,58413,58414,58417,58419],{"class":70,"line":34158},[68,58415,58416],{"class":78},"        i ",[68,58418,1685],{"class":316},[68,58420,48817],{"class":85},[68,58422,58423],{"class":70,"line":34178},[68,58424,53880],{"class":78},[68,58426,58427],{"class":70,"line":34184},[68,58428,58429],{"class":302},"      \u002F\u002F 更换图片路径\n",[68,58431,58432,58434,58436],{"class":70,"line":34195},[68,58433,57199],{"class":78},[68,58435,1685],{"class":316},[68,58437,58438],{"class":78}," sliderData[i].url\n",[68,58440,58441],{"class":70,"line":34201},[68,58442,58443],{"class":302},"      \u002F\u002F 把文字写到p里面\n",[68,58445,58446,58448,58450],{"class":70,"line":34207},[68,58447,57209],{"class":78},[68,58449,1685],{"class":316},[68,58451,58452],{"class":78}," sliderData[i].title\n",[68,58454,58455],{"class":70,"line":34213},[68,58456,58457],{"class":302},"      \u002F\u002F 小圆点\n",[68,58459,58460],{"class":70,"line":34219},[68,58461,58462],{"class":302},"      \u002F\u002F 先删除以前的active\n",[68,58464,58465],{"class":70,"line":34225},[68,58466,58467],{"class":302},"      \u002F\u002F 只让当前li添加active\n",[68,58469,58470,58472,58474,58476,58479,58482,58485,58487,58489],{"class":70,"line":34231},[68,58471,57249],{"class":78},[68,58473,55880],{"class":74},[68,58475,1640],{"class":78},[68,58477,58478],{"class":1742},"'.slider-footer .activate'",[68,58480,58481],{"class":78},").classList.",[68,58483,58484],{"class":74},"remove",[68,58486,1640],{"class":78},[68,58488,57267],{"class":1742},[68,58490,1646],{"class":78},[68,58492,58493,58495,58497,58499,58502,58504,58506,58508,58511,58513,58515,58517,58519],{"class":70,"line":34237},[68,58494,57249],{"class":78},[68,58496,55880],{"class":74},[68,58498,1640],{"class":78},[68,58500,58501],{"class":1742},"`.slider-footer ul li:nth-child(${",[68,58503,2070],{"class":78},[68,58505,47050],{"class":316},[68,58507,26604],{"class":85},[68,58509,58510],{"class":1742},"})`",[68,58512,58481],{"class":78},[68,58514,6823],{"class":74},[68,58516,1640],{"class":78},[68,58518,57267],{"class":1742},[68,58520,1646],{"class":78},[68,58522,58523],{"class":70,"line":34257},[68,58524,3890],{"emptyLinePlaceholder":1567},[68,58526,58527,58529,58531],{"class":70,"line":34263},[68,58528,56016],{"class":78},[68,58530,7899],{"class":85},[68,58532,1646],{"class":78},[68,58534,58535],{"class":70,"line":34279},[68,58536,3890],{"emptyLinePlaceholder":1567},[68,58538,58539,58541,58543],{"class":70,"line":34285},[68,58540,53899],{"class":78},[68,58542,53295],{"class":52784},[68,58544,52791],{"class":78},[68,58546,58547,58549,58551],{"class":70,"line":34299},[68,58548,53267],{"class":78},[68,58550,53282],{"class":52784},[68,58552,52791],{"class":78},[68,58554,58555],{"class":70,"line":34305},[68,58556,3890],{"emptyLinePlaceholder":1567},[68,58558,58559,58561,58563],{"class":70,"line":34320},[68,58560,53267],{"class":78},[68,58562,52119],{"class":52784},[68,58564,52791],{"class":78},[19,58566,58568],{"id":58567},"_317-重要知识点","3.1.7 重要知识点",[170,58570,58571,58572],{},"浏览器在渲染文本时， ",[268,58573,58574],{},"没有空格或换行符就没有“断行点”",[170,58576,58577],{},[801,58578],{"alt":63,"src":58579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[170,58581,58582],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[170,58584,58585],{},[801,58586],{"alt":63,"src":58587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[170,58589,58590],{},[801,58591],{"alt":63,"src":58592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58594,58596],{"id":58595},"_32-dom事件基础","3.2 DOM事件基础",[19,58598,58600],{"id":58599},"_321-事件监听","3.2.1 事件监听",[170,58602,58603],{},[801,58604],{"alt":63,"src":58605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[170,58607,58608],{},"事件监听有响应的发生",[170,58610,58611],{},[801,58612],{"alt":63,"src":58613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[170,58615,58616],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[170,58618,58619],{},"对于有名函数,要执行的函数名后边不要加()",[19,58621,58623],{"id":58622},"_322-随机点名案例","3.2.2 随机点名案例",[58,58625,58627],{"className":52117,"code":58626,"language":52119,"meta":63,"style":63},"\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",[65,58628,58629,58639,58653,58657,58665,58679,58699,58711,58719,58725,58735,58745,58749,58753,58760,58771,58775,58779,58785,58797,58811,58821,58833,58846,58850,58854,58861,58865,58878,58890,58902,58906,58910,58914,58921,58931,58935,58939,58948,58960,58972,58987,58991,58999,59007,59011,59019,59032,59046,59059,59079,59087,59102,59122,59142,59150,59154,59162,59167,59203,59223,59228,59247,59252,59263,59268,59279,59284,59303,59318,59323,59349,59359,59368,59373,59389,59394,59399,59404,59419,59423,59427,59432,59451,59468,59476,59481,59496,59500,59504,59512,59520,59524],{"__ignoreMap":63},[68,58630,58631,58633,58635,58637],{"class":70,"line":71},[68,58632,52781],{"class":78},[68,58634,52785],{"class":52784},[68,58636,52788],{"class":74},[68,58638,52791],{"class":78},[68,58640,58641,58643,58645,58647,58649,58651],{"class":70,"line":82},[68,58642,2537],{"class":78},[68,58644,52119],{"class":52784},[68,58646,52800],{"class":74},[68,58648,1685],{"class":78},[68,58650,52805],{"class":1742},[68,58652,52791],{"class":78},[68,58654,58655],{"class":70,"line":98},[68,58656,3890],{"emptyLinePlaceholder":1567},[68,58658,58659,58661,58663],{"class":70,"line":104},[68,58660,2537],{"class":78},[68,58662,52818],{"class":52784},[68,58664,52791],{"class":78},[68,58666,58667,58669,58671,58673,58675,58677],{"class":70,"line":112},[68,58668,53626],{"class":78},[68,58670,52828],{"class":52784},[68,58672,52831],{"class":74},[68,58674,1685],{"class":78},[68,58676,52836],{"class":1742},[68,58678,52791],{"class":78},[68,58680,58681,58683,58685,58687,58689,58691,58693,58695,58697],{"class":70,"line":124},[68,58682,53626],{"class":78},[68,58684,52828],{"class":52784},[68,58686,16408],{"class":74},[68,58688,1685],{"class":78},[68,58690,52875],{"class":1742},[68,58692,52855],{"class":74},[68,58694,1685],{"class":78},[68,58696,52882],{"class":1742},[68,58698,52791],{"class":78},[68,58700,58701,58703,58705,58707,58709],{"class":70,"line":1496},[68,58702,53626],{"class":78},[68,58704,52891],{"class":52784},[68,58706,52894],{"class":78},[68,58708,52891],{"class":52784},[68,58710,52791],{"class":78},[68,58712,58713,58715,58717],{"class":70,"line":1502},[68,58714,53626],{"class":78},[68,58716,1553],{"class":52784},[68,58718,52791],{"class":78},[68,58720,58721,58723],{"class":70,"line":1510},[68,58722,7892],{"class":52784},[68,58724,79],{"class":78},[68,58726,58727,58729,58731,58733],{"class":70,"line":1521},[68,58728,56187],{"class":85},[68,58730,89],{"class":78},[68,58732,1248],{"class":85},[68,58734,95],{"class":78},[68,58736,58737,58739,58741,58743],{"class":70,"line":3103},[68,58738,56176],{"class":85},[68,58740,89],{"class":78},[68,58742,1248],{"class":85},[68,58744,95],{"class":78},[68,58746,58747],{"class":70,"line":3108},[68,58748,3677],{"class":78},[68,58750,58751],{"class":70,"line":3114},[68,58752,3890],{"emptyLinePlaceholder":1567},[68,58754,58755,58758],{"class":70,"line":3119},[68,58756,58757],{"class":52784},"    h2",[68,58759,79],{"class":78},[68,58761,58762,58765,58767,58769],{"class":70,"line":3133},[68,58763,58764],{"class":85},"      text-align",[68,58766,89],{"class":78},[68,58768,53074],{"class":85},[68,58770,95],{"class":78},[68,58772,58773],{"class":70,"line":3138},[68,58774,3677],{"class":78},[68,58776,58777],{"class":70,"line":3144},[68,58778,3890],{"emptyLinePlaceholder":1567},[68,58780,58781,58783],{"class":70,"line":3165},[68,58782,56232],{"class":74},[68,58784,79],{"class":78},[68,58786,58787,58789,58791,58793,58795],{"class":70,"line":3170},[68,58788,56250],{"class":85},[68,58790,89],{"class":78},[68,58792,3031],{"class":85},[68,58794,317],{"class":316},[68,58796,95],{"class":78},[68,58798,58799,58801,58803,58805,58807,58809],{"class":70,"line":3184},[68,58800,56187],{"class":85},[68,58802,89],{"class":78},[68,58804,2284],{"class":85},[68,58806,317],{"class":316},[68,58808,53038],{"class":85},[68,58810,95],{"class":78},[68,58812,58813,58815,58817,58819],{"class":70,"line":3189},[68,58814,56487],{"class":85},[68,58816,89],{"class":78},[68,58818,52960],{"class":85},[68,58820,95],{"class":78},[68,58822,58823,58825,58827,58829,58831],{"class":70,"line":3218},[68,58824,56400],{"class":85},[68,58826,89],{"class":78},[68,58828,2452],{"class":85},[68,58830,317],{"class":316},[68,58832,95],{"class":78},[68,58834,58835,58838,58840,58842,58844],{"class":70,"line":3223},[68,58836,58837],{"class":85},"      line-height",[68,58839,89],{"class":78},[68,58841,2030],{"class":85},[68,58843,317],{"class":316},[68,58845,95],{"class":78},[68,58847,58848],{"class":70,"line":3240},[68,58849,3677],{"class":78},[68,58851,58852],{"class":70,"line":3245},[68,58853,3890],{"emptyLinePlaceholder":1567},[68,58855,58856,58859],{"class":70,"line":3250},[68,58857,58858],{"class":74},"    .qs",[68,58860,79],{"class":78},[68,58862,58863],{"class":70,"line":3255},[68,58864,3890],{"emptyLinePlaceholder":1567},[68,58866,58867,58869,58871,58874,58876],{"class":70,"line":3269},[68,58868,56250],{"class":85},[68,58870,89],{"class":78},[68,58872,58873],{"class":85},"450",[68,58875,317],{"class":316},[68,58877,95],{"class":78},[68,58879,58880,58882,58884,58886,58888],{"class":70,"line":3274},[68,58881,56264],{"class":85},[68,58883,89],{"class":78},[68,58885,2030],{"class":85},[68,58887,317],{"class":316},[68,58889,95],{"class":78},[68,58891,58892,58895,58897,58900],{"class":70,"line":4067},[68,58893,58894],{"class":85},"      color",[68,58896,89],{"class":78},[68,58898,58899],{"class":85},"red",[68,58901,95],{"class":78},[68,58903,58904],{"class":70,"line":4081},[68,58905,3890],{"emptyLinePlaceholder":1567},[68,58907,58908],{"class":70,"line":4089},[68,58909,3677],{"class":78},[68,58911,58912],{"class":70,"line":4094},[68,58913,3890],{"emptyLinePlaceholder":1567},[68,58915,58916,58919],{"class":70,"line":4100},[68,58917,58918],{"class":74},"    .btns",[68,58920,79],{"class":78},[68,58922,58923,58925,58927,58929],{"class":70,"line":4106},[68,58924,58764],{"class":85},[68,58926,89],{"class":78},[68,58928,53074],{"class":85},[68,58930,95],{"class":78},[68,58932,58933],{"class":70,"line":4111},[68,58934,3677],{"class":78},[68,58936,58937],{"class":70,"line":9437},[68,58938,3890],{"emptyLinePlaceholder":1567},[68,58940,58941,58943,58946],{"class":70,"line":9461},[68,58942,58918],{"class":74},[68,58944,58945],{"class":52784}," button",[68,58947,79],{"class":78},[68,58949,58950,58952,58954,58956,58958],{"class":70,"line":9466},[68,58951,56250],{"class":85},[68,58953,89],{"class":78},[68,58955,2444],{"class":85},[68,58957,317],{"class":316},[68,58959,95],{"class":78},[68,58961,58962,58964,58966,58968,58970],{"class":70,"line":9472},[68,58963,56264],{"class":85},[68,58965,89],{"class":78},[68,58967,1902],{"class":85},[68,58969,317],{"class":316},[68,58971,95],{"class":78},[68,58973,58974,58976,58978,58980,58983,58985],{"class":70,"line":9499},[68,58975,56187],{"class":85},[68,58977,89],{"class":78},[68,58979,1248],{"class":85},[68,58981,58982],{"class":85}," 50",[68,58984,317],{"class":316},[68,58986,95],{"class":78},[68,58988,58989],{"class":70,"line":9504},[68,58990,3677],{"class":78},[68,58992,58993,58995,58997],{"class":70,"line":9510},[68,58994,53899],{"class":78},[68,58996,1553],{"class":52784},[68,58998,52791],{"class":78},[68,59000,59001,59003,59005],{"class":70,"line":9522},[68,59002,53267],{"class":78},[68,59004,52818],{"class":52784},[68,59006,52791],{"class":78},[68,59008,59009],{"class":70,"line":9534},[68,59010,3890],{"emptyLinePlaceholder":1567},[68,59012,59013,59015,59017],{"class":70,"line":9546},[68,59014,2537],{"class":78},[68,59016,53282],{"class":52784},[68,59018,52791],{"class":78},[68,59020,59021,59023,59025,59028,59030],{"class":70,"line":11204},[68,59022,53626],{"class":78},[68,59024,14],{"class":52784},[68,59026,59027],{"class":78},">随机点名\u003C\u002F",[68,59029,14],{"class":52784},[68,59031,52791],{"class":78},[68,59033,59034,59036,59038,59040,59042,59044],{"class":70,"line":11229},[68,59035,53626],{"class":78},[68,59037,53093],{"class":52784},[68,59039,54968],{"class":74},[68,59041,1685],{"class":78},[68,59043,54973],{"class":1742},[68,59045,52791],{"class":78},[68,59047,59048,59050,59052,59055,59057],{"class":70,"line":11252},[68,59049,52825],{"class":78},[68,59051,68],{"class":52784},[68,59053,59054],{"class":78},">名字是：\u003C\u002F",[68,59056,68],{"class":52784},[68,59058,52791],{"class":78},[68,59060,59061,59063,59065,59067,59069,59072,59075,59077],{"class":70,"line":11276},[68,59062,52825],{"class":78},[68,59064,53093],{"class":52784},[68,59066,54968],{"class":74},[68,59068,1685],{"class":78},[68,59070,59071],{"class":1742},"\"qs\"",[68,59073,59074],{"class":78},">这里显示姓名\u003C\u002F",[68,59076,53093],{"class":52784},[68,59078,52791],{"class":78},[68,59080,59081,59083,59085],{"class":70,"line":11281},[68,59082,53899],{"class":78},[68,59084,53093],{"class":52784},[68,59086,52791],{"class":78},[68,59088,59089,59091,59093,59095,59097,59100],{"class":70,"line":11286},[68,59090,53626],{"class":78},[68,59092,53093],{"class":52784},[68,59094,54968],{"class":74},[68,59096,1685],{"class":78},[68,59098,59099],{"class":1742},"\"btns\"",[68,59101,52791],{"class":78},[68,59103,59104,59106,59108,59110,59112,59115,59118,59120],{"class":70,"line":11291},[68,59105,52825],{"class":78},[68,59107,55368],{"class":52784},[68,59109,54968],{"class":74},[68,59111,1685],{"class":78},[68,59113,59114],{"class":1742},"\"start\"",[68,59116,59117],{"class":78},">开始\u003C\u002F",[68,59119,55368],{"class":52784},[68,59121,52791],{"class":78},[68,59123,59124,59126,59128,59130,59132,59135,59138,59140],{"class":70,"line":11300},[68,59125,52825],{"class":78},[68,59127,55368],{"class":52784},[68,59129,54968],{"class":74},[68,59131,1685],{"class":78},[68,59133,59134],{"class":1742},"\"end\"",[68,59136,59137],{"class":78},">结束\u003C\u002F",[68,59139,55368],{"class":52784},[68,59141,52791],{"class":78},[68,59143,59144,59146,59148],{"class":70,"line":11305},[68,59145,53899],{"class":78},[68,59147,53093],{"class":52784},[68,59149,52791],{"class":78},[68,59151,59152],{"class":70,"line":11311},[68,59153,3890],{"emptyLinePlaceholder":1567},[68,59155,59156,59158,59160],{"class":70,"line":11332},[68,59157,53626],{"class":78},[68,59159,53295],{"class":52784},[68,59161,52791],{"class":78},[68,59163,59164],{"class":70,"line":11338},[68,59165,59166],{"class":302},"    \u002F\u002F 数据数组\n",[68,59168,59169,59171,59174,59176,59178,59181,59183,59186,59188,59191,59193,59196,59198,59201],{"class":70,"line":11352},[68,59170,12709],{"class":316},[68,59172,59173],{"class":85}," arr",[68,59175,15052],{"class":316},[68,59177,53708],{"class":78},[68,59179,59180],{"class":1742},"'马超'",[68,59182,13923],{"class":78},[68,59184,59185],{"class":1742},"'黄忠'",[68,59187,13923],{"class":78},[68,59189,59190],{"class":1742},"'赵云'",[68,59192,13923],{"class":78},[68,59194,59195],{"class":1742},"'关羽'",[68,59197,13923],{"class":78},[68,59199,59200],{"class":1742},"'张飞'",[68,59202,34730],{"class":78},[68,59204,59205,59207,59210,59212,59214,59216,59218,59221],{"class":70,"line":11358},[68,59206,12709],{"class":316},[68,59208,59209],{"class":85}," qs",[68,59211,15052],{"class":316},[68,59213,55877],{"class":78},[68,59215,55880],{"class":74},[68,59217,1640],{"class":78},[68,59219,59220],{"class":1742},"'.qs'",[68,59222,1646],{"class":78},[68,59224,59225],{"class":70,"line":11385},[68,59226,59227],{"class":302},"    \u002F\u002F 1.业务1.开始按钮模块\n",[68,59229,59230,59232,59234,59236,59238,59240,59242,59245],{"class":70,"line":11394},[68,59231,12709],{"class":316},[68,59233,5674],{"class":85},[68,59235,15052],{"class":316},[68,59237,55877],{"class":78},[68,59239,55880],{"class":74},[68,59241,1640],{"class":78},[68,59243,59244],{"class":1742},"'.start'",[68,59246,1646],{"class":78},[68,59248,59249],{"class":70,"line":11400},[68,59250,59251],{"class":302},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[68,59253,59254,59256,59259,59261],{"class":70,"line":11408},[68,59255,53701],{"class":316},[68,59257,59258],{"class":78}," timerId ",[68,59260,1685],{"class":316},[68,59262,48817],{"class":85},[68,59264,59265],{"class":70,"line":11413},[68,59266,59267],{"class":302},"    \u002F\u002F 随机号要全局变量\n",[68,59269,59270,59272,59275,59277],{"class":70,"line":18091},[68,59271,53701],{"class":316},[68,59273,59274],{"class":78}," random ",[68,59276,1685],{"class":316},[68,59278,48817],{"class":85},[68,59280,59281],{"class":70,"line":18097},[68,59282,59283],{"class":302},"    \u002F\u002F 1.1 添加点击事件\n",[68,59285,59286,59289,59292,59294,59297,59299,59301],{"class":70,"line":18120},[68,59287,59288],{"class":78},"    start.",[68,59290,59291],{"class":74},"addEventListener",[68,59293,1640],{"class":78},[68,59295,59296],{"class":1742},"'click'",[68,59298,13923],{"class":78},[68,59300,55930],{"class":316},[68,59302,55933],{"class":78},[68,59304,59305,59308,59310,59312,59314,59316],{"class":70,"line":18126},[68,59306,59307],{"class":78},"      timerId ",[68,59309,1685],{"class":316},[68,59311,55925],{"class":74},[68,59313,1640],{"class":78},[68,59315,55930],{"class":316},[68,59317,55933],{"class":78},[68,59319,59320],{"class":70,"line":18149},[68,59321,59322],{"class":302},"        \u002F\u002F 随机数\n",[68,59324,59325,59328,59330,59333,59336,59339,59341,59343,59345,59347],{"class":70,"line":18163},[68,59326,59327],{"class":78},"        random ",[68,59329,1685],{"class":316},[68,59331,59332],{"class":74}," parseInt",[68,59334,59335],{"class":78},"(Math.",[68,59337,59338],{"class":74},"random",[68,59340,14538],{"class":78},[68,59342,2083],{"class":316},[68,59344,53447],{"class":78},[68,59346,53450],{"class":85},[68,59348,1646],{"class":78},[68,59350,59351,59354,59356],{"class":70,"line":18183},[68,59352,59353],{"class":78},"        qs.innerHTML ",[68,59355,1685],{"class":316},[68,59357,59358],{"class":78}," arr[random]\n",[68,59360,59361,59364,59366],{"class":70,"line":18189},[68,59362,59363],{"class":78},"      }, ",[68,59365,1902],{"class":85},[68,59367,1646],{"class":78},[68,59369,59370],{"class":70,"line":18200},[68,59371,59372],{"class":302},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[68,59374,59375,59377,59380,59382,59385,59387],{"class":70,"line":18223},[68,59376,55961],{"class":316},[68,59378,59379],{"class":78}," (arr.",[68,59381,53450],{"class":85},[68,59383,59384],{"class":316}," ===",[68,59386,26604],{"class":85},[68,59388,13930],{"class":78},[68,59390,59391],{"class":70,"line":18245},[68,59392,59393],{"class":302},"        \u002F\u002F start.disabled = true\n",[68,59395,59396],{"class":70,"line":18250},[68,59397,59398],{"class":302},"        \u002F\u002F end.disabled = true\n",[68,59400,59401],{"class":70,"line":18256},[68,59402,59403],{"class":302},"        \u002F\u002F 可以合起来写\n",[68,59405,59406,59409,59411,59414,59416],{"class":70,"line":18270},[68,59407,59408],{"class":78},"        start.disabled ",[68,59410,1685],{"class":316},[68,59412,59413],{"class":78}," end.disabled ",[68,59415,1685],{"class":316},[68,59417,59418],{"class":85}," true\n",[68,59420,59421],{"class":70,"line":18283},[68,59422,53880],{"class":78},[68,59424,59425],{"class":70,"line":18288},[68,59426,34945],{"class":78},[68,59428,59429],{"class":70,"line":18302},[68,59430,59431],{"class":302},"    \u002F\u002F 1.2 关闭按钮模块\n",[68,59433,59434,59436,59438,59440,59442,59444,59446,59449],{"class":70,"line":18307},[68,59435,12709],{"class":316},[68,59437,5690],{"class":85},[68,59439,15052],{"class":316},[68,59441,55877],{"class":78},[68,59443,55880],{"class":74},[68,59445,1640],{"class":78},[68,59447,59448],{"class":1742},"'.end'",[68,59450,1646],{"class":78},[68,59452,59453,59456,59458,59460,59462,59464,59466],{"class":70,"line":18313},[68,59454,59455],{"class":78},"    end.",[68,59457,59291],{"class":74},[68,59459,1640],{"class":78},[68,59461,59296],{"class":1742},[68,59463,13923],{"class":78},[68,59465,55930],{"class":316},[68,59467,55933],{"class":78},[68,59469,59470,59473],{"class":70,"line":18318},[68,59471,59472],{"class":74},"      clearInterval",[68,59474,59475],{"class":78},"(timerId)\n",[68,59477,59478],{"class":70,"line":18332},[68,59479,59480],{"class":302},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[68,59482,59483,59486,59489,59492,59494],{"class":70,"line":18337},[68,59484,59485],{"class":78},"      arr.",[68,59487,59488],{"class":74},"splice",[68,59490,59491],{"class":78},"(random, ",[68,59493,1846],{"class":85},[68,59495,1646],{"class":78},[68,59497,59498],{"class":70,"line":18342},[68,59499,34945],{"class":78},[68,59501,59502],{"class":70,"line":18356},[68,59503,3890],{"emptyLinePlaceholder":1567},[68,59505,59506,59508,59510],{"class":70,"line":18368},[68,59507,53899],{"class":78},[68,59509,53295],{"class":52784},[68,59511,52791],{"class":78},[68,59513,59514,59516,59518],{"class":70,"line":18373},[68,59515,53267],{"class":78},[68,59517,53282],{"class":52784},[68,59519,52791],{"class":78},[68,59521,59522],{"class":70,"line":18386},[68,59523,3890],{"emptyLinePlaceholder":1567},[68,59525,59526,59528,59530],{"class":70,"line":18391},[68,59527,53267],{"class":78},[68,59529,52119],{"class":52784},[68,59531,52791],{"class":78},[170,59533,59534],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,59536,59538],{"id":59537},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[58,59540,59542],{"className":52117,"code":59541,"language":52119,"meta":63,"style":63},"\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",[65,59543,59544,59554,59568,59572,59580,59594,59614,59626,59634,59638,59646,59658,59666,59685,59702,59718,59728,59732,59740,59748,59752],{"__ignoreMap":63},[68,59545,59546,59548,59550,59552],{"class":70,"line":71},[68,59547,52781],{"class":78},[68,59549,52785],{"class":52784},[68,59551,52788],{"class":74},[68,59553,52791],{"class":78},[68,59555,59556,59558,59560,59562,59564,59566],{"class":70,"line":82},[68,59557,2537],{"class":78},[68,59559,52119],{"class":52784},[68,59561,52800],{"class":74},[68,59563,1685],{"class":78},[68,59565,52805],{"class":1742},[68,59567,52791],{"class":78},[68,59569,59570],{"class":70,"line":98},[68,59571,3890],{"emptyLinePlaceholder":1567},[68,59573,59574,59576,59578],{"class":70,"line":104},[68,59575,2537],{"class":78},[68,59577,52818],{"class":52784},[68,59579,52791],{"class":78},[68,59581,59582,59584,59586,59588,59590,59592],{"class":70,"line":112},[68,59583,53626],{"class":78},[68,59585,52828],{"class":52784},[68,59587,52831],{"class":74},[68,59589,1685],{"class":78},[68,59591,52836],{"class":1742},[68,59593,52791],{"class":78},[68,59595,59596,59598,59600,59602,59604,59606,59608,59610,59612],{"class":70,"line":124},[68,59597,53626],{"class":78},[68,59599,52828],{"class":52784},[68,59601,16408],{"class":74},[68,59603,1685],{"class":78},[68,59605,52875],{"class":1742},[68,59607,52855],{"class":74},[68,59609,1685],{"class":78},[68,59611,52882],{"class":1742},[68,59613,52791],{"class":78},[68,59615,59616,59618,59620,59622,59624],{"class":70,"line":1496},[68,59617,53626],{"class":78},[68,59619,52891],{"class":52784},[68,59621,52894],{"class":78},[68,59623,52891],{"class":52784},[68,59625,52791],{"class":78},[68,59627,59628,59630,59632],{"class":70,"line":1502},[68,59629,53267],{"class":78},[68,59631,52818],{"class":52784},[68,59633,52791],{"class":78},[68,59635,59636],{"class":70,"line":1510},[68,59637,3890],{"emptyLinePlaceholder":1567},[68,59639,59640,59642,59644],{"class":70,"line":1521},[68,59641,2537],{"class":78},[68,59643,53282],{"class":52784},[68,59645,52791],{"class":78},[68,59647,59648,59650,59652,59654,59656],{"class":70,"line":3103},[68,59649,53626],{"class":78},[68,59651,55368],{"class":52784},[68,59653,55374],{"class":78},[68,59655,55368],{"class":52784},[68,59657,52791],{"class":78},[68,59659,59660,59662,59664],{"class":70,"line":3108},[68,59661,53626],{"class":78},[68,59663,53295],{"class":52784},[68,59665,52791],{"class":78},[68,59667,59668,59670,59672,59674,59676,59678,59680,59683],{"class":70,"line":3114},[68,59669,12709],{"class":316},[68,59671,55872],{"class":85},[68,59673,15052],{"class":316},[68,59675,55877],{"class":78},[68,59677,55880],{"class":74},[68,59679,1640],{"class":78},[68,59681,59682],{"class":1742},"'button'",[68,59684,1646],{"class":78},[68,59686,59687,59690,59692,59694,59696,59698,59700],{"class":70,"line":3119},[68,59688,59689],{"class":78},"    btn.",[68,59691,59291],{"class":74},[68,59693,1640],{"class":78},[68,59695,59296],{"class":1742},[68,59697,13923],{"class":78},[68,59699,55930],{"class":316},[68,59701,55933],{"class":78},[68,59703,59704,59707,59709,59711,59714,59716],{"class":70,"line":3133},[68,59705,59706],{"class":316},"      const",[68,59708,3730],{"class":85},[68,59710,15052],{"class":316},[68,59712,59713],{"class":78}," Math.",[68,59715,59338],{"class":74},[68,59717,3466],{"class":78},[68,59719,59720,59723,59726],{"class":70,"line":3138},[68,59721,59722],{"class":78},"      console.",[68,59724,59725],{"class":74},"log",[68,59727,1653],{"class":78},[68,59729,59730],{"class":70,"line":3144},[68,59731,34945],{"class":78},[68,59733,59734,59736,59738],{"class":70,"line":3165},[68,59735,53899],{"class":78},[68,59737,53295],{"class":52784},[68,59739,52791],{"class":78},[68,59741,59742,59744,59746],{"class":70,"line":3170},[68,59743,53267],{"class":78},[68,59745,53282],{"class":52784},[68,59747,52791],{"class":78},[68,59749,59750],{"class":70,"line":3184},[68,59751,3890],{"emptyLinePlaceholder":1567},[68,59753,59754,59756,59758],{"class":70,"line":3189},[68,59755,53267],{"class":78},[68,59757,52119],{"class":52784},[68,59759,52791],{"class":78},[170,59761,59762],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[170,59764,59765],{},"常量不可以重新赋值",[170,59767,59768],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[58,59770,59772],{"className":52117,"code":59771,"language":52119,"meta":63,"style":63},"\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",[65,59773,59774,59784,59798,59802,59810,59824,59844,59856,59864,59868,59876,59888,59896,59907,59925,59941,59955,59963,59967,59975,59983,59987],{"__ignoreMap":63},[68,59775,59776,59778,59780,59782],{"class":70,"line":71},[68,59777,52781],{"class":78},[68,59779,52785],{"class":52784},[68,59781,52788],{"class":74},[68,59783,52791],{"class":78},[68,59785,59786,59788,59790,59792,59794,59796],{"class":70,"line":82},[68,59787,2537],{"class":78},[68,59789,52119],{"class":52784},[68,59791,52800],{"class":74},[68,59793,1685],{"class":78},[68,59795,52805],{"class":1742},[68,59797,52791],{"class":78},[68,59799,59800],{"class":70,"line":98},[68,59801,3890],{"emptyLinePlaceholder":1567},[68,59803,59804,59806,59808],{"class":70,"line":104},[68,59805,2537],{"class":78},[68,59807,52818],{"class":52784},[68,59809,52791],{"class":78},[68,59811,59812,59814,59816,59818,59820,59822],{"class":70,"line":112},[68,59813,53626],{"class":78},[68,59815,52828],{"class":52784},[68,59817,52831],{"class":74},[68,59819,1685],{"class":78},[68,59821,52836],{"class":1742},[68,59823,52791],{"class":78},[68,59825,59826,59828,59830,59832,59834,59836,59838,59840,59842],{"class":70,"line":124},[68,59827,53626],{"class":78},[68,59829,52828],{"class":52784},[68,59831,16408],{"class":74},[68,59833,1685],{"class":78},[68,59835,52875],{"class":1742},[68,59837,52855],{"class":74},[68,59839,1685],{"class":78},[68,59841,52882],{"class":1742},[68,59843,52791],{"class":78},[68,59845,59846,59848,59850,59852,59854],{"class":70,"line":1496},[68,59847,53626],{"class":78},[68,59849,52891],{"class":52784},[68,59851,52894],{"class":78},[68,59853,52891],{"class":52784},[68,59855,52791],{"class":78},[68,59857,59858,59860,59862],{"class":70,"line":1502},[68,59859,53267],{"class":78},[68,59861,52818],{"class":52784},[68,59863,52791],{"class":78},[68,59865,59866],{"class":70,"line":1510},[68,59867,3890],{"emptyLinePlaceholder":1567},[68,59869,59870,59872,59874],{"class":70,"line":1521},[68,59871,2537],{"class":78},[68,59873,53282],{"class":52784},[68,59875,52791],{"class":78},[68,59877,59878,59880,59882,59884,59886],{"class":70,"line":3103},[68,59879,53626],{"class":78},[68,59881,55368],{"class":52784},[68,59883,55374],{"class":78},[68,59885,55368],{"class":52784},[68,59887,52791],{"class":78},[68,59889,59890,59892,59894],{"class":70,"line":3108},[68,59891,53626],{"class":78},[68,59893,53295],{"class":52784},[68,59895,52791],{"class":78},[68,59897,59898,59900,59902,59904],{"class":70,"line":3114},[68,59899,12709],{"class":316},[68,59901,3730],{"class":85},[68,59903,15052],{"class":316},[68,59905,59906],{"class":85}," 10\n",[68,59908,59909,59911,59913,59915,59917,59919,59921,59923],{"class":70,"line":3119},[68,59910,12709],{"class":316},[68,59912,55872],{"class":85},[68,59914,15052],{"class":316},[68,59916,55877],{"class":78},[68,59918,55880],{"class":74},[68,59920,1640],{"class":78},[68,59922,59682],{"class":1742},[68,59924,1646],{"class":78},[68,59926,59927,59929,59931,59933,59935,59937,59939],{"class":70,"line":3133},[68,59928,59689],{"class":78},[68,59930,59291],{"class":74},[68,59932,1640],{"class":78},[68,59934,59296],{"class":1742},[68,59936,13923],{"class":78},[68,59938,55930],{"class":316},[68,59940,55933],{"class":78},[68,59942,59943,59945,59947,59949,59951,59953],{"class":70,"line":3138},[68,59944,59706],{"class":316},[68,59946,3730],{"class":85},[68,59948,15052],{"class":316},[68,59950,59713],{"class":78},[68,59952,59338],{"class":74},[68,59954,3466],{"class":78},[68,59956,59957,59959,59961],{"class":70,"line":3144},[68,59958,59722],{"class":78},[68,59960,59725],{"class":74},[68,59962,1653],{"class":78},[68,59964,59965],{"class":70,"line":3165},[68,59966,34945],{"class":78},[68,59968,59969,59971,59973],{"class":70,"line":3170},[68,59970,53899],{"class":78},[68,59972,53295],{"class":52784},[68,59974,52791],{"class":78},[68,59976,59977,59979,59981],{"class":70,"line":3184},[68,59978,53267],{"class":78},[68,59980,53282],{"class":52784},[68,59982,52791],{"class":78},[68,59984,59985],{"class":70,"line":3189},[68,59986,3890],{"emptyLinePlaceholder":1567},[68,59988,59989,59991,59993],{"class":70,"line":3218},[68,59990,53267],{"class":78},[68,59992,52119],{"class":52784},[68,59994,52791],{"class":78},[170,59996,59997],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[58,59999,60001],{"className":52117,"code":60000,"language":52119,"meta":63,"style":63},"\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",[65,60002,60003,60013,60027,60031,60039,60053,60073,60085,60093,60097,60105,60117,60125,60135,60153,60169,60182,60190,60194,60202,60210,60214],{"__ignoreMap":63},[68,60004,60005,60007,60009,60011],{"class":70,"line":71},[68,60006,52781],{"class":78},[68,60008,52785],{"class":52784},[68,60010,52788],{"class":74},[68,60012,52791],{"class":78},[68,60014,60015,60017,60019,60021,60023,60025],{"class":70,"line":82},[68,60016,2537],{"class":78},[68,60018,52119],{"class":52784},[68,60020,52800],{"class":74},[68,60022,1685],{"class":78},[68,60024,52805],{"class":1742},[68,60026,52791],{"class":78},[68,60028,60029],{"class":70,"line":98},[68,60030,3890],{"emptyLinePlaceholder":1567},[68,60032,60033,60035,60037],{"class":70,"line":104},[68,60034,2537],{"class":78},[68,60036,52818],{"class":52784},[68,60038,52791],{"class":78},[68,60040,60041,60043,60045,60047,60049,60051],{"class":70,"line":112},[68,60042,53626],{"class":78},[68,60044,52828],{"class":52784},[68,60046,52831],{"class":74},[68,60048,1685],{"class":78},[68,60050,52836],{"class":1742},[68,60052,52791],{"class":78},[68,60054,60055,60057,60059,60061,60063,60065,60067,60069,60071],{"class":70,"line":124},[68,60056,53626],{"class":78},[68,60058,52828],{"class":52784},[68,60060,16408],{"class":74},[68,60062,1685],{"class":78},[68,60064,52875],{"class":1742},[68,60066,52855],{"class":74},[68,60068,1685],{"class":78},[68,60070,52882],{"class":1742},[68,60072,52791],{"class":78},[68,60074,60075,60077,60079,60081,60083],{"class":70,"line":1496},[68,60076,53626],{"class":78},[68,60078,52891],{"class":52784},[68,60080,52894],{"class":78},[68,60082,52891],{"class":52784},[68,60084,52791],{"class":78},[68,60086,60087,60089,60091],{"class":70,"line":1502},[68,60088,53267],{"class":78},[68,60090,52818],{"class":52784},[68,60092,52791],{"class":78},[68,60094,60095],{"class":70,"line":1510},[68,60096,3890],{"emptyLinePlaceholder":1567},[68,60098,60099,60101,60103],{"class":70,"line":1521},[68,60100,2537],{"class":78},[68,60102,53282],{"class":52784},[68,60104,52791],{"class":78},[68,60106,60107,60109,60111,60113,60115],{"class":70,"line":3103},[68,60108,53626],{"class":78},[68,60110,55368],{"class":52784},[68,60112,55374],{"class":78},[68,60114,55368],{"class":52784},[68,60116,52791],{"class":78},[68,60118,60119,60121,60123],{"class":70,"line":3108},[68,60120,53626],{"class":78},[68,60122,53295],{"class":52784},[68,60124,52791],{"class":78},[68,60126,60127,60129,60131,60133],{"class":70,"line":3114},[68,60128,12709],{"class":316},[68,60130,3730],{"class":85},[68,60132,15052],{"class":316},[68,60134,59906],{"class":85},[68,60136,60137,60139,60141,60143,60145,60147,60149,60151],{"class":70,"line":3119},[68,60138,12709],{"class":316},[68,60140,55872],{"class":85},[68,60142,15052],{"class":316},[68,60144,55877],{"class":78},[68,60146,55880],{"class":74},[68,60148,1640],{"class":78},[68,60150,59682],{"class":1742},[68,60152,1646],{"class":78},[68,60154,60155,60157,60159,60161,60163,60165,60167],{"class":70,"line":3133},[68,60156,59689],{"class":78},[68,60158,59291],{"class":74},[68,60160,1640],{"class":78},[68,60162,59296],{"class":1742},[68,60164,13923],{"class":78},[68,60166,55930],{"class":316},[68,60168,55933],{"class":78},[68,60170,60171,60174,60176,60178,60180],{"class":70,"line":3138},[68,60172,60173],{"class":78},"      num ",[68,60175,1685],{"class":316},[68,60177,59713],{"class":78},[68,60179,59338],{"class":74},[68,60181,3466],{"class":78},[68,60183,60184,60186,60188],{"class":70,"line":3144},[68,60185,59722],{"class":78},[68,60187,59725],{"class":74},[68,60189,1653],{"class":78},[68,60191,60192],{"class":70,"line":3165},[68,60193,34945],{"class":78},[68,60195,60196,60198,60200],{"class":70,"line":3170},[68,60197,53899],{"class":78},[68,60199,53295],{"class":52784},[68,60201,52791],{"class":78},[68,60203,60204,60206,60208],{"class":70,"line":3184},[68,60205,53267],{"class":78},[68,60207,53282],{"class":52784},[68,60209,52791],{"class":78},[68,60211,60212],{"class":70,"line":3189},[68,60213,3890],{"emptyLinePlaceholder":1567},[68,60215,60216,60218,60220],{"class":70,"line":3218},[68,60217,53267],{"class":78},[68,60219,52119],{"class":52784},[68,60221,52791],{"class":78},[170,60223,60224],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,60226,60228],{"id":60227},"_324-事件监听版本","3.2.4 事件监听版本",[170,60230,60231],{},[801,60232],{"alt":63,"src":60233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[170,60235,60236],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[170,60238,60239],{},"这种方式会覆盖前边的事件监听:",[58,60241,60243],{"className":52117,"code":60242,"language":52119,"meta":63,"style":63},"\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",[65,60244,60245,60255,60269,60273,60281,60295,60315,60327,60335,60339,60347,60359,60367,60385,60399,60410,60414,60426,60436,60440,60448,60456,60460],{"__ignoreMap":63},[68,60246,60247,60249,60251,60253],{"class":70,"line":71},[68,60248,52781],{"class":78},[68,60250,52785],{"class":52784},[68,60252,52788],{"class":74},[68,60254,52791],{"class":78},[68,60256,60257,60259,60261,60263,60265,60267],{"class":70,"line":82},[68,60258,2537],{"class":78},[68,60260,52119],{"class":52784},[68,60262,52800],{"class":74},[68,60264,1685],{"class":78},[68,60266,52805],{"class":1742},[68,60268,52791],{"class":78},[68,60270,60271],{"class":70,"line":98},[68,60272,3890],{"emptyLinePlaceholder":1567},[68,60274,60275,60277,60279],{"class":70,"line":104},[68,60276,2537],{"class":78},[68,60278,52818],{"class":52784},[68,60280,52791],{"class":78},[68,60282,60283,60285,60287,60289,60291,60293],{"class":70,"line":112},[68,60284,53626],{"class":78},[68,60286,52828],{"class":52784},[68,60288,52831],{"class":74},[68,60290,1685],{"class":78},[68,60292,52836],{"class":1742},[68,60294,52791],{"class":78},[68,60296,60297,60299,60301,60303,60305,60307,60309,60311,60313],{"class":70,"line":124},[68,60298,53626],{"class":78},[68,60300,52828],{"class":52784},[68,60302,16408],{"class":74},[68,60304,1685],{"class":78},[68,60306,52875],{"class":1742},[68,60308,52855],{"class":74},[68,60310,1685],{"class":78},[68,60312,52882],{"class":1742},[68,60314,52791],{"class":78},[68,60316,60317,60319,60321,60323,60325],{"class":70,"line":1496},[68,60318,53626],{"class":78},[68,60320,52891],{"class":52784},[68,60322,52894],{"class":78},[68,60324,52891],{"class":52784},[68,60326,52791],{"class":78},[68,60328,60329,60331,60333],{"class":70,"line":1502},[68,60330,53267],{"class":78},[68,60332,52818],{"class":52784},[68,60334,52791],{"class":78},[68,60336,60337],{"class":70,"line":1510},[68,60338,3890],{"emptyLinePlaceholder":1567},[68,60340,60341,60343,60345],{"class":70,"line":1521},[68,60342,2537],{"class":78},[68,60344,53282],{"class":52784},[68,60346,52791],{"class":78},[68,60348,60349,60351,60353,60355,60357],{"class":70,"line":3103},[68,60350,53626],{"class":78},[68,60352,55368],{"class":52784},[68,60354,55374],{"class":78},[68,60356,55368],{"class":52784},[68,60358,52791],{"class":78},[68,60360,60361,60363,60365],{"class":70,"line":3108},[68,60362,53626],{"class":78},[68,60364,53295],{"class":52784},[68,60366,52791],{"class":78},[68,60368,60369,60371,60373,60375,60377,60379,60381,60383],{"class":70,"line":3114},[68,60370,12709],{"class":316},[68,60372,55872],{"class":85},[68,60374,15052],{"class":316},[68,60376,55877],{"class":78},[68,60378,55880],{"class":74},[68,60380,1640],{"class":78},[68,60382,59682],{"class":1742},[68,60384,1646],{"class":78},[68,60386,60387,60389,60392,60394,60397],{"class":70,"line":3119},[68,60388,59689],{"class":78},[68,60390,60391],{"class":74},"onclick",[68,60393,15052],{"class":316},[68,60395,60396],{"class":316}," function",[68,60398,55933],{"class":78},[68,60400,60401,60404,60406,60408],{"class":70,"line":3133},[68,60402,60403],{"class":74},"      alert",[68,60405,1640],{"class":78},[68,60407,2100],{"class":85},[68,60409,1646],{"class":78},[68,60411,60412],{"class":70,"line":3138},[68,60413,3677],{"class":78},[68,60415,60416,60418,60420,60422,60424],{"class":70,"line":3144},[68,60417,59689],{"class":78},[68,60419,60391],{"class":74},[68,60421,15052],{"class":316},[68,60423,60396],{"class":316},[68,60425,55933],{"class":78},[68,60427,60428,60430,60432,60434],{"class":70,"line":3165},[68,60429,60403],{"class":74},[68,60431,1640],{"class":78},[68,60433,2377],{"class":85},[68,60435,1646],{"class":78},[68,60437,60438],{"class":70,"line":3170},[68,60439,3677],{"class":78},[68,60441,60442,60444,60446],{"class":70,"line":3184},[68,60443,53899],{"class":78},[68,60445,53295],{"class":52784},[68,60447,52791],{"class":78},[68,60449,60450,60452,60454],{"class":70,"line":3189},[68,60451,53267],{"class":78},[68,60453,53282],{"class":52784},[68,60455,52791],{"class":78},[68,60457,60458],{"class":70,"line":3218},[68,60459,3890],{"emptyLinePlaceholder":1567},[68,60461,60462,60464,60466],{"class":70,"line":3223},[68,60463,53267],{"class":78},[68,60465,52119],{"class":52784},[68,60467,52791],{"class":78},[170,60469,60470],{},"只要点击就输出结果为22,前边11被覆盖了",[58,60472,60474],{"className":52117,"code":60473,"language":52119,"meta":63,"style":63},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[65,60475,60476,60481,60486,60490,60495,60500],{"__ignoreMap":63},[68,60477,60478],{"class":70,"line":71},[68,60479,60480],{"class":78},"  btn.addEventListener('click', function () {\n",[68,60482,60483],{"class":70,"line":82},[68,60484,60485],{"class":78},"      alert(11)\n",[68,60487,60488],{"class":70,"line":98},[68,60489,34945],{"class":78},[68,60491,60492],{"class":70,"line":104},[68,60493,60494],{"class":78},"    btn.addEventListener('click', function () {\n",[68,60496,60497],{"class":70,"line":112},[68,60498,60499],{"class":78},"      alert(22)\n",[68,60501,60502],{"class":70,"line":124},[68,60503,34945],{"class":78},[170,60505,60506],{},"点击第一次输出11,第二次点击为22",[19,60508,60510],{"id":60509},"_325-事件类型","3.2.5 事件类型",[170,60512,60513],{},[801,60514],{"alt":63,"src":60515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[245,60517,60519],{"id":60518},"_3251-鼠标事件","3.2.5.1 鼠标事件",[170,60521,60522],{},"补充知识:",[170,60524,60525],{},"轮播图自动播放模块,可以使用",[170,60527,60528],{},"let timerId = setInterval(function () {",[170,60530,60531],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[170,60533,60534],{},"用js方法模拟进行点击事件,click必须加()",[170,60536,60537],{},"next.click()",[170,60539,60540],{},"}, 1000)",[170,60542,60543],{},[801,60544],{"alt":63,"src":60545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[58,60547,60549],{"className":54549,"code":60548,"language":54551,"meta":63,"style":63},"\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",[65,60550,60551,60555,60565,60579,60583,60591,60606,60626,60646,60659,60667,60672,60677,60681,60685,60690,60695,60700,60705,60709,60713,60718,60723,60728,60732,60736,60741,60745,60750,60755,60759,60763,60768,60773,60778,60783,60788,60792,60796,60801,60806,60811,60816,60821,60825,60829,60834,60839,60844,60849,60854,60859,60864,60869,60874,60879,60883,60887,60892,60897,60901,60905,60910,60915,60919,60924,60929,60933,60937,60942,60946,60951,60956,60960,60965,60969,60973,60978,60983,60988,60993,60998,61003,61008,61012,61016,61020,61025,61030,61035,61040,61044,61052,61060,61064,61072,61087,61101,61122,61130,61144,61157,61172,61191,61203,61215,61227,61239,61251,61263,61275,61283,61298,61322,61346,61354,61362,61370,61378,61383,61388,61393,61398,61403,61408,61413,61418,61423,61428,61432,61437,61442,61447,61452,61457,61462,61467,61472,61477,61481,61486,61491,61496,61501,61506,61511,61516,61521,61526,61531,61536,61541,61545,61549,61554,61559,61564,61568,61573,61578,61583,61588,61593,61597,61602,61606,61610,61614,61618,61622,61626,61631,61636,61641,61646,61651,61656,61661,61666,61671,61675,61679,61684,61689,61694,61699,61704,61708,61713,61718,61723,61728,61733,61738,61742,61746,61751,61755,61760,61764,61769,61774,61779,61784,61789,61794,61798,61806,61814,61818],{"__ignoreMap":63},[68,60552,60553],{"class":70,"line":71},[68,60554,3890],{"emptyLinePlaceholder":1567},[68,60556,60557,60559,60561,60563],{"class":70,"line":82},[68,60558,52781],{"class":78},[68,60560,52785],{"class":316},[68,60562,52788],{"class":85},[68,60564,52791],{"class":78},[68,60566,60567,60569,60571,60573,60575,60577],{"class":70,"line":98},[68,60568,2537],{"class":78},[68,60570,52119],{"class":52784},[68,60572,52800],{"class":74},[68,60574,1685],{"class":78},[68,60576,52805],{"class":1742},[68,60578,52791],{"class":78},[68,60580,60581],{"class":70,"line":104},[68,60582,3890],{"emptyLinePlaceholder":1567},[68,60584,60585,60587,60589],{"class":70,"line":112},[68,60586,2537],{"class":78},[68,60588,52818],{"class":52784},[68,60590,52791],{"class":78},[68,60592,60593,60595,60597,60599,60601,60603],{"class":70,"line":124},[68,60594,53626],{"class":78},[68,60596,52828],{"class":52784},[68,60598,52831],{"class":74},[68,60600,1685],{"class":78},[68,60602,52836],{"class":1742},[68,60604,60605],{"class":78}," \u002F>\n",[68,60607,60608,60610,60612,60614,60616,60618,60620,60622,60624],{"class":70,"line":1496},[68,60609,53626],{"class":78},[68,60611,52828],{"class":52784},[68,60613,52847],{"class":74},[68,60615,1685],{"class":78},[68,60617,52852],{"class":1742},[68,60619,52855],{"class":74},[68,60621,1685],{"class":78},[68,60623,52860],{"class":1742},[68,60625,60605],{"class":78},[68,60627,60628,60630,60632,60634,60636,60638,60640,60642,60644],{"class":70,"line":1502},[68,60629,53626],{"class":78},[68,60631,52828],{"class":52784},[68,60633,16408],{"class":74},[68,60635,1685],{"class":78},[68,60637,52875],{"class":1742},[68,60639,52855],{"class":74},[68,60641,1685],{"class":78},[68,60643,52882],{"class":1742},[68,60645,60605],{"class":78},[68,60647,60648,60650,60652,60655,60657],{"class":70,"line":1510},[68,60649,53626],{"class":78},[68,60651,52891],{"class":52784},[68,60653,60654],{"class":78},">轮播图点击切换\u003C\u002F",[68,60656,52891],{"class":52784},[68,60658,52791],{"class":78},[68,60660,60661,60663,60665],{"class":70,"line":1521},[68,60662,53626],{"class":78},[68,60664,1553],{"class":52784},[68,60666,52791],{"class":78},[68,60668,60669],{"class":70,"line":3103},[68,60670,60671],{"class":78},"    * {\n",[68,60673,60674],{"class":70,"line":3108},[68,60675,60676],{"class":78},"      box-sizing: border-box;\n",[68,60678,60679],{"class":70,"line":3114},[68,60680,3677],{"class":78},[68,60682,60683],{"class":70,"line":3119},[68,60684,3890],{"emptyLinePlaceholder":1567},[68,60686,60687],{"class":70,"line":3133},[68,60688,60689],{"class":78},"    .slider {\n",[68,60691,60692],{"class":70,"line":3138},[68,60693,60694],{"class":78},"      width: 560px;\n",[68,60696,60697],{"class":70,"line":3144},[68,60698,60699],{"class":78},"      height: 400px;\n",[68,60701,60702],{"class":70,"line":3165},[68,60703,60704],{"class":78},"      overflow: hidden;\n",[68,60706,60707],{"class":70,"line":3170},[68,60708,3677],{"class":78},[68,60710,60711],{"class":70,"line":3184},[68,60712,3890],{"emptyLinePlaceholder":1567},[68,60714,60715],{"class":70,"line":3189},[68,60716,60717],{"class":78},"    .slider-wrapper {\n",[68,60719,60720],{"class":70,"line":3218},[68,60721,60722],{"class":78},"      width: 100%;\n",[68,60724,60725],{"class":70,"line":3223},[68,60726,60727],{"class":78},"      height: 320px;\n",[68,60729,60730],{"class":70,"line":3240},[68,60731,3677],{"class":78},[68,60733,60734],{"class":70,"line":3245},[68,60735,3890],{"emptyLinePlaceholder":1567},[68,60737,60738],{"class":70,"line":3250},[68,60739,60740],{"class":78},"    .slider-wrapper img {\n",[68,60742,60743],{"class":70,"line":3255},[68,60744,60722],{"class":78},[68,60746,60747],{"class":70,"line":3269},[68,60748,60749],{"class":78},"      height: 100%;\n",[68,60751,60752],{"class":70,"line":3274},[68,60753,60754],{"class":78},"      display: block;\n",[68,60756,60757],{"class":70,"line":4067},[68,60758,3677],{"class":78},[68,60760,60761],{"class":70,"line":4081},[68,60762,3890],{"emptyLinePlaceholder":1567},[68,60764,60765],{"class":70,"line":4089},[68,60766,60767],{"class":78},"    .slider-footer {\n",[68,60769,60770],{"class":70,"line":4094},[68,60771,60772],{"class":78},"      height: 80px;\n",[68,60774,60775],{"class":70,"line":4100},[68,60776,60777],{"class":78},"      background-color: rgb(100, 67, 68);\n",[68,60779,60780],{"class":70,"line":4106},[68,60781,60782],{"class":78},"      padding: 12px 12px 0 12px;\n",[68,60784,60785],{"class":70,"line":4111},[68,60786,60787],{"class":78},"      position: relative;\n",[68,60789,60790],{"class":70,"line":9437},[68,60791,3677],{"class":78},[68,60793,60794],{"class":70,"line":9461},[68,60795,3890],{"emptyLinePlaceholder":1567},[68,60797,60798],{"class":70,"line":9466},[68,60799,60800],{"class":78},"    .slider-footer .toggle {\n",[68,60802,60803],{"class":70,"line":9472},[68,60804,60805],{"class":78},"      position: absolute;\n",[68,60807,60808],{"class":70,"line":9499},[68,60809,60810],{"class":78},"      right: 0;\n",[68,60812,60813],{"class":70,"line":9504},[68,60814,60815],{"class":78},"      top: 12px;\n",[68,60817,60818],{"class":70,"line":9510},[68,60819,60820],{"class":78},"      display: flex;\n",[68,60822,60823],{"class":70,"line":9522},[68,60824,3677],{"class":78},[68,60826,60827],{"class":70,"line":9534},[68,60828,3890],{"emptyLinePlaceholder":1567},[68,60830,60831],{"class":70,"line":9546},[68,60832,60833],{"class":78},"    .slider-footer .toggle button {\n",[68,60835,60836],{"class":70,"line":11204},[68,60837,60838],{"class":78},"      margin-right: 12px;\n",[68,60840,60841],{"class":70,"line":11229},[68,60842,60843],{"class":78},"      width: 28px;\n",[68,60845,60846],{"class":70,"line":11252},[68,60847,60848],{"class":78},"      height: 28px;\n",[68,60850,60851],{"class":70,"line":11276},[68,60852,60853],{"class":78},"      appearance: none;\n",[68,60855,60856],{"class":70,"line":11281},[68,60857,60858],{"class":78},"      border: none;\n",[68,60860,60861],{"class":70,"line":11286},[68,60862,60863],{"class":78},"      background: rgba(255, 255, 255, 0.1);\n",[68,60865,60866],{"class":70,"line":11291},[68,60867,60868],{"class":78},"      color: #fff;\n",[68,60870,60871],{"class":70,"line":11300},[68,60872,60873],{"class":78},"      border-radius: 4px;\n",[68,60875,60876],{"class":70,"line":11305},[68,60877,60878],{"class":78},"      cursor: pointer;\n",[68,60880,60881],{"class":70,"line":11311},[68,60882,3677],{"class":78},[68,60884,60885],{"class":70,"line":11332},[68,60886,3890],{"emptyLinePlaceholder":1567},[68,60888,60889],{"class":70,"line":11338},[68,60890,60891],{"class":78},"    .slider-footer .toggle button:hover {\n",[68,60893,60894],{"class":70,"line":11352},[68,60895,60896],{"class":78},"      background: rgba(255, 255, 255, 0.2);\n",[68,60898,60899],{"class":70,"line":11358},[68,60900,3677],{"class":78},[68,60902,60903],{"class":70,"line":11385},[68,60904,3890],{"emptyLinePlaceholder":1567},[68,60906,60907],{"class":70,"line":11394},[68,60908,60909],{"class":78},"    .slider-footer p {\n",[68,60911,60912],{"class":70,"line":11400},[68,60913,60914],{"class":78},"      margin: 0;\n",[68,60916,60917],{"class":70,"line":11408},[68,60918,60868],{"class":78},[68,60920,60921],{"class":70,"line":11413},[68,60922,60923],{"class":78},"      font-size: 18px;\n",[68,60925,60926],{"class":70,"line":18091},[68,60927,60928],{"class":78},"      margin-bottom: 10px;\n",[68,60930,60931],{"class":70,"line":18097},[68,60932,3677],{"class":78},[68,60934,60935],{"class":70,"line":18120},[68,60936,3890],{"emptyLinePlaceholder":1567},[68,60938,60939],{"class":70,"line":18126},[68,60940,60941],{"class":78},"    .slider-indicator {\n",[68,60943,60944],{"class":70,"line":18149},[68,60945,60914],{"class":78},[68,60947,60948],{"class":70,"line":18163},[68,60949,60950],{"class":78},"      padding: 0;\n",[68,60952,60953],{"class":70,"line":18183},[68,60954,60955],{"class":78},"      list-style: none;\n",[68,60957,60958],{"class":70,"line":18189},[68,60959,60820],{"class":78},[68,60961,60962],{"class":70,"line":18200},[68,60963,60964],{"class":78},"      align-items: center;\n",[68,60966,60967],{"class":70,"line":18223},[68,60968,3677],{"class":78},[68,60970,60971],{"class":70,"line":18245},[68,60972,3890],{"emptyLinePlaceholder":1567},[68,60974,60975],{"class":70,"line":18250},[68,60976,60977],{"class":78},"    .slider-indicator li {\n",[68,60979,60980],{"class":70,"line":18256},[68,60981,60982],{"class":78},"      width: 8px;\n",[68,60984,60985],{"class":70,"line":18270},[68,60986,60987],{"class":78},"      height: 8px;\n",[68,60989,60990],{"class":70,"line":18283},[68,60991,60992],{"class":78},"      margin: 4px;\n",[68,60994,60995],{"class":70,"line":18288},[68,60996,60997],{"class":78},"      border-radius: 50%;\n",[68,60999,61000],{"class":70,"line":18302},[68,61001,61002],{"class":78},"      background: #fff;\n",[68,61004,61005],{"class":70,"line":18307},[68,61006,61007],{"class":78},"      opacity: 0.4;\n",[68,61009,61010],{"class":70,"line":18313},[68,61011,60878],{"class":78},[68,61013,61014],{"class":70,"line":18318},[68,61015,3677],{"class":78},[68,61017,61018],{"class":70,"line":18332},[68,61019,3890],{"emptyLinePlaceholder":1567},[68,61021,61022],{"class":70,"line":18337},[68,61023,61024],{"class":78},"    .slider-indicator li.active {\n",[68,61026,61027],{"class":70,"line":18342},[68,61028,61029],{"class":78},"      width: 12px;\n",[68,61031,61032],{"class":70,"line":18356},[68,61033,61034],{"class":78},"      height: 12px;\n",[68,61036,61037],{"class":70,"line":18368},[68,61038,61039],{"class":78},"      opacity: 1;\n",[68,61041,61042],{"class":70,"line":18373},[68,61043,3677],{"class":78},[68,61045,61046,61048,61050],{"class":70,"line":18386},[68,61047,53899],{"class":78},[68,61049,1553],{"class":52784},[68,61051,52791],{"class":78},[68,61053,61054,61056,61058],{"class":70,"line":18391},[68,61055,53267],{"class":78},[68,61057,52818],{"class":52784},[68,61059,52791],{"class":78},[68,61061,61062],{"class":70,"line":18396},[68,61063,3890],{"emptyLinePlaceholder":1567},[68,61065,61066,61068,61070],{"class":70,"line":18401},[68,61067,2537],{"class":78},[68,61069,53282],{"class":52784},[68,61071,52791],{"class":78},[68,61073,61074,61076,61078,61080,61082,61085],{"class":70,"line":18414},[68,61075,53626],{"class":78},[68,61077,53093],{"class":52784},[68,61079,54968],{"class":74},[68,61081,1685],{"class":78},[68,61083,61084],{"class":1742},"\"slider\"",[68,61086,52791],{"class":78},[68,61088,61089,61091,61093,61095,61097,61099],{"class":70,"line":18419},[68,61090,52825],{"class":78},[68,61092,53093],{"class":52784},[68,61094,54968],{"class":74},[68,61096,1685],{"class":78},[68,61098,56705],{"class":1742},[68,61100,52791],{"class":78},[68,61102,61103,61105,61107,61109,61111,61114,61116,61118,61120],{"class":70,"line":34117},[68,61104,56712],{"class":78},[68,61106,801],{"class":52784},[68,61108,56717],{"class":74},[68,61110,1685],{"class":78},[68,61112,61113],{"class":1742},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,61115,56725],{"class":74},[68,61117,1685],{"class":78},[68,61119,9141],{"class":1742},[68,61121,60605],{"class":78},[68,61123,61124,61126,61128],{"class":70,"line":34123},[68,61125,53258],{"class":78},[68,61127,53093],{"class":52784},[68,61129,52791],{"class":78},[68,61131,61132,61134,61136,61138,61140,61142],{"class":70,"line":34129},[68,61133,52825],{"class":78},[68,61135,53093],{"class":52784},[68,61137,54968],{"class":74},[68,61139,1685],{"class":78},[68,61141,56752],{"class":1742},[68,61143,52791],{"class":78},[68,61145,61146,61148,61150,61153,61155],{"class":70,"line":34135},[68,61147,56712],{"class":78},[68,61149,170],{"class":52784},[68,61151,61152],{"class":78},">对人类来说会不会太超前了？\u003C\u002F",[68,61154,170],{"class":52784},[68,61156,52791],{"class":78},[68,61158,61159,61161,61163,61165,61167,61170],{"class":70,"line":34141},[68,61160,56712],{"class":78},[68,61162,24],{"class":52784},[68,61164,54968],{"class":74},[68,61166,1685],{"class":78},[68,61168,61169],{"class":1742},"\"slider-indicator\"",[68,61171,52791],{"class":78},[68,61173,61174,61176,61178,61180,61182,61185,61187,61189],{"class":70,"line":34152},[68,61175,56780],{"class":78},[68,61177,27],{"class":52784},[68,61179,54968],{"class":74},[68,61181,1685],{"class":78},[68,61183,61184],{"class":1742},"\"active\"",[68,61186,56792],{"class":78},[68,61188,27],{"class":52784},[68,61190,52791],{"class":78},[68,61192,61193,61195,61197,61199,61201],{"class":70,"line":34158},[68,61194,56780],{"class":78},[68,61196,27],{"class":52784},[68,61198,56792],{"class":78},[68,61200,27],{"class":52784},[68,61202,52791],{"class":78},[68,61204,61205,61207,61209,61211,61213],{"class":70,"line":34178},[68,61206,56780],{"class":78},[68,61208,27],{"class":52784},[68,61210,56792],{"class":78},[68,61212,27],{"class":52784},[68,61214,52791],{"class":78},[68,61216,61217,61219,61221,61223,61225],{"class":70,"line":34184},[68,61218,56780],{"class":78},[68,61220,27],{"class":52784},[68,61222,56792],{"class":78},[68,61224,27],{"class":52784},[68,61226,52791],{"class":78},[68,61228,61229,61231,61233,61235,61237],{"class":70,"line":34195},[68,61230,56780],{"class":78},[68,61232,27],{"class":52784},[68,61234,56792],{"class":78},[68,61236,27],{"class":52784},[68,61238,52791],{"class":78},[68,61240,61241,61243,61245,61247,61249],{"class":70,"line":34201},[68,61242,56780],{"class":78},[68,61244,27],{"class":52784},[68,61246,56792],{"class":78},[68,61248,27],{"class":52784},[68,61250,52791],{"class":78},[68,61252,61253,61255,61257,61259,61261],{"class":70,"line":34207},[68,61254,56780],{"class":78},[68,61256,27],{"class":52784},[68,61258,56792],{"class":78},[68,61260,27],{"class":52784},[68,61262,52791],{"class":78},[68,61264,61265,61267,61269,61271,61273],{"class":70,"line":34213},[68,61266,56780],{"class":78},[68,61268,27],{"class":52784},[68,61270,56792],{"class":78},[68,61272,27],{"class":52784},[68,61274,52791],{"class":78},[68,61276,61277,61279,61281],{"class":70,"line":34219},[68,61278,56885],{"class":78},[68,61280,24],{"class":52784},[68,61282,52791],{"class":78},[68,61284,61285,61287,61289,61291,61293,61296],{"class":70,"line":34225},[68,61286,56712],{"class":78},[68,61288,53093],{"class":52784},[68,61290,54968],{"class":74},[68,61292,1685],{"class":78},[68,61294,61295],{"class":1742},"\"toggle\"",[68,61297,52791],{"class":78},[68,61299,61300,61302,61304,61306,61308,61311,61313,61316,61318,61320],{"class":70,"line":34231},[68,61301,56780],{"class":78},[68,61303,55368],{"class":52784},[68,61305,54968],{"class":74},[68,61307,1685],{"class":78},[68,61309,61310],{"class":1742},"\"prev\"",[68,61312,2587],{"class":78},[68,61314,61315],{"class":85},"&lt;",[68,61317,53267],{"class":78},[68,61319,55368],{"class":52784},[68,61321,52791],{"class":78},[68,61323,61324,61326,61328,61330,61332,61335,61337,61340,61342,61344],{"class":70,"line":34237},[68,61325,56780],{"class":78},[68,61327,55368],{"class":52784},[68,61329,54968],{"class":74},[68,61331,1685],{"class":78},[68,61333,61334],{"class":1742},"\"next\"",[68,61336,2587],{"class":78},[68,61338,61339],{"class":85},"&gt;",[68,61341,53267],{"class":78},[68,61343,55368],{"class":52784},[68,61345,52791],{"class":78},[68,61347,61348,61350,61352],{"class":70,"line":34257},[68,61349,56885],{"class":78},[68,61351,53093],{"class":52784},[68,61353,52791],{"class":78},[68,61355,61356,61358,61360],{"class":70,"line":34263},[68,61357,53258],{"class":78},[68,61359,53093],{"class":52784},[68,61361,52791],{"class":78},[68,61363,61364,61366,61368],{"class":70,"line":34279},[68,61365,53899],{"class":78},[68,61367,53093],{"class":52784},[68,61369,52791],{"class":78},[68,61371,61372,61374,61376],{"class":70,"line":34285},[68,61373,53626],{"class":78},[68,61375,53295],{"class":52784},[68,61377,52791],{"class":78},[68,61379,61380],{"class":70,"line":34299},[68,61381,61382],{"class":78},"    \u002F\u002F 1. 初始数据\n",[68,61384,61385],{"class":70,"line":34305},[68,61386,61387],{"class":78},"    const data = [\n",[68,61389,61390],{"class":70,"line":34320},[68,61391,61392],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[68,61394,61395],{"class":70,"line":34326},[68,61396,61397],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[68,61399,61400],{"class":70,"line":34335},[68,61401,61402],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[68,61404,61405],{"class":70,"line":34341},[68,61406,61407],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[68,61409,61410],{"class":70,"line":34350},[68,61411,61412],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[68,61414,61415],{"class":70,"line":34356},[68,61416,61417],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[68,61419,61420],{"class":70,"line":34362},[68,61421,61422],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[68,61424,61425],{"class":70,"line":34371},[68,61426,61427],{"class":78},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[68,61429,61430],{"class":70,"line":34377},[68,61431,54591],{"class":78},[68,61433,61434],{"class":70,"line":34388},[68,61435,61436],{"class":78},"    \u002F\u002F 获取元素\n",[68,61438,61439],{"class":70,"line":34394},[68,61440,61441],{"class":78},"    const img = document.querySelector('.slider-wrapper img')\n",[68,61443,61444],{"class":70,"line":34413},[68,61445,61446],{"class":78},"    const p = document.querySelector('.slider-footer p')\n",[68,61448,61449],{"class":70,"line":34419},[68,61450,61451],{"class":78},"    const footer = document.querySelector('.slider-footer')\n",[68,61453,61454],{"class":70,"line":34430},[68,61455,61456],{"class":78},"    \u002F\u002F 1. 右按钮业务\n",[68,61458,61459],{"class":70,"line":34436},[68,61460,61461],{"class":78},"    \u002F\u002F 1.1 获取右侧按钮 \n",[68,61463,61464],{"class":70,"line":34456},[68,61465,61466],{"class":78},"    const next = document.querySelector('.next')\n",[68,61468,61469],{"class":70,"line":34472},[68,61470,61471],{"class":78},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[68,61473,61474],{"class":70,"line":34478},[68,61475,61476],{"class":78},"    \u002F\u002F 1.2 注册点击事件\n",[68,61478,61479],{"class":70,"line":34492},[68,61480,3890],{"emptyLinePlaceholder":1567},[68,61482,61483],{"class":70,"line":34498},[68,61484,61485],{"class":78},"    next.addEventListener('click', function () {\n",[68,61487,61488],{"class":70,"line":34504},[68,61489,61490],{"class":78},"      \u002F\u002F console.log(11)\n",[68,61492,61493],{"class":70,"line":34515},[68,61494,61495],{"class":78},"      i++\n",[68,61497,61498],{"class":70,"line":34521},[68,61499,61500],{"class":78},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[68,61502,61503],{"class":70,"line":34527},[68,61504,61505],{"class":78},"      \u002F\u002F if (i >= 8) {\n",[68,61507,61508],{"class":70,"line":34537},[68,61509,61510],{"class":78},"      \u002F\u002F   i = 0\n",[68,61512,61513],{"class":70,"line":34543},[68,61514,61515],{"class":78},"      \u002F\u002F }\n",[68,61517,61518],{"class":70,"line":34554},[68,61519,61520],{"class":78},"      i = i >= data.length ? 0 : i\n",[68,61522,61523],{"class":70,"line":34560},[68,61524,61525],{"class":78},"      \u002F\u002F 1.3 得到对应的对象\n",[68,61527,61528],{"class":70,"line":34570},[68,61529,61530],{"class":78},"      \u002F\u002F console.log(data[i])\n",[68,61532,61533],{"class":70,"line":34575},[68,61534,61535],{"class":78},"      \u002F\u002F 调用函数\n",[68,61537,61538],{"class":70,"line":34581},[68,61539,61540],{"class":78},"      toggle()\n",[68,61542,61543],{"class":70,"line":34630},[68,61544,34945],{"class":78},[68,61546,61547],{"class":70,"line":34677},[68,61548,3890],{"emptyLinePlaceholder":1567},[68,61550,61551],{"class":70,"line":34682},[68,61552,61553],{"class":78},"    \u002F\u002F 2. 左侧按钮业务\n",[68,61555,61556],{"class":70,"line":34688},[68,61557,61558],{"class":78},"    \u002F\u002F 2.1 获取左侧按钮 \n",[68,61560,61561],{"class":70,"line":34707},[68,61562,61563],{"class":78},"    const prev = document.querySelector('.prev')\n",[68,61565,61566],{"class":70,"line":34713},[68,61567,61476],{"class":78},[68,61569,61570],{"class":70,"line":34733},[68,61571,61572],{"class":78},"    prev.addEventListener('click', function () {\n",[68,61574,61575],{"class":70,"line":34739},[68,61576,61577],{"class":78},"      i--\n",[68,61579,61580],{"class":70,"line":34745},[68,61581,61582],{"class":78},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[68,61584,61585],{"class":70,"line":34755},[68,61586,61587],{"class":78},"      \u002F\u002F if (i \u003C 0) {\n",[68,61589,61590],{"class":70,"line":34760},[68,61591,61592],{"class":78},"      \u002F\u002F   i = 7\n",[68,61594,61595],{"class":70,"line":34766},[68,61596,61515],{"class":78},[68,61598,61599],{"class":70,"line":34782},[68,61600,61601],{"class":78},"      i = i \u003C 0 ? data.length - 1 : i\n",[68,61603,61604],{"class":70,"line":34827},[68,61605,61525],{"class":78},[68,61607,61608],{"class":70,"line":34833},[68,61609,61530],{"class":78},[68,61611,61612],{"class":70,"line":34839},[68,61613,61535],{"class":78},[68,61615,61616],{"class":70,"line":34845},[68,61617,61540],{"class":78},[68,61619,61620],{"class":70,"line":34856},[68,61621,34945],{"class":78},[68,61623,61624],{"class":70,"line":34862},[68,61625,3890],{"emptyLinePlaceholder":1567},[68,61627,61628],{"class":70,"line":34868},[68,61629,61630],{"class":78},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[68,61632,61633],{"class":70,"line":34874},[68,61634,61635],{"class":78},"    function toggle() {\n",[68,61637,61638],{"class":70,"line":34892},[68,61639,61640],{"class":78},"      \u002F\u002F 1.4 渲染对应的数据\n",[68,61642,61643],{"class":70,"line":34906},[68,61644,61645],{"class":78},"      img.src = data[i].url\n",[68,61647,61648],{"class":70,"line":34915},[68,61649,61650],{"class":78},"      p.innerHTML = data[i].title\n",[68,61652,61653],{"class":70,"line":34924},[68,61654,61655],{"class":78},"      footer.style.backgroundColor = data[i].color\n",[68,61657,61658],{"class":70,"line":34933},[68,61659,61660],{"class":78},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[68,61662,61663],{"class":70,"line":34942},[68,61664,61665],{"class":78},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[68,61667,61668],{"class":70,"line":34948},[68,61669,61670],{"class":78},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[68,61672,61673],{"class":70,"line":34954},[68,61674,3677],{"class":78},[68,61676,61677],{"class":70,"line":34962},[68,61678,3890],{"emptyLinePlaceholder":1567},[68,61680,61681],{"class":70,"line":34967},[68,61682,61683],{"class":78},"    \u002F\u002F 3. 自动播放模块\n",[68,61685,61686],{"class":70,"line":34973},[68,61687,61688],{"class":78},"    let timerId = setInterval(function () {\n",[68,61690,61691],{"class":70,"line":34984},[68,61692,61693],{"class":78},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,61695,61696],{"class":70,"line":34990},[68,61697,61698],{"class":78},"      next.click()\n",[68,61700,61701],{"class":70,"line":35010},[68,61702,61703],{"class":78},"    }, 1000)\n",[68,61705,61706],{"class":70,"line":35016},[68,61707,3890],{"emptyLinePlaceholder":1567},[68,61709,61710],{"class":70,"line":35022},[68,61711,61712],{"class":78},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[68,61714,61715],{"class":70,"line":35028},[68,61716,61717],{"class":78},"    const slider = document.querySelector('.slider')\n",[68,61719,61720],{"class":70,"line":35045},[68,61721,61722],{"class":78},"    \u002F\u002F 注册事件\n",[68,61724,61725],{"class":70,"line":35051},[68,61726,61727],{"class":78},"    slider.addEventListener('mouseenter', function () {\n",[68,61729,61730],{"class":70,"line":35057},[68,61731,61732],{"class":78},"      \u002F\u002F 停止定时器\n",[68,61734,61735],{"class":70,"line":35063},[68,61736,61737],{"class":78},"      clearInterval(timerId)\n",[68,61739,61740],{"class":70,"line":35069},[68,61741,34945],{"class":78},[68,61743,61744],{"class":70,"line":35075},[68,61745,3890],{"emptyLinePlaceholder":1567},[68,61747,61748],{"class":70,"line":35102},[68,61749,61750],{"class":78},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[68,61752,61753],{"class":70,"line":35126},[68,61754,61722],{"class":78},[68,61756,61757],{"class":70,"line":35132},[68,61758,61759],{"class":78},"    slider.addEventListener('mouseleave', function () {\n",[68,61761,61762],{"class":70,"line":35138},[68,61763,61732],{"class":78},[68,61765,61766],{"class":70,"line":35144},[68,61767,61768],{"class":78},"      if (timerId) clearInterval(timerId)\n",[68,61770,61771],{"class":70,"line":35155},[68,61772,61773],{"class":78},"      \u002F\u002F 开启定时器\n",[68,61775,61776],{"class":70,"line":35166},[68,61777,61778],{"class":78},"      timerId = setInterval(function () {\n",[68,61780,61781],{"class":70,"line":35172},[68,61782,61783],{"class":78},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,61785,61786],{"class":70,"line":35189},[68,61787,61788],{"class":78},"        next.click()\n",[68,61790,61791],{"class":70,"line":35212},[68,61792,61793],{"class":78},"      }, 1000)\n",[68,61795,61796],{"class":70,"line":35235},[68,61797,34945],{"class":78},[68,61799,61800,61802,61804],{"class":70,"line":35241},[68,61801,53899],{"class":78},[68,61803,53295],{"class":52784},[68,61805,52791],{"class":78},[68,61807,61808,61810,61812],{"class":70,"line":35246},[68,61809,53267],{"class":78},[68,61811,53282],{"class":52784},[68,61813,52791],{"class":78},[68,61815,61816],{"class":70,"line":35255},[68,61817,3890],{"emptyLinePlaceholder":1567},[68,61819,61820,61822,61824],{"class":70,"line":35265},[68,61821,53267],{"class":78},[68,61823,52119],{"class":52784},[68,61825,52791],{"class":78},[245,61827,61829],{"id":61828},"_3252-焦点事件","3.2.5.2 焦点事件",[170,61831,61832],{},"小米搜索框案例：",[58,61834,61836],{"className":52117,"code":61835,"language":52119,"meta":63,"style":63},"\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",[65,61837,61838,61848,61862,61866,61874,61888,61908,61928,61940,61948,61954,61964,61974,61986,61990,61994,62001,62005,62016,62020,62024,62031,62042,62055,62069,62073,62077,62086,62098,62110,62124,62137,62150,62168,62179,62183,62187,62196,62213,62217,62221,62228,62238,62248,62259,62272,62284,62300,62311,62323,62327,62331,62339,62350,62367,62379,62391,62402,62406,62410,62421,62432,62436,62444,62448,62456,62460,62468,62483,62506,62521,62552,62579,62606,62633,62660,62687,62714,62723,62731,62739,62744,62764,62784,62789,62794,62812,62817,62827,62832,62846,62851,62856,62873,62882,62894,62898,62906,62914,62918],{"__ignoreMap":63},[68,61839,61840,61842,61844,61846],{"class":70,"line":71},[68,61841,52781],{"class":78},[68,61843,52785],{"class":52784},[68,61845,52788],{"class":74},[68,61847,52791],{"class":78},[68,61849,61850,61852,61854,61856,61858,61860],{"class":70,"line":82},[68,61851,2537],{"class":78},[68,61853,52119],{"class":52784},[68,61855,52800],{"class":74},[68,61857,1685],{"class":78},[68,61859,52805],{"class":1742},[68,61861,52791],{"class":78},[68,61863,61864],{"class":70,"line":98},[68,61865,3890],{"emptyLinePlaceholder":1567},[68,61867,61868,61870,61872],{"class":70,"line":104},[68,61869,2537],{"class":78},[68,61871,52818],{"class":52784},[68,61873,52791],{"class":78},[68,61875,61876,61878,61880,61882,61884,61886],{"class":70,"line":112},[68,61877,52825],{"class":78},[68,61879,52828],{"class":52784},[68,61881,52831],{"class":74},[68,61883,1685],{"class":78},[68,61885,52836],{"class":1742},[68,61887,52791],{"class":78},[68,61889,61890,61892,61894,61896,61898,61900,61902,61904,61906],{"class":70,"line":124},[68,61891,52825],{"class":78},[68,61893,52828],{"class":52784},[68,61895,52847],{"class":74},[68,61897,1685],{"class":78},[68,61899,52852],{"class":1742},[68,61901,52855],{"class":74},[68,61903,1685],{"class":78},[68,61905,52860],{"class":1742},[68,61907,52791],{"class":78},[68,61909,61910,61912,61914,61916,61918,61920,61922,61924,61926],{"class":70,"line":1496},[68,61911,52825],{"class":78},[68,61913,52828],{"class":52784},[68,61915,16408],{"class":74},[68,61917,1685],{"class":78},[68,61919,52875],{"class":1742},[68,61921,52855],{"class":74},[68,61923,1685],{"class":78},[68,61925,52882],{"class":1742},[68,61927,52791],{"class":78},[68,61929,61930,61932,61934,61936,61938],{"class":70,"line":1502},[68,61931,52825],{"class":78},[68,61933,52891],{"class":52784},[68,61935,52894],{"class":78},[68,61937,52891],{"class":52784},[68,61939,52791],{"class":78},[68,61941,61942,61944,61946],{"class":70,"line":1510},[68,61943,52825],{"class":78},[68,61945,1553],{"class":52784},[68,61947,52791],{"class":78},[68,61949,61950,61952],{"class":70,"line":1521},[68,61951,52911],{"class":52784},[68,61953,79],{"class":78},[68,61955,61956,61958,61960,61962],{"class":70,"line":3103},[68,61957,52918],{"class":85},[68,61959,89],{"class":78},[68,61961,1248],{"class":85},[68,61963,95],{"class":78},[68,61965,61966,61968,61970,61972],{"class":70,"line":3108},[68,61967,52929],{"class":85},[68,61969,89],{"class":78},[68,61971,1248],{"class":85},[68,61973,95],{"class":78},[68,61975,61976,61979,61981,61984],{"class":70,"line":3114},[68,61977,61978],{"class":85},"            box-sizing",[68,61980,89],{"class":78},[68,61982,61983],{"class":85},"border-box",[68,61985,95],{"class":78},[68,61987,61988],{"class":70,"line":3119},[68,61989,4019],{"class":78},[68,61991,61992],{"class":70,"line":3133},[68,61993,3890],{"emptyLinePlaceholder":1567},[68,61995,61996,61999],{"class":70,"line":3138},[68,61997,61998],{"class":52784},"        ul",[68,62000,79],{"class":78},[68,62002,62003],{"class":70,"line":3144},[68,62004,3890],{"emptyLinePlaceholder":1567},[68,62006,62007,62010,62012,62014],{"class":70,"line":3165},[68,62008,62009],{"class":85},"            list-style",[68,62011,89],{"class":78},[68,62013,151],{"class":85},[68,62015,95],{"class":78},[68,62017,62018],{"class":70,"line":3170},[68,62019,4019],{"class":78},[68,62021,62022],{"class":70,"line":3184},[68,62023,3890],{"emptyLinePlaceholder":1567},[68,62025,62026,62029],{"class":70,"line":3189},[68,62027,62028],{"class":74},"        .mi",[68,62030,79],{"class":78},[68,62032,62033,62036,62038,62040],{"class":70,"line":3218},[68,62034,62035],{"class":85},"            position",[68,62037,89],{"class":78},[68,62039,296],{"class":85},[68,62041,95],{"class":78},[68,62043,62044,62046,62048,62051,62053],{"class":70,"line":3223},[68,62045,52967],{"class":85},[68,62047,89],{"class":78},[68,62049,62050],{"class":85},"223",[68,62052,317],{"class":316},[68,62054,95],{"class":78},[68,62056,62057,62059,62061,62063,62065,62067],{"class":70,"line":3240},[68,62058,52918],{"class":85},[68,62060,89],{"class":78},[68,62062,1940],{"class":85},[68,62064,317],{"class":316},[68,62066,53038],{"class":85},[68,62068,95],{"class":78},[68,62070,62071],{"class":70,"line":3245},[68,62072,4019],{"class":78},[68,62074,62075],{"class":70,"line":3250},[68,62076,3890],{"emptyLinePlaceholder":1567},[68,62078,62079,62081,62084],{"class":70,"line":3255},[68,62080,62028],{"class":74},[68,62082,62083],{"class":52784}," input",[68,62085,79],{"class":78},[68,62087,62088,62090,62092,62094,62096],{"class":70,"line":3269},[68,62089,52967],{"class":85},[68,62091,89],{"class":78},[68,62093,62050],{"class":85},[68,62095,317],{"class":316},[68,62097,95],{"class":78},[68,62099,62100,62102,62104,62106,62108],{"class":70,"line":3274},[68,62101,52981],{"class":85},[68,62103,89],{"class":78},[68,62105,2235],{"class":85},[68,62107,317],{"class":316},[68,62109,95],{"class":78},[68,62111,62112,62114,62116,62118,62120,62122],{"class":70,"line":4067},[68,62113,52929],{"class":85},[68,62115,89],{"class":78},[68,62117,1248],{"class":85},[68,62119,3528],{"class":85},[68,62121,317],{"class":316},[68,62123,95],{"class":78},[68,62125,62126,62129,62131,62133,62135],{"class":70,"line":4081},[68,62127,62128],{"class":85},"            font-size",[68,62130,89],{"class":78},[68,62132,2177],{"class":85},[68,62134,317],{"class":316},[68,62136,95],{"class":78},[68,62138,62139,62142,62144,62146,62148],{"class":70,"line":4089},[68,62140,62141],{"class":85},"            line-height",[68,62143,89],{"class":78},[68,62145,2235],{"class":85},[68,62147,317],{"class":316},[68,62149,95],{"class":78},[68,62151,62152,62155,62157,62159,62161,62163,62166],{"class":70,"line":4094},[68,62153,62154],{"class":85},"            border",[68,62156,89],{"class":78},[68,62158,1846],{"class":85},[68,62160,317],{"class":316},[68,62162,53003],{"class":85},[68,62164,62165],{"class":85}," #e0e0e0",[68,62167,95],{"class":78},[68,62169,62170,62173,62175,62177],{"class":70,"line":4100},[68,62171,62172],{"class":85},"            outline",[68,62174,89],{"class":78},[68,62176,151],{"class":85},[68,62178,95],{"class":78},[68,62180,62181],{"class":70,"line":4106},[68,62182,4019],{"class":78},[68,62184,62185],{"class":70,"line":4111},[68,62186,3890],{"emptyLinePlaceholder":1567},[68,62188,62189,62191,62194],{"class":70,"line":9437},[68,62190,62028],{"class":74},[68,62192,62193],{"class":74}," .search",[68,62195,79],{"class":78},[68,62197,62198,62200,62202,62204,62206,62208,62211],{"class":70,"line":9461},[68,62199,62154],{"class":85},[68,62201,89],{"class":78},[68,62203,1846],{"class":85},[68,62205,317],{"class":316},[68,62207,53003],{"class":85},[68,62209,62210],{"class":85}," #ff6700",[68,62212,95],{"class":78},[68,62214,62215],{"class":70,"line":9466},[68,62216,4019],{"class":78},[68,62218,62219],{"class":70,"line":9472},[68,62220,3890],{"emptyLinePlaceholder":1567},[68,62222,62223,62226],{"class":70,"line":9499},[68,62224,62225],{"class":74},"        .result-list",[68,62227,79],{"class":78},[68,62229,62230,62232,62234,62236],{"class":70,"line":9504},[68,62231,52955],{"class":85},[68,62233,89],{"class":78},[68,62235,151],{"class":85},[68,62237,95],{"class":78},[68,62239,62240,62242,62244,62246],{"class":70,"line":9510},[68,62241,62035],{"class":85},[68,62243,89],{"class":78},[68,62245,379],{"class":85},[68,62247,95],{"class":78},[68,62249,62250,62253,62255,62257],{"class":70,"line":9522},[68,62251,62252],{"class":85},"            left",[68,62254,89],{"class":78},[68,62256,1248],{"class":85},[68,62258,95],{"class":78},[68,62260,62261,62264,62266,62268,62270],{"class":70,"line":9534},[68,62262,62263],{"class":85},"            top",[68,62265,89],{"class":78},[68,62267,2235],{"class":85},[68,62269,317],{"class":316},[68,62271,95],{"class":78},[68,62273,62274,62276,62278,62280,62282],{"class":70,"line":9546},[68,62275,52967],{"class":85},[68,62277,89],{"class":78},[68,62279,62050],{"class":85},[68,62281,317],{"class":316},[68,62283,95],{"class":78},[68,62285,62286,62288,62290,62292,62294,62296,62298],{"class":70,"line":11204},[68,62287,62154],{"class":85},[68,62289,89],{"class":78},[68,62291,1846],{"class":85},[68,62293,317],{"class":316},[68,62295,53003],{"class":85},[68,62297,62210],{"class":85},[68,62299,95],{"class":78},[68,62301,62302,62305,62307,62309],{"class":70,"line":11229},[68,62303,62304],{"class":85},"            border-top",[68,62306,89],{"class":78},[68,62308,1248],{"class":85},[68,62310,95],{"class":78},[68,62312,62313,62316,62318,62321],{"class":70,"line":11252},[68,62314,62315],{"class":85},"            background",[68,62317,89],{"class":78},[68,62319,62320],{"class":85},"#fff",[68,62322,95],{"class":78},[68,62324,62325],{"class":70,"line":11276},[68,62326,4019],{"class":78},[68,62328,62329],{"class":70,"line":11281},[68,62330,3890],{"emptyLinePlaceholder":1567},[68,62332,62333,62335,62337],{"class":70,"line":11286},[68,62334,62225],{"class":74},[68,62336,2891],{"class":52784},[68,62338,79],{"class":78},[68,62340,62341,62343,62345,62348],{"class":70,"line":11291},[68,62342,52955],{"class":85},[68,62344,89],{"class":78},[68,62346,62347],{"class":85},"block",[68,62349,95],{"class":78},[68,62351,62352,62354,62356,62358,62360,62363,62365],{"class":70,"line":11300},[68,62353,52929],{"class":85},[68,62355,89],{"class":78},[68,62357,1973],{"class":85},[68,62359,317],{"class":316},[68,62361,62362],{"class":85}," 15",[68,62364,317],{"class":316},[68,62366,95],{"class":78},[68,62368,62369,62371,62373,62375,62377],{"class":70,"line":11305},[68,62370,62128],{"class":85},[68,62372,89],{"class":78},[68,62374,2126],{"class":85},[68,62376,317],{"class":316},[68,62378,95],{"class":78},[68,62380,62381,62384,62386,62389],{"class":70,"line":11311},[68,62382,62383],{"class":85},"            color",[68,62385,89],{"class":78},[68,62387,62388],{"class":85},"#424242",[68,62390,95],{"class":78},[68,62392,62393,62396,62398,62400],{"class":70,"line":11332},[68,62394,62395],{"class":85},"            text-decoration",[68,62397,89],{"class":78},[68,62399,151],{"class":85},[68,62401,95],{"class":78},[68,62403,62404],{"class":70,"line":11338},[68,62405,4019],{"class":78},[68,62407,62408],{"class":70,"line":11352},[68,62409,3890],{"emptyLinePlaceholder":1567},[68,62411,62412,62414,62416,62419],{"class":70,"line":11358},[68,62413,62225],{"class":74},[68,62415,2891],{"class":52784},[68,62417,62418],{"class":74},":hover",[68,62420,79],{"class":78},[68,62422,62423,62425,62427,62430],{"class":70,"line":11385},[68,62424,53122],{"class":85},[68,62426,89],{"class":78},[68,62428,62429],{"class":85},"#eee",[68,62431,95],{"class":78},[68,62433,62434],{"class":70,"line":11394},[68,62435,4019],{"class":78},[68,62437,62438,62440,62442],{"class":70,"line":11400},[68,62439,53258],{"class":78},[68,62441,1553],{"class":52784},[68,62443,52791],{"class":78},[68,62445,62446],{"class":70,"line":11408},[68,62447,3890],{"emptyLinePlaceholder":1567},[68,62449,62450,62452,62454],{"class":70,"line":11413},[68,62451,53267],{"class":78},[68,62453,52818],{"class":52784},[68,62455,52791],{"class":78},[68,62457,62458],{"class":70,"line":18091},[68,62459,3890],{"emptyLinePlaceholder":1567},[68,62461,62462,62464,62466],{"class":70,"line":18097},[68,62463,2537],{"class":78},[68,62465,53282],{"class":52784},[68,62467,52791],{"class":78},[68,62469,62470,62472,62474,62476,62478,62481],{"class":70,"line":18120},[68,62471,52825],{"class":78},[68,62473,53093],{"class":52784},[68,62475,54968],{"class":74},[68,62477,1685],{"class":78},[68,62479,62480],{"class":1742},"\"mi\"",[68,62482,52791],{"class":78},[68,62484,62485,62487,62489,62491,62493,62496,62499,62501,62504],{"class":70,"line":18126},[68,62486,56780],{"class":78},[68,62488,55302],{"class":52784},[68,62490,55305],{"class":74},[68,62492,1685],{"class":78},[68,62494,62495],{"class":1742},"\"search\"",[68,62497,62498],{"class":74}," placeholder",[68,62500,1685],{"class":78},[68,62502,62503],{"class":1742},"\"小米笔记本\"",[68,62505,52791],{"class":78},[68,62507,62508,62510,62512,62514,62516,62519],{"class":70,"line":18149},[68,62509,56780],{"class":78},[68,62511,24],{"class":52784},[68,62513,54968],{"class":74},[68,62515,1685],{"class":78},[68,62517,62518],{"class":1742},"\"result-list\"",[68,62520,52791],{"class":78},[68,62522,62523,62526,62528,62531,62533,62536,62538,62541,62544,62546,62548,62550],{"class":70,"line":18163},[68,62524,62525],{"class":78},"            \u003C",[68,62527,27],{"class":52784},[68,62529,62530],{"class":78},">\u003C",[68,62532,1867],{"class":52784},[68,62534,62535],{"class":74}," href",[68,62537,1685],{"class":78},[68,62539,62540],{"class":1742},"\"#\"",[68,62542,62543],{"class":78},">全部商品\u003C\u002F",[68,62545,1867],{"class":52784},[68,62547,56792],{"class":78},[68,62549,27],{"class":52784},[68,62551,52791],{"class":78},[68,62553,62554,62556,62558,62560,62562,62564,62566,62568,62571,62573,62575,62577],{"class":70,"line":18183},[68,62555,62525],{"class":78},[68,62557,27],{"class":52784},[68,62559,62530],{"class":78},[68,62561,1867],{"class":52784},[68,62563,62535],{"class":74},[68,62565,1685],{"class":78},[68,62567,62540],{"class":1742},[68,62569,62570],{"class":78},">小米11\u003C\u002F",[68,62572,1867],{"class":52784},[68,62574,56792],{"class":78},[68,62576,27],{"class":52784},[68,62578,52791],{"class":78},[68,62580,62581,62583,62585,62587,62589,62591,62593,62595,62598,62600,62602,62604],{"class":70,"line":18189},[68,62582,62525],{"class":78},[68,62584,27],{"class":52784},[68,62586,62530],{"class":78},[68,62588,1867],{"class":52784},[68,62590,62535],{"class":74},[68,62592,1685],{"class":78},[68,62594,62540],{"class":1742},[68,62596,62597],{"class":78},">小米10S\u003C\u002F",[68,62599,1867],{"class":52784},[68,62601,56792],{"class":78},[68,62603,27],{"class":52784},[68,62605,52791],{"class":78},[68,62607,62608,62610,62612,62614,62616,62618,62620,62622,62625,62627,62629,62631],{"class":70,"line":18200},[68,62609,62525],{"class":78},[68,62611,27],{"class":52784},[68,62613,62530],{"class":78},[68,62615,1867],{"class":52784},[68,62617,62535],{"class":74},[68,62619,1685],{"class":78},[68,62621,62540],{"class":1742},[68,62623,62624],{"class":78},">小米笔记本\u003C\u002F",[68,62626,1867],{"class":52784},[68,62628,56792],{"class":78},[68,62630,27],{"class":52784},[68,62632,52791],{"class":78},[68,62634,62635,62637,62639,62641,62643,62645,62647,62649,62652,62654,62656,62658],{"class":70,"line":18223},[68,62636,62525],{"class":78},[68,62638,27],{"class":52784},[68,62640,62530],{"class":78},[68,62642,1867],{"class":52784},[68,62644,62535],{"class":74},[68,62646,1685],{"class":78},[68,62648,62540],{"class":1742},[68,62650,62651],{"class":78},">小米手机\u003C\u002F",[68,62653,1867],{"class":52784},[68,62655,56792],{"class":78},[68,62657,27],{"class":52784},[68,62659,52791],{"class":78},[68,62661,62662,62664,62666,62668,62670,62672,62674,62676,62679,62681,62683,62685],{"class":70,"line":18245},[68,62663,62525],{"class":78},[68,62665,27],{"class":52784},[68,62667,62530],{"class":78},[68,62669,1867],{"class":52784},[68,62671,62535],{"class":74},[68,62673,1685],{"class":78},[68,62675,62540],{"class":1742},[68,62677,62678],{"class":78},">黑鲨4\u003C\u002F",[68,62680,1867],{"class":52784},[68,62682,56792],{"class":78},[68,62684,27],{"class":52784},[68,62686,52791],{"class":78},[68,62688,62689,62691,62693,62695,62697,62699,62701,62703,62706,62708,62710,62712],{"class":70,"line":18250},[68,62690,62525],{"class":78},[68,62692,27],{"class":52784},[68,62694,62530],{"class":78},[68,62696,1867],{"class":52784},[68,62698,62535],{"class":74},[68,62700,1685],{"class":78},[68,62702,62540],{"class":1742},[68,62704,62705],{"class":78},">空调\u003C\u002F",[68,62707,1867],{"class":52784},[68,62709,56792],{"class":78},[68,62711,27],{"class":52784},[68,62713,52791],{"class":78},[68,62715,62716,62719,62721],{"class":70,"line":18256},[68,62717,62718],{"class":78},"        \u003C\u002F",[68,62720,24],{"class":52784},[68,62722,52791],{"class":78},[68,62724,62725,62727,62729],{"class":70,"line":18270},[68,62726,53258],{"class":78},[68,62728,53093],{"class":52784},[68,62730,52791],{"class":78},[68,62732,62733,62735,62737],{"class":70,"line":18283},[68,62734,52825],{"class":78},[68,62736,53295],{"class":52784},[68,62738,52791],{"class":78},[68,62740,62741],{"class":70,"line":18288},[68,62742,62743],{"class":302},"        \u002F\u002F 1. 获取元素\n",[68,62745,62746,62749,62751,62753,62755,62757,62759,62762],{"class":70,"line":18302},[68,62747,62748],{"class":316},"        const",[68,62750,62083],{"class":85},[68,62752,15052],{"class":316},[68,62754,55877],{"class":78},[68,62756,55880],{"class":74},[68,62758,1640],{"class":78},[68,62760,62761],{"class":1742},"'[type=search]'",[68,62763,1646],{"class":78},[68,62765,62766,62768,62771,62773,62775,62777,62779,62782],{"class":70,"line":18307},[68,62767,62748],{"class":316},[68,62769,62770],{"class":85}," ul",[68,62772,15052],{"class":316},[68,62774,55877],{"class":78},[68,62776,55880],{"class":74},[68,62778,1640],{"class":78},[68,62780,62781],{"class":1742},"'.result-list'",[68,62783,1646],{"class":78},[68,62785,62786],{"class":70,"line":18313},[68,62787,62788],{"class":302},"        \u002F\u002F console.log(input)\n",[68,62790,62791],{"class":70,"line":18318},[68,62792,62793],{"class":302},"        \u002F\u002F 2. 监听事件 获得焦点\n",[68,62795,62796,62799,62801,62803,62806,62808,62810],{"class":70,"line":18332},[68,62797,62798],{"class":78},"        input.",[68,62800,59291],{"class":74},[68,62802,1640],{"class":78},[68,62804,62805],{"class":1742},"'focus'",[68,62807,13923],{"class":78},[68,62809,55930],{"class":316},[68,62811,55933],{"class":78},[68,62813,62814],{"class":70,"line":18337},[68,62815,62816],{"class":302},"            \u002F\u002F ul显示\n",[68,62818,62819,62822,62824],{"class":70,"line":18342},[68,62820,62821],{"class":78},"            ul.style.display ",[68,62823,1685],{"class":316},[68,62825,62826],{"class":1742}," 'block'\n",[68,62828,62829],{"class":70,"line":18356},[68,62830,62831],{"class":302},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[68,62833,62834,62837,62839,62841,62844],{"class":70,"line":18368},[68,62835,62836],{"class":78},"            input.classList.",[68,62838,6823],{"class":74},[68,62840,1640],{"class":78},[68,62842,62843],{"class":1742},"'search'",[68,62845,1646],{"class":78},[68,62847,62848],{"class":70,"line":18373},[68,62849,62850],{"class":78},"        })\n",[68,62852,62853],{"class":70,"line":18386},[68,62854,62855],{"class":302},"        \u002F\u002F 3. 监听事件 失去焦点\n",[68,62857,62858,62860,62862,62864,62867,62869,62871],{"class":70,"line":18391},[68,62859,62798],{"class":78},[68,62861,59291],{"class":74},[68,62863,1640],{"class":78},[68,62865,62866],{"class":1742},"'blur'",[68,62868,13923],{"class":78},[68,62870,55930],{"class":316},[68,62872,55933],{"class":78},[68,62874,62875,62877,62879],{"class":70,"line":18396},[68,62876,62821],{"class":78},[68,62878,1685],{"class":316},[68,62880,62881],{"class":1742}," 'none'\n",[68,62883,62884,62886,62888,62890,62892],{"class":70,"line":18401},[68,62885,62836],{"class":78},[68,62887,58484],{"class":74},[68,62889,1640],{"class":78},[68,62891,62843],{"class":1742},[68,62893,1646],{"class":78},[68,62895,62896],{"class":70,"line":18414},[68,62897,62850],{"class":78},[68,62899,62900,62902,62904],{"class":70,"line":18419},[68,62901,53258],{"class":78},[68,62903,53295],{"class":52784},[68,62905,52791],{"class":78},[68,62907,62908,62910,62912],{"class":70,"line":34117},[68,62909,53267],{"class":78},[68,62911,53282],{"class":52784},[68,62913,52791],{"class":78},[68,62915,62916],{"class":70,"line":34123},[68,62917,3890],{"emptyLinePlaceholder":1567},[68,62919,62920,62922,62924],{"class":70,"line":34129},[68,62921,53267],{"class":78},[68,62923,52119],{"class":52784},[68,62925,52791],{"class":78},[245,62927,62929],{"id":62928},"_3253-键盘事件","3.2.5.3 键盘事件",[170,62931,62932],{},"评论字数统计案例",[170,62934,62935],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[170,62937,62938],{},"牢记focus伪类选择器",[52828,62940],{"charSet":62941},"UTF-8",[52828,62943],{"name":62944,"content":62945},"viewport","width=device-width, initial-scale=1.0",[52891,62947,62948],{},"Document",[1553,62950,62951],{},"\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",[55302,62953],{"type":6676},[24,62955,62956,62959],{},[27,62957,62958],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[27,62960,62961],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[58,62963,62965],{"className":52117,"code":62964,"language":52119,"meta":63,"style":63},"\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",[65,62966,62967,62977,62991,62995,63003,63017,63037,63057,63070,63078,63085,63098,63112,63122,63132,63136,63140,63147,63159,63171,63183,63195,63224,63237,63241,63245,63254,63265,63277,63288,63299,63311,63322,63334,63350,63362,63366,63370,63381,63392,63402,63414,63418,63422,63430,63441,63451,63462,63474,63487,63499,63511,63515,63519,63528,63540,63551,63564,63575,63589,63593,63597,63604,63616,63628,63638,63642,63646,63655,63667,63677,63681,63685,63696,63706,63725,63738,63742,63746,63756,63766,63770,63774,63785,63796,63808,63820,63824,63828,63839,63850,63864,63868,63872,63883,63893,63905,63909,63917,63925,63929,63937,63952,63971,64011,64024,64032,64046,64066,64074,64089,64112,64130,64145,64165,64185,64205,64213,64221,64229,64237,64257,64277,64282,64299,64308,64312,64317,64333,64341,64345,64350,64367,64372,64397,64401,64405,64410,64415,64423,64431,64435],{"__ignoreMap":63},[68,62968,62969,62971,62973,62975],{"class":70,"line":71},[68,62970,52781],{"class":78},[68,62972,52785],{"class":52784},[68,62974,52788],{"class":74},[68,62976,52791],{"class":78},[68,62978,62979,62981,62983,62985,62987,62989],{"class":70,"line":82},[68,62980,2537],{"class":78},[68,62982,52119],{"class":52784},[68,62984,52800],{"class":74},[68,62986,1685],{"class":78},[68,62988,52805],{"class":1742},[68,62990,52791],{"class":78},[68,62992,62993],{"class":70,"line":98},[68,62994,3890],{"emptyLinePlaceholder":1567},[68,62996,62997,62999,63001],{"class":70,"line":104},[68,62998,2537],{"class":78},[68,63000,52818],{"class":52784},[68,63002,52791],{"class":78},[68,63004,63005,63007,63009,63011,63013,63015],{"class":70,"line":112},[68,63006,53626],{"class":78},[68,63008,52828],{"class":52784},[68,63010,52831],{"class":74},[68,63012,1685],{"class":78},[68,63014,52836],{"class":1742},[68,63016,52791],{"class":78},[68,63018,63019,63021,63023,63025,63027,63029,63031,63033,63035],{"class":70,"line":124},[68,63020,53626],{"class":78},[68,63022,52828],{"class":52784},[68,63024,52847],{"class":74},[68,63026,1685],{"class":78},[68,63028,52852],{"class":1742},[68,63030,52855],{"class":74},[68,63032,1685],{"class":78},[68,63034,52860],{"class":1742},[68,63036,52791],{"class":78},[68,63038,63039,63041,63043,63045,63047,63049,63051,63053,63055],{"class":70,"line":1496},[68,63040,53626],{"class":78},[68,63042,52828],{"class":52784},[68,63044,16408],{"class":74},[68,63046,1685],{"class":78},[68,63048,52875],{"class":1742},[68,63050,52855],{"class":74},[68,63052,1685],{"class":78},[68,63054,52882],{"class":1742},[68,63056,52791],{"class":78},[68,63058,63059,63061,63063,63066,63068],{"class":70,"line":1502},[68,63060,53626],{"class":78},[68,63062,52891],{"class":52784},[68,63064,63065],{"class":78},">评论回车发布\u003C\u002F",[68,63067,52891],{"class":52784},[68,63069,52791],{"class":78},[68,63071,63072,63074,63076],{"class":70,"line":1510},[68,63073,53626],{"class":78},[68,63075,1553],{"class":52784},[68,63077,52791],{"class":78},[68,63079,63080,63083],{"class":70,"line":1521},[68,63081,63082],{"class":74},"    .wrapper",[68,63084,79],{"class":78},[68,63086,63087,63090,63092,63094,63096],{"class":70,"line":3103},[68,63088,63089],{"class":85},"      min-width",[68,63091,89],{"class":78},[68,63093,5477],{"class":85},[68,63095,317],{"class":316},[68,63097,95],{"class":78},[68,63099,63100,63103,63105,63108,63110],{"class":70,"line":3108},[68,63101,63102],{"class":85},"      max-width",[68,63104,89],{"class":78},[68,63106,63107],{"class":85},"800",[68,63109,317],{"class":316},[68,63111,95],{"class":78},[68,63113,63114,63116,63118,63120],{"class":70,"line":3114},[68,63115,56487],{"class":85},[68,63117,89],{"class":78},[68,63119,52960],{"class":85},[68,63121,95],{"class":78},[68,63123,63124,63126,63128,63130],{"class":70,"line":3119},[68,63125,56498],{"class":85},[68,63127,89],{"class":78},[68,63129,53062],{"class":85},[68,63131,95],{"class":78},[68,63133,63134],{"class":70,"line":3133},[68,63135,3677],{"class":78},[68,63137,63138],{"class":70,"line":3138},[68,63139,3890],{"emptyLinePlaceholder":1567},[68,63141,63142,63145],{"class":70,"line":3144},[68,63143,63144],{"class":74},"    .avatar",[68,63146,79],{"class":78},[68,63148,63149,63151,63153,63155,63157],{"class":70,"line":3165},[68,63150,56250],{"class":85},[68,63152,89],{"class":78},[68,63154,2235],{"class":85},[68,63156,317],{"class":316},[68,63158,95],{"class":78},[68,63160,63161,63163,63165,63167,63169],{"class":70,"line":3170},[68,63162,56264],{"class":85},[68,63164,89],{"class":78},[68,63166,2235],{"class":85},[68,63168,317],{"class":316},[68,63170,95],{"class":78},[68,63172,63173,63175,63177,63179,63181],{"class":70,"line":3184},[68,63174,56612],{"class":85},[68,63176,89],{"class":78},[68,63178,2284],{"class":85},[68,63180,1957],{"class":316},[68,63182,95],{"class":78},[68,63184,63185,63188,63190,63193],{"class":70,"line":3189},[68,63186,63187],{"class":85},"      overflow",[68,63189,89],{"class":78},[68,63191,63192],{"class":85},"hidden",[68,63194,95],{"class":78},[68,63196,63197,63200,63202,63205,63207,63210,63212,63215,63217,63219,63222],{"class":70,"line":3218},[68,63198,63199],{"class":85},"      background",[68,63201,89],{"class":78},[68,63203,63204],{"class":85},"url",[68,63206,1640],{"class":78},[68,63208,63209],{"class":6705},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[68,63211,15202],{"class":78},[68,63213,63214],{"class":85},"no-repeat",[68,63216,18631],{"class":85},[68,63218,26464],{"class":78},[68,63220,63221],{"class":85},"cover",[68,63223,95],{"class":78},[68,63225,63226,63229,63231,63233,63235],{"class":70,"line":3223},[68,63227,63228],{"class":85},"      margin-right",[68,63230,89],{"class":78},[68,63232,333],{"class":85},[68,63234,317],{"class":316},[68,63236,95],{"class":78},[68,63238,63239],{"class":70,"line":3240},[68,63240,3677],{"class":78},[68,63242,63243],{"class":70,"line":3245},[68,63244,3890],{"emptyLinePlaceholder":1567},[68,63246,63247,63249,63252],{"class":70,"line":3250},[68,63248,63082],{"class":74},[68,63250,63251],{"class":52784}," textarea",[68,63253,79],{"class":78},[68,63255,63256,63259,63261,63263],{"class":70,"line":3255},[68,63257,63258],{"class":85},"      outline",[68,63260,89],{"class":78},[68,63262,151],{"class":85},[68,63264,95],{"class":78},[68,63266,63267,63270,63272,63275],{"class":70,"line":3269},[68,63268,63269],{"class":85},"      border-color",[68,63271,89],{"class":78},[68,63273,63274],{"class":85},"transparent",[68,63276,95],{"class":78},[68,63278,63279,63282,63284,63286],{"class":70,"line":3274},[68,63280,63281],{"class":85},"      resize",[68,63283,89],{"class":78},[68,63285,151],{"class":85},[68,63287,95],{"class":78},[68,63289,63290,63292,63294,63297],{"class":70,"line":4067},[68,63291,63199],{"class":85},[68,63293,89],{"class":78},[68,63295,63296],{"class":85},"#f5f5f5",[68,63298,95],{"class":78},[68,63300,63301,63303,63305,63307,63309],{"class":70,"line":4081},[68,63302,56612],{"class":85},[68,63304,89],{"class":78},[68,63306,1922],{"class":85},[68,63308,317],{"class":316},[68,63310,95],{"class":78},[68,63312,63313,63316,63318,63320],{"class":70,"line":4089},[68,63314,63315],{"class":85},"      flex",[68,63317,89],{"class":78},[68,63319,1846],{"class":85},[68,63321,95],{"class":78},[68,63323,63324,63326,63328,63330,63332],{"class":70,"line":4094},[68,63325,56176],{"class":85},[68,63327,89],{"class":78},[68,63329,313],{"class":85},[68,63331,317],{"class":316},[68,63333,95],{"class":78},[68,63335,63336,63339,63341,63343,63346,63348],{"class":70,"line":4100},[68,63337,63338],{"class":85},"      transition",[68,63340,89],{"class":78},[68,63342,29605],{"class":85},[68,63344,63345],{"class":85}," 0.5",[68,63347,2323],{"class":316},[68,63349,95],{"class":78},[68,63351,63352,63354,63356,63358,63360],{"class":70,"line":4106},[68,63353,56264],{"class":85},[68,63355,89],{"class":78},[68,63357,2578],{"class":85},[68,63359,317],{"class":316},[68,63361,95],{"class":78},[68,63363,63364],{"class":70,"line":4111},[68,63365,3677],{"class":78},[68,63367,63368],{"class":70,"line":9437},[68,63369,3890],{"emptyLinePlaceholder":1567},[68,63371,63372,63374,63376,63379],{"class":70,"line":9461},[68,63373,63082],{"class":74},[68,63375,63251],{"class":52784},[68,63377,63378],{"class":74},":focus",[68,63380,79],{"class":78},[68,63382,63383,63385,63387,63390],{"class":70,"line":9466},[68,63384,63269],{"class":85},[68,63386,89],{"class":78},[68,63388,63389],{"class":85},"#e4e4e4",[68,63391,95],{"class":78},[68,63393,63394,63396,63398,63400],{"class":70,"line":9472},[68,63395,63199],{"class":85},[68,63397,89],{"class":78},[68,63399,62320],{"class":85},[68,63401,95],{"class":78},[68,63403,63404,63406,63408,63410,63412],{"class":70,"line":9499},[68,63405,56264],{"class":85},[68,63407,89],{"class":78},[68,63409,2284],{"class":85},[68,63411,317],{"class":316},[68,63413,95],{"class":78},[68,63415,63416],{"class":70,"line":9504},[68,63417,3677],{"class":78},[68,63419,63420],{"class":70,"line":9510},[68,63421,3890],{"emptyLinePlaceholder":1567},[68,63423,63424,63426,63428],{"class":70,"line":9522},[68,63425,63082],{"class":74},[68,63427,58945],{"class":52784},[68,63429,79],{"class":78},[68,63431,63432,63434,63436,63439],{"class":70,"line":9534},[68,63433,63199],{"class":85},[68,63435,89],{"class":78},[68,63437,63438],{"class":85},"#00aeec",[68,63440,95],{"class":78},[68,63442,63443,63445,63447,63449],{"class":70,"line":9546},[68,63444,58894],{"class":85},[68,63446,89],{"class":78},[68,63448,62320],{"class":85},[68,63450,95],{"class":78},[68,63452,63453,63456,63458,63460],{"class":70,"line":11204},[68,63454,63455],{"class":85},"      border",[68,63457,89],{"class":78},[68,63459,151],{"class":85},[68,63461,95],{"class":78},[68,63463,63464,63466,63468,63470,63472],{"class":70,"line":11229},[68,63465,56612],{"class":85},[68,63467,89],{"class":78},[68,63469,1922],{"class":85},[68,63471,317],{"class":316},[68,63473,95],{"class":78},[68,63475,63476,63479,63481,63483,63485],{"class":70,"line":11252},[68,63477,63478],{"class":85},"      margin-left",[68,63480,89],{"class":78},[68,63482,313],{"class":85},[68,63484,317],{"class":316},[68,63486,95],{"class":78},[68,63488,63489,63491,63493,63495,63497],{"class":70,"line":11276},[68,63490,56250],{"class":85},[68,63492,89],{"class":78},[68,63494,1985],{"class":85},[68,63496,317],{"class":316},[68,63498,95],{"class":78},[68,63500,63501,63504,63506,63509],{"class":70,"line":11281},[68,63502,63503],{"class":85},"      cursor",[68,63505,89],{"class":78},[68,63507,63508],{"class":85},"pointer",[68,63510,95],{"class":78},[68,63512,63513],{"class":70,"line":11286},[68,63514,3677],{"class":78},[68,63516,63517],{"class":70,"line":11291},[68,63518,3890],{"emptyLinePlaceholder":1567},[68,63520,63521,63523,63526],{"class":70,"line":11300},[68,63522,63082],{"class":74},[68,63524,63525],{"class":74}," .total",[68,63527,79],{"class":78},[68,63529,63530,63532,63534,63536,63538],{"class":70,"line":11305},[68,63531,63228],{"class":85},[68,63533,89],{"class":78},[68,63535,2240],{"class":85},[68,63537,317],{"class":316},[68,63539,95],{"class":78},[68,63541,63542,63544,63546,63549],{"class":70,"line":11311},[68,63543,58894],{"class":85},[68,63545,89],{"class":78},[68,63547,63548],{"class":85},"#999",[68,63550,95],{"class":78},[68,63552,63553,63556,63558,63560,63562],{"class":70,"line":11332},[68,63554,63555],{"class":85},"      margin-top",[68,63557,89],{"class":78},[68,63559,1948],{"class":85},[68,63561,317],{"class":316},[68,63563,95],{"class":78},[68,63565,63566,63569,63571,63573],{"class":70,"line":11338},[68,63567,63568],{"class":85},"      opacity",[68,63570,89],{"class":78},[68,63572,1248],{"class":85},[68,63574,95],{"class":78},[68,63576,63577,63579,63581,63583,63585,63587],{"class":70,"line":11352},[68,63578,63338],{"class":85},[68,63580,89],{"class":78},[68,63582,29605],{"class":85},[68,63584,63345],{"class":85},[68,63586,2323],{"class":316},[68,63588,95],{"class":78},[68,63590,63591],{"class":70,"line":11358},[68,63592,3677],{"class":78},[68,63594,63595],{"class":70,"line":11385},[68,63596,3890],{"emptyLinePlaceholder":1567},[68,63598,63599,63602],{"class":70,"line":11394},[68,63600,63601],{"class":74},"    .list",[68,63603,79],{"class":78},[68,63605,63606,63608,63610,63612,63614],{"class":70,"line":11400},[68,63607,63089],{"class":85},[68,63609,89],{"class":78},[68,63611,5477],{"class":85},[68,63613,317],{"class":316},[68,63615,95],{"class":78},[68,63617,63618,63620,63622,63624,63626],{"class":70,"line":11408},[68,63619,63102],{"class":85},[68,63621,89],{"class":78},[68,63623,63107],{"class":85},[68,63625,317],{"class":316},[68,63627,95],{"class":78},[68,63629,63630,63632,63634,63636],{"class":70,"line":11413},[68,63631,56487],{"class":85},[68,63633,89],{"class":78},[68,63635,52960],{"class":85},[68,63637,95],{"class":78},[68,63639,63640],{"class":70,"line":18091},[68,63641,3677],{"class":78},[68,63643,63644],{"class":70,"line":18097},[68,63645,3890],{"emptyLinePlaceholder":1567},[68,63647,63648,63650,63653],{"class":70,"line":18120},[68,63649,63601],{"class":74},[68,63651,63652],{"class":74}," .item",[68,63654,79],{"class":78},[68,63656,63657,63659,63661,63663,63665],{"class":70,"line":18126},[68,63658,56250],{"class":85},[68,63660,89],{"class":78},[68,63662,1940],{"class":85},[68,63664,1957],{"class":316},[68,63666,95],{"class":78},[68,63668,63669,63671,63673,63675],{"class":70,"line":18149},[68,63670,56487],{"class":85},[68,63672,89],{"class":78},[68,63674,52960],{"class":85},[68,63676,95],{"class":78},[68,63678,63679],{"class":70,"line":18163},[68,63680,3677],{"class":78},[68,63682,63683],{"class":70,"line":18183},[68,63684,3890],{"emptyLinePlaceholder":1567},[68,63686,63687,63689,63691,63694],{"class":70,"line":18189},[68,63688,63601],{"class":74},[68,63690,63652],{"class":74},[68,63692,63693],{"class":74}," .info",[68,63695,79],{"class":78},[68,63697,63698,63700,63702,63704],{"class":70,"line":18200},[68,63699,63315],{"class":85},[68,63701,89],{"class":78},[68,63703,1846],{"class":85},[68,63705,95],{"class":78},[68,63707,63708,63711,63713,63715,63717,63720,63723],{"class":70,"line":18223},[68,63709,63710],{"class":85},"      border-bottom",[68,63712,89],{"class":78},[68,63714,1846],{"class":85},[68,63716,317],{"class":316},[68,63718,63719],{"class":85}," dashed",[68,63721,63722],{"class":85}," #e4e4e4",[68,63724,95],{"class":78},[68,63726,63727,63730,63732,63734,63736],{"class":70,"line":18245},[68,63728,63729],{"class":85},"      padding-bottom",[68,63731,89],{"class":78},[68,63733,313],{"class":85},[68,63735,317],{"class":316},[68,63737,95],{"class":78},[68,63739,63740],{"class":70,"line":18250},[68,63741,3677],{"class":78},[68,63743,63744],{"class":70,"line":18256},[68,63745,3890],{"emptyLinePlaceholder":1567},[68,63747,63748,63750,63752,63754],{"class":70,"line":18270},[68,63749,63601],{"class":74},[68,63751,63652],{"class":74},[68,63753,8314],{"class":52784},[68,63755,79],{"class":78},[68,63757,63758,63760,63762,63764],{"class":70,"line":18283},[68,63759,56187],{"class":85},[68,63761,89],{"class":78},[68,63763,1248],{"class":85},[68,63765,95],{"class":78},[68,63767,63768],{"class":70,"line":18288},[68,63769,3677],{"class":78},[68,63771,63772],{"class":70,"line":18302},[68,63773,3890],{"emptyLinePlaceholder":1567},[68,63775,63776,63778,63780,63783],{"class":70,"line":18307},[68,63777,63601],{"class":74},[68,63779,63652],{"class":74},[68,63781,63782],{"class":74}," .name",[68,63784,79],{"class":78},[68,63786,63787,63789,63791,63794],{"class":70,"line":18313},[68,63788,58894],{"class":85},[68,63790,89],{"class":78},[68,63792,63793],{"class":85},"#FB7299",[68,63795,95],{"class":78},[68,63797,63798,63800,63802,63804,63806],{"class":70,"line":18318},[68,63799,56400],{"class":85},[68,63801,89],{"class":78},[68,63803,2177],{"class":85},[68,63805,317],{"class":316},[68,63807,95],{"class":78},[68,63809,63810,63813,63815,63818],{"class":70,"line":18332},[68,63811,63812],{"class":85},"      font-weight",[68,63814,89],{"class":78},[68,63816,63817],{"class":85},"bold",[68,63819,95],{"class":78},[68,63821,63822],{"class":70,"line":18337},[68,63823,3677],{"class":78},[68,63825,63826],{"class":70,"line":18342},[68,63827,3890],{"emptyLinePlaceholder":1567},[68,63829,63830,63832,63834,63837],{"class":70,"line":18356},[68,63831,63601],{"class":74},[68,63833,63652],{"class":74},[68,63835,63836],{"class":74}," .text",[68,63838,79],{"class":78},[68,63840,63841,63843,63845,63848],{"class":70,"line":18368},[68,63842,58894],{"class":85},[68,63844,89],{"class":78},[68,63846,63847],{"class":85},"#333",[68,63849,95],{"class":78},[68,63851,63852,63854,63856,63858,63860,63862],{"class":70,"line":18373},[68,63853,56176],{"class":85},[68,63855,89],{"class":78},[68,63857,313],{"class":85},[68,63859,317],{"class":316},[68,63861,5583],{"class":85},[68,63863,95],{"class":78},[68,63865,63866],{"class":70,"line":18386},[68,63867,3677],{"class":78},[68,63869,63870],{"class":70,"line":18391},[68,63871,3890],{"emptyLinePlaceholder":1567},[68,63873,63874,63876,63878,63881],{"class":70,"line":18396},[68,63875,63601],{"class":74},[68,63877,63652],{"class":74},[68,63879,63880],{"class":74}," .time",[68,63882,79],{"class":78},[68,63884,63885,63887,63889,63891],{"class":70,"line":18401},[68,63886,58894],{"class":85},[68,63888,89],{"class":78},[68,63890,63548],{"class":85},[68,63892,95],{"class":78},[68,63894,63895,63897,63899,63901,63903],{"class":70,"line":18414},[68,63896,56400],{"class":85},[68,63898,89],{"class":78},[68,63900,2126],{"class":85},[68,63902,317],{"class":316},[68,63904,95],{"class":78},[68,63906,63907],{"class":70,"line":18419},[68,63908,3677],{"class":78},[68,63910,63911,63913,63915],{"class":70,"line":34117},[68,63912,53899],{"class":78},[68,63914,1553],{"class":52784},[68,63916,52791],{"class":78},[68,63918,63919,63921,63923],{"class":70,"line":34123},[68,63920,53267],{"class":78},[68,63922,52818],{"class":52784},[68,63924,52791],{"class":78},[68,63926,63927],{"class":70,"line":34129},[68,63928,3890],{"emptyLinePlaceholder":1567},[68,63930,63931,63933,63935],{"class":70,"line":34135},[68,63932,2537],{"class":78},[68,63934,53282],{"class":52784},[68,63936,52791],{"class":78},[68,63938,63939,63941,63943,63945,63947,63950],{"class":70,"line":34141},[68,63940,53626],{"class":78},[68,63942,53093],{"class":52784},[68,63944,54968],{"class":74},[68,63946,1685],{"class":78},[68,63948,63949],{"class":1742},"\"wrapper\"",[68,63951,52791],{"class":78},[68,63953,63954,63956,63958,63960,63962,63965,63967,63969],{"class":70,"line":34152},[68,63955,52825],{"class":78},[68,63957,2070],{"class":52784},[68,63959,54968],{"class":74},[68,63961,1685],{"class":78},[68,63963,63964],{"class":1742},"\"avatar\"",[68,63966,56792],{"class":78},[68,63968,2070],{"class":52784},[68,63970,52791],{"class":78},[68,63972,63973,63975,63977,63979,63981,63984,63986,63988,63991,63993,63995,63997,64000,64002,64005,64007,64009],{"class":70,"line":34158},[68,63974,52825],{"class":78},[68,63976,55769],{"class":52784},[68,63978,16447],{"class":74},[68,63980,1685],{"class":78},[68,63982,63983],{"class":1742},"\"tx\"",[68,63985,62498],{"class":74},[68,63987,1685],{"class":78},[68,63989,63990],{"class":1742},"\"发一条友善的评论\"",[68,63992,55792],{"class":74},[68,63994,1685],{"class":78},[68,63996,5191],{"class":1742},[68,63998,63999],{"class":74}," maxlength",[68,64001,1685],{"class":78},[68,64003,64004],{"class":1742},"\"200\"",[68,64006,56792],{"class":78},[68,64008,55769],{"class":52784},[68,64010,52791],{"class":78},[68,64012,64013,64015,64017,64020,64022],{"class":70,"line":34178},[68,64014,52825],{"class":78},[68,64016,55368],{"class":52784},[68,64018,64019],{"class":78},">发布\u003C\u002F",[68,64021,55368],{"class":52784},[68,64023,52791],{"class":78},[68,64025,64026,64028,64030],{"class":70,"line":34184},[68,64027,53899],{"class":78},[68,64029,53093],{"class":52784},[68,64031,52791],{"class":78},[68,64033,64034,64036,64038,64040,64042,64044],{"class":70,"line":34195},[68,64035,53626],{"class":78},[68,64037,53093],{"class":52784},[68,64039,54968],{"class":74},[68,64041,1685],{"class":78},[68,64043,63949],{"class":1742},[68,64045,52791],{"class":78},[68,64047,64048,64050,64052,64054,64056,64059,64062,64064],{"class":70,"line":34201},[68,64049,52825],{"class":78},[68,64051,68],{"class":52784},[68,64053,54968],{"class":74},[68,64055,1685],{"class":78},[68,64057,64058],{"class":1742},"\"total\"",[68,64060,64061],{"class":78},">0\u002F200字\u003C\u002F",[68,64063,68],{"class":52784},[68,64065,52791],{"class":78},[68,64067,64068,64070,64072],{"class":70,"line":34207},[68,64069,53899],{"class":78},[68,64071,53093],{"class":52784},[68,64073,52791],{"class":78},[68,64075,64076,64078,64080,64082,64084,64087],{"class":70,"line":34213},[68,64077,53626],{"class":78},[68,64079,53093],{"class":52784},[68,64081,54968],{"class":74},[68,64083,1685],{"class":78},[68,64085,64086],{"class":1742},"\"list\"",[68,64088,52791],{"class":78},[68,64090,64091,64093,64095,64097,64099,64102,64105,64107,64110],{"class":70,"line":34219},[68,64092,52825],{"class":78},[68,64094,53093],{"class":52784},[68,64096,54968],{"class":74},[68,64098,1685],{"class":78},[68,64100,64101],{"class":1742},"\"item\"",[68,64103,64104],{"class":74}," style",[68,64106,1685],{"class":78},[68,64108,64109],{"class":1742},"\"display: none;\"",[68,64111,52791],{"class":78},[68,64113,64114,64116,64118,64120,64122,64124,64126,64128],{"class":70,"line":34225},[68,64115,56712],{"class":78},[68,64117,2070],{"class":52784},[68,64119,54968],{"class":74},[68,64121,1685],{"class":78},[68,64123,63964],{"class":1742},[68,64125,56792],{"class":78},[68,64127,2070],{"class":52784},[68,64129,52791],{"class":78},[68,64131,64132,64134,64136,64138,64140,64143],{"class":70,"line":34231},[68,64133,56712],{"class":78},[68,64135,53093],{"class":52784},[68,64137,54968],{"class":74},[68,64139,1685],{"class":78},[68,64141,64142],{"class":1742},"\"info\"",[68,64144,52791],{"class":78},[68,64146,64147,64149,64151,64153,64155,64158,64161,64163],{"class":70,"line":34237},[68,64148,56780],{"class":78},[68,64150,170],{"class":52784},[68,64152,54968],{"class":74},[68,64154,1685],{"class":78},[68,64156,64157],{"class":1742},"\"name\"",[68,64159,64160],{"class":78},">清风徐来\u003C\u002F",[68,64162,170],{"class":52784},[68,64164,52791],{"class":78},[68,64166,64167,64169,64171,64173,64175,64178,64181,64183],{"class":70,"line":34257},[68,64168,56780],{"class":78},[68,64170,170],{"class":52784},[68,64172,54968],{"class":74},[68,64174,1685],{"class":78},[68,64176,64177],{"class":1742},"\"text\"",[68,64179,64180],{"class":78},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[68,64182,170],{"class":52784},[68,64184,52791],{"class":78},[68,64186,64187,64189,64191,64193,64195,64198,64201,64203],{"class":70,"line":34263},[68,64188,56780],{"class":78},[68,64190,170],{"class":52784},[68,64192,54968],{"class":74},[68,64194,1685],{"class":78},[68,64196,64197],{"class":1742},"\"time\"",[68,64199,64200],{"class":78},">2022-10-10 20:29:21\u003C\u002F",[68,64202,170],{"class":52784},[68,64204,52791],{"class":78},[68,64206,64207,64209,64211],{"class":70,"line":34279},[68,64208,56885],{"class":78},[68,64210,53093],{"class":52784},[68,64212,52791],{"class":78},[68,64214,64215,64217,64219],{"class":70,"line":34285},[68,64216,53258],{"class":78},[68,64218,53093],{"class":52784},[68,64220,52791],{"class":78},[68,64222,64223,64225,64227],{"class":70,"line":34299},[68,64224,53899],{"class":78},[68,64226,53093],{"class":52784},[68,64228,52791],{"class":78},[68,64230,64231,64233,64235],{"class":70,"line":34305},[68,64232,53626],{"class":78},[68,64234,53295],{"class":52784},[68,64236,52791],{"class":78},[68,64238,64239,64241,64244,64246,64248,64250,64252,64255],{"class":70,"line":34320},[68,64240,12709],{"class":316},[68,64242,64243],{"class":85}," tx",[68,64245,15052],{"class":316},[68,64247,55877],{"class":78},[68,64249,55880],{"class":74},[68,64251,1640],{"class":78},[68,64253,64254],{"class":1742},"'#tx'",[68,64256,1646],{"class":78},[68,64258,64259,64261,64264,64266,64268,64270,64272,64275],{"class":70,"line":34326},[68,64260,12709],{"class":316},[68,64262,64263],{"class":85}," total",[68,64265,15052],{"class":316},[68,64267,55877],{"class":78},[68,64269,55880],{"class":74},[68,64271,1640],{"class":78},[68,64273,64274],{"class":1742},"'.total'",[68,64276,1646],{"class":78},[68,64278,64279],{"class":70,"line":34335},[68,64280,64281],{"class":302},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[68,64283,64284,64287,64289,64291,64293,64295,64297],{"class":70,"line":34341},[68,64285,64286],{"class":78},"    tx.",[68,64288,59291],{"class":74},[68,64290,1640],{"class":78},[68,64292,62805],{"class":1742},[68,64294,13923],{"class":78},[68,64296,55930],{"class":316},[68,64298,55933],{"class":78},[68,64300,64301,64304,64306],{"class":70,"line":34350},[68,64302,64303],{"class":78},"      total.style.opacity ",[68,64305,1685],{"class":316},[68,64307,57177],{"class":85},[68,64309,64310],{"class":70,"line":34356},[68,64311,34945],{"class":78},[68,64313,64314],{"class":70,"line":34362},[68,64315,64316],{"class":302},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[68,64318,64319,64321,64323,64325,64327,64329,64331],{"class":70,"line":34371},[68,64320,64286],{"class":78},[68,64322,59291],{"class":74},[68,64324,1640],{"class":78},[68,64326,62866],{"class":1742},[68,64328,13923],{"class":78},[68,64330,55930],{"class":316},[68,64332,55933],{"class":78},[68,64334,64335,64337,64339],{"class":70,"line":34377},[68,64336,64303],{"class":78},[68,64338,1685],{"class":316},[68,64340,48817],{"class":85},[68,64342,64343],{"class":70,"line":34388},[68,64344,34945],{"class":78},[68,64346,64347],{"class":70,"line":34394},[68,64348,64349],{"class":302},"    \u002F\u002F 3. 检测用户输入\n",[68,64351,64352,64354,64356,64358,64361,64363,64365],{"class":70,"line":34413},[68,64353,64286],{"class":78},[68,64355,59291],{"class":74},[68,64357,1640],{"class":78},[68,64359,64360],{"class":1742},"'input'",[68,64362,13923],{"class":78},[68,64364,55930],{"class":316},[68,64366,55933],{"class":78},[68,64368,64369],{"class":70,"line":34419},[68,64370,64371],{"class":302},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[68,64373,64374,64377,64379,64382,64385,64387,64390,64392,64394],{"class":70,"line":34430},[68,64375,64376],{"class":78},"      total.innerHTML ",[68,64378,1685],{"class":316},[68,64380,64381],{"class":1742}," `${",[68,64383,64384],{"class":78},"tx",[68,64386,2186],{"class":1742},[68,64388,64389],{"class":78},"value",[68,64391,2186],{"class":1742},[68,64393,53450],{"class":85},[68,64395,64396],{"class":1742},"}\u002F200字`\n",[68,64398,64399],{"class":70,"line":34436},[68,64400,34945],{"class":78},[68,64402,64403],{"class":70,"line":34456},[68,64404,3890],{"emptyLinePlaceholder":1567},[68,64406,64407],{"class":70,"line":34472},[68,64408,64409],{"class":302},"    \u002F\u002F const str = 'andy'\n",[68,64411,64412],{"class":70,"line":34478},[68,64413,64414],{"class":302},"    \u002F\u002F console.log(str.length)\n",[68,64416,64417,64419,64421],{"class":70,"line":34492},[68,64418,53899],{"class":78},[68,64420,53295],{"class":52784},[68,64422,52791],{"class":78},[68,64424,64425,64427,64429],{"class":70,"line":34498},[68,64426,53267],{"class":78},[68,64428,53282],{"class":52784},[68,64430,52791],{"class":78},[68,64432,64433],{"class":70,"line":34504},[68,64434,3890],{"emptyLinePlaceholder":1567},[68,64436,64437,64439,64441],{"class":70,"line":34515},[68,64438,53267],{"class":78},[68,64440,52119],{"class":52784},[68,64442,52791],{"class":78},[245,64444,64446],{"id":64445},"_3254-change事件","3.2.5.4 change事件",[170,64448,64449],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[170,64451,64452],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[170,64454,64455],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[58,64457,64459],{"className":52117,"code":64458,"language":52119,"meta":63,"style":63},"\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",[65,64460,64461,64471,64485,64489,64497,64511,64531,64543,64551,64555,64563,64577,64585,64603,64621,64633,64637,64645,64653,64657],{"__ignoreMap":63},[68,64462,64463,64465,64467,64469],{"class":70,"line":71},[68,64464,52781],{"class":78},[68,64466,52785],{"class":52784},[68,64468,52788],{"class":74},[68,64470,52791],{"class":78},[68,64472,64473,64475,64477,64479,64481,64483],{"class":70,"line":82},[68,64474,2537],{"class":78},[68,64476,52119],{"class":52784},[68,64478,52800],{"class":74},[68,64480,1685],{"class":78},[68,64482,52805],{"class":1742},[68,64484,52791],{"class":78},[68,64486,64487],{"class":70,"line":98},[68,64488,3890],{"emptyLinePlaceholder":1567},[68,64490,64491,64493,64495],{"class":70,"line":104},[68,64492,2537],{"class":78},[68,64494,52818],{"class":52784},[68,64496,52791],{"class":78},[68,64498,64499,64501,64503,64505,64507,64509],{"class":70,"line":112},[68,64500,53626],{"class":78},[68,64502,52828],{"class":52784},[68,64504,52831],{"class":74},[68,64506,1685],{"class":78},[68,64508,52836],{"class":1742},[68,64510,52791],{"class":78},[68,64512,64513,64515,64517,64519,64521,64523,64525,64527,64529],{"class":70,"line":124},[68,64514,53626],{"class":78},[68,64516,52828],{"class":52784},[68,64518,16408],{"class":74},[68,64520,1685],{"class":78},[68,64522,52875],{"class":1742},[68,64524,52855],{"class":74},[68,64526,1685],{"class":78},[68,64528,52882],{"class":1742},[68,64530,52791],{"class":78},[68,64532,64533,64535,64537,64539,64541],{"class":70,"line":1496},[68,64534,53626],{"class":78},[68,64536,52891],{"class":52784},[68,64538,52894],{"class":78},[68,64540,52891],{"class":52784},[68,64542,52791],{"class":78},[68,64544,64545,64547,64549],{"class":70,"line":1502},[68,64546,53267],{"class":78},[68,64548,52818],{"class":52784},[68,64550,52791],{"class":78},[68,64552,64553],{"class":70,"line":1510},[68,64554,3890],{"emptyLinePlaceholder":1567},[68,64556,64557,64559,64561],{"class":70,"line":1521},[68,64558,2537],{"class":78},[68,64560,53282],{"class":52784},[68,64562,52791],{"class":78},[68,64564,64565,64567,64569,64571,64573,64575],{"class":70,"line":3103},[68,64566,53626],{"class":78},[68,64568,55302],{"class":52784},[68,64570,55305],{"class":74},[68,64572,1685],{"class":78},[68,64574,64177],{"class":1742},[68,64576,52791],{"class":78},[68,64578,64579,64581,64583],{"class":70,"line":3108},[68,64580,53626],{"class":78},[68,64582,53295],{"class":52784},[68,64584,52791],{"class":78},[68,64586,64587,64589,64591,64593,64595,64597,64599,64601],{"class":70,"line":3114},[68,64588,12709],{"class":316},[68,64590,62083],{"class":85},[68,64592,15052],{"class":316},[68,64594,55877],{"class":78},[68,64596,55880],{"class":74},[68,64598,1640],{"class":78},[68,64600,64360],{"class":1742},[68,64602,1646],{"class":78},[68,64604,64605,64608,64610,64612,64615,64617,64619],{"class":70,"line":3119},[68,64606,64607],{"class":78},"    input.",[68,64609,59291],{"class":74},[68,64611,1640],{"class":78},[68,64613,64614],{"class":1742},"'change'",[68,64616,13923],{"class":78},[68,64618,55930],{"class":316},[68,64620,55933],{"class":78},[68,64622,64623,64625,64627,64629,64631],{"class":70,"line":3133},[68,64624,59722],{"class":78},[68,64626,59725],{"class":74},[68,64628,1640],{"class":78},[68,64630,2221],{"class":85},[68,64632,1646],{"class":78},[68,64634,64635],{"class":70,"line":3138},[68,64636,34945],{"class":78},[68,64638,64639,64641,64643],{"class":70,"line":3144},[68,64640,53899],{"class":78},[68,64642,53295],{"class":52784},[68,64644,52791],{"class":78},[68,64646,64647,64649,64651],{"class":70,"line":3165},[68,64648,53267],{"class":78},[68,64650,53282],{"class":52784},[68,64652,52791],{"class":78},[68,64654,64655],{"class":70,"line":3170},[68,64656,3890],{"emptyLinePlaceholder":1567},[68,64658,64659,64661,64663],{"class":70,"line":3184},[68,64660,53267],{"class":78},[68,64662,52119],{"class":52784},[68,64664,52791],{"class":78},[170,64666,64667],{},"总结：内容发生改变才回去触发",[19,64669,64671],{"id":64670},"_326-事件对象","3.2.6 事件对象",[245,64673,64675],{"id":64674},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[170,64677,64678],{},[801,64679],{"alt":63,"src":64680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[170,64682,64683],{},[801,64684],{"alt":63,"src":64685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[170,64687,64688],{},"点击一次，就输出了事件对象，它是个对象",[170,64690,64691],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[170,64693,64694],{},[801,64695],{"alt":63,"src":64696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[245,64698,64700],{"id":64699},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[170,64702,64703],{},[801,64704],{"alt":63,"src":64705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[170,64707,64708],{},"实现按特殊字符才是实现打印输出效果：",[58,64710,64712],{"className":54549,"code":64711,"language":54551,"meta":63,"style":63},"\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",[65,64713,64714,64722,64727,64741,64749,64754,64759,64764,64769,64774,64779,64784,64789,64794,64798,64802,64810],{"__ignoreMap":63},[68,64715,64716,64718,64720],{"class":70,"line":71},[68,64717,2537],{"class":78},[68,64719,53282],{"class":52784},[68,64721,52791],{"class":78},[68,64723,64724],{"class":70,"line":82},[68,64725,64726],{"class":302},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[68,64728,64729,64731,64733,64735,64737,64739],{"class":70,"line":98},[68,64730,53626],{"class":78},[68,64732,55302],{"class":52784},[68,64734,55305],{"class":74},[68,64736,1685],{"class":78},[68,64738,64177],{"class":1742},[68,64740,52791],{"class":78},[68,64742,64743,64745,64747],{"class":70,"line":104},[68,64744,53626],{"class":78},[68,64746,53295],{"class":52784},[68,64748,52791],{"class":78},[68,64750,64751],{"class":70,"line":112},[68,64752,64753],{"class":78},"    \u002F\u002F const btn = document.querySelector('button')\n",[68,64755,64756],{"class":70,"line":124},[68,64757,64758],{"class":78},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[68,64760,64761],{"class":70,"line":1496},[68,64762,64763],{"class":78},"    \u002F\u002F   console.log(e);\n",[68,64765,64766],{"class":70,"line":1502},[68,64767,64768],{"class":78},"    \u002F\u002F })\n",[68,64770,64771],{"class":70,"line":1510},[68,64772,64773],{"class":78},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[68,64775,64776],{"class":70,"line":1521},[68,64777,64778],{"class":78},"    const input = document.querySelector('input')\n",[68,64780,64781],{"class":70,"line":3103},[68,64782,64783],{"class":78},"    input.addEventListener('keyup', function (e) {\n",[68,64785,64786],{"class":70,"line":3108},[68,64787,64788],{"class":78},"      if (e.key === 'Enter') {\n",[68,64790,64791],{"class":70,"line":3114},[68,64792,64793],{"class":78},"        console.log('我按下了回车键')\n",[68,64795,64796],{"class":70,"line":3119},[68,64797,53880],{"class":78},[68,64799,64800],{"class":70,"line":3133},[68,64801,34945],{"class":78},[68,64803,64804,64806,64808],{"class":70,"line":3138},[68,64805,53899],{"class":78},[68,64807,53295],{"class":52784},[68,64809,52791],{"class":78},[68,64811,64812,64814,64816],{"class":70,"line":3144},[68,64813,53267],{"class":78},[68,64815,53282],{"class":52784},[68,64817,52791],{"class":78},[245,64819,64821],{"id":64820},"_3263-trim方法","3.2.6.3 trim方法",[170,64823,64824],{},[801,64825],{"alt":63,"src":64826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[170,64828,64829],{},[801,64830],{"alt":63,"src":64831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[170,64833,64834],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[170,64836,64837],{},"str.trim()",[19,64839,64841],{"id":64840},"_327-环境对象","3.2.7 环境对象",[170,64843,64844],{},[801,64845],{"alt":63,"src":64846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[170,64848,64849],{},[801,64850],{"alt":63,"src":64851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[170,64853,64854],{},[801,64855],{"alt":63,"src":64856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[170,64858,64859],{},"实际函数调用是window.fn()",[170,64861,64862],{},"普通函数里面this指向的是window",[24,64864,64865,64868,64871],{},[27,64866,64867],{},"在普通函数下，this指向的是window",[27,64869,64870],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[27,64872,64873],{},"箭头函数没有this",[170,64875,64876],{},"粗略记法就是：谁调用，this就指向谁",[170,64878,64879],{},[801,64880],{"alt":63,"src":64881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[170,64883,64884],{},[801,64885],{"alt":63,"src":64886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[170,64888,64889],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[170,64891,64892],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[58,64894,64896],{"className":54549,"code":64895,"language":54551,"meta":63,"style":63},"\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",[65,64897,64898,64906,64918,64926,64931,64936,64941,64946,64950,64958],{"__ignoreMap":63},[68,64899,64900,64902,64904],{"class":70,"line":71},[68,64901,2537],{"class":78},[68,64903,53282],{"class":52784},[68,64905,52791],{"class":78},[68,64907,64908,64910,64912,64914,64916],{"class":70,"line":82},[68,64909,53626],{"class":78},[68,64911,55368],{"class":52784},[68,64913,55374],{"class":78},[68,64915,55368],{"class":52784},[68,64917,52791],{"class":78},[68,64919,64920,64922,64924],{"class":70,"line":98},[68,64921,53626],{"class":78},[68,64923,53295],{"class":52784},[68,64925,52791],{"class":78},[68,64927,64928],{"class":70,"line":104},[68,64929,64930],{"class":78},"    const button = document.querySelector('button')\n",[68,64932,64933],{"class":70,"line":112},[68,64934,64935],{"class":78},"    button.addEventListener('click', function () {\n",[68,64937,64938],{"class":70,"line":124},[68,64939,64940],{"class":78},"      \u002F\u002F console.log(this);\n",[68,64942,64943],{"class":70,"line":1496},[68,64944,64945],{"class":78},"      this.style.color = 'pink'\n",[68,64947,64948],{"class":70,"line":1502},[68,64949,34945],{"class":78},[68,64951,64952,64954,64956],{"class":70,"line":1510},[68,64953,53899],{"class":78},[68,64955,53295],{"class":52784},[68,64957,52791],{"class":78},[68,64959,64960,64962,64964],{"class":70,"line":1521},[68,64961,53267],{"class":78},[68,64963,53282],{"class":52784},[68,64965,52791],{"class":78},[19,64967,64969],{"id":64968},"_328-回调函数","3.2.8 回调函数",[170,64971,64972],{},[801,64973],{"alt":63,"src":64974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[170,64976,64977],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[170,64979,12820],{},[24,64981,64982,64985,64988],{},[27,64983,64984],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[27,64986,64987],{},"回调函数本质还是函数，只不过把它当成参数使用",[27,64989,64990],{},"使用匿名函数做为回调函数比较常见",[19,64992,64994],{"id":64993},"_329-tab栏切换","3.2.9 tab栏切换",[170,64996,64997],{},[801,64998],{"alt":63,"src":64999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[58,65001,65003],{"className":52117,"code":65002,"language":52119,"meta":63,"style":63},"\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",[65,65004,65005,65015,65029,65033,65041,65055,65075,65095,65108,65116,65122,65132,65142,65146,65150,65157,65170,65183,65195,65211,65215,65219,65226,65238,65250,65262,65272,65282,65286,65290,65299,65311,65322,65334,65338,65342,65350,65360,65370,65380,65384,65388,65398,65412,65424,65428,65432,65444,65455,65472,65482,65486,65490,65505,65516,65526,65530,65534,65541,65556,65560,65564,65572,65582,65586,65590,65599,65609,65613,65621,65629,65633,65641,65656,65671,65684,65692,65726,65753,65780,65807,65834,65842,65850,65865,65902,65937,65972,66007,66042,66050,66058,66066,66071,66076,66096,66101,66130,66135,66140,66158,66163,66168,66173,66195,66200,66216,66220,66225,66230,66251,66256,66285,66289,66294,66298,66306,66314,66318],{"__ignoreMap":63},[68,65006,65007,65009,65011,65013],{"class":70,"line":71},[68,65008,52781],{"class":78},[68,65010,52785],{"class":52784},[68,65012,52788],{"class":74},[68,65014,52791],{"class":78},[68,65016,65017,65019,65021,65023,65025,65027],{"class":70,"line":82},[68,65018,2537],{"class":78},[68,65020,52119],{"class":52784},[68,65022,52800],{"class":74},[68,65024,1685],{"class":78},[68,65026,52805],{"class":1742},[68,65028,52791],{"class":78},[68,65030,65031],{"class":70,"line":98},[68,65032,3890],{"emptyLinePlaceholder":1567},[68,65034,65035,65037,65039],{"class":70,"line":104},[68,65036,2537],{"class":78},[68,65038,52818],{"class":52784},[68,65040,52791],{"class":78},[68,65042,65043,65045,65047,65049,65051,65053],{"class":70,"line":112},[68,65044,53626],{"class":78},[68,65046,52828],{"class":52784},[68,65048,52831],{"class":74},[68,65050,1685],{"class":78},[68,65052,52836],{"class":1742},[68,65054,60605],{"class":78},[68,65056,65057,65059,65061,65063,65065,65067,65069,65071,65073],{"class":70,"line":124},[68,65058,53626],{"class":78},[68,65060,52828],{"class":52784},[68,65062,52847],{"class":74},[68,65064,1685],{"class":78},[68,65066,52852],{"class":1742},[68,65068,52855],{"class":74},[68,65070,1685],{"class":78},[68,65072,52860],{"class":1742},[68,65074,60605],{"class":78},[68,65076,65077,65079,65081,65083,65085,65087,65089,65091,65093],{"class":70,"line":1496},[68,65078,53626],{"class":78},[68,65080,52828],{"class":52784},[68,65082,16408],{"class":74},[68,65084,1685],{"class":78},[68,65086,52875],{"class":1742},[68,65088,52855],{"class":74},[68,65090,1685],{"class":78},[68,65092,52882],{"class":1742},[68,65094,60605],{"class":78},[68,65096,65097,65099,65101,65104,65106],{"class":70,"line":1502},[68,65098,53626],{"class":78},[68,65100,52891],{"class":52784},[68,65102,65103],{"class":78},">tab栏切换\u003C\u002F",[68,65105,52891],{"class":52784},[68,65107,52791],{"class":78},[68,65109,65110,65112,65114],{"class":70,"line":1510},[68,65111,53626],{"class":78},[68,65113,1553],{"class":52784},[68,65115,52791],{"class":78},[68,65117,65118,65120],{"class":70,"line":1521},[68,65119,7892],{"class":52784},[68,65121,79],{"class":78},[68,65123,65124,65126,65128,65130],{"class":70,"line":3103},[68,65125,56187],{"class":85},[68,65127,89],{"class":78},[68,65129,1248],{"class":85},[68,65131,95],{"class":78},[68,65133,65134,65136,65138,65140],{"class":70,"line":3108},[68,65135,56176],{"class":85},[68,65137,89],{"class":78},[68,65139,1248],{"class":85},[68,65141,95],{"class":78},[68,65143,65144],{"class":70,"line":3114},[68,65145,3677],{"class":78},[68,65147,65148],{"class":70,"line":3119},[68,65149,3890],{"emptyLinePlaceholder":1567},[68,65151,65152,65155],{"class":70,"line":3133},[68,65153,65154],{"class":74},"    .tab",[68,65156,79],{"class":78},[68,65158,65159,65161,65163,65166,65168],{"class":70,"line":3138},[68,65160,56250],{"class":85},[68,65162,89],{"class":78},[68,65164,65165],{"class":85},"590",[68,65167,317],{"class":316},[68,65169,95],{"class":78},[68,65171,65172,65174,65176,65179,65181],{"class":70,"line":3144},[68,65173,56264],{"class":85},[68,65175,89],{"class":78},[68,65177,65178],{"class":85},"340",[68,65180,317],{"class":316},[68,65182,95],{"class":78},[68,65184,65185,65187,65189,65191,65193],{"class":70,"line":3165},[68,65186,56187],{"class":85},[68,65188,89],{"class":78},[68,65190,333],{"class":85},[68,65192,317],{"class":316},[68,65194,95],{"class":78},[68,65196,65197,65199,65201,65203,65205,65207,65209],{"class":70,"line":3170},[68,65198,63455],{"class":85},[68,65200,89],{"class":78},[68,65202,1846],{"class":85},[68,65204,317],{"class":316},[68,65206,53003],{"class":85},[68,65208,63722],{"class":85},[68,65210,95],{"class":78},[68,65212,65213],{"class":70,"line":3184},[68,65214,3677],{"class":78},[68,65216,65217],{"class":70,"line":3189},[68,65218,3890],{"emptyLinePlaceholder":1567},[68,65220,65221,65224],{"class":70,"line":3218},[68,65222,65223],{"class":74},"    .tab-nav",[68,65225,79],{"class":78},[68,65227,65228,65230,65232,65234,65236],{"class":70,"line":3223},[68,65229,56250],{"class":85},[68,65231,89],{"class":78},[68,65233,1940],{"class":85},[68,65235,1957],{"class":316},[68,65237,95],{"class":78},[68,65239,65240,65242,65244,65246,65248],{"class":70,"line":3240},[68,65241,56264],{"class":85},[68,65243,89],{"class":78},[68,65245,2534],{"class":85},[68,65247,317],{"class":316},[68,65249,95],{"class":78},[68,65251,65252,65254,65256,65258,65260],{"class":70,"line":3245},[68,65253,58837],{"class":85},[68,65255,89],{"class":78},[68,65257,2534],{"class":85},[68,65259,317],{"class":316},[68,65261,95],{"class":78},[68,65263,65264,65266,65268,65270],{"class":70,"line":3250},[68,65265,56487],{"class":85},[68,65267,89],{"class":78},[68,65269,52960],{"class":85},[68,65271,95],{"class":78},[68,65273,65274,65276,65278,65280],{"class":70,"line":3255},[68,65275,56498],{"class":85},[68,65277,89],{"class":78},[68,65279,53150],{"class":85},[68,65281,95],{"class":78},[68,65283,65284],{"class":70,"line":3269},[68,65285,3677],{"class":78},[68,65287,65288],{"class":70,"line":3274},[68,65289,3890],{"emptyLinePlaceholder":1567},[68,65291,65292,65294,65297],{"class":70,"line":4067},[68,65293,65223],{"class":74},[68,65295,65296],{"class":52784}," h3",[68,65298,79],{"class":78},[68,65300,65301,65303,65305,65307,65309],{"class":70,"line":4081},[68,65302,56400],{"class":85},[68,65304,89],{"class":78},[68,65306,2427],{"class":85},[68,65308,317],{"class":316},[68,65310,95],{"class":78},[68,65312,65313,65315,65317,65320],{"class":70,"line":4089},[68,65314,63812],{"class":85},[68,65316,89],{"class":78},[68,65318,65319],{"class":85},"normal",[68,65321,95],{"class":78},[68,65323,65324,65326,65328,65330,65332],{"class":70,"line":4094},[68,65325,63478],{"class":85},[68,65327,89],{"class":78},[68,65329,333],{"class":85},[68,65331,317],{"class":316},[68,65333,95],{"class":78},[68,65335,65336],{"class":70,"line":4100},[68,65337,3677],{"class":78},[68,65339,65340],{"class":70,"line":4106},[68,65341,3890],{"emptyLinePlaceholder":1567},[68,65343,65344,65346,65348],{"class":70,"line":4111},[68,65345,65223],{"class":74},[68,65347,62770],{"class":52784},[68,65349,79],{"class":78},[68,65351,65352,65354,65356,65358],{"class":70,"line":9437},[68,65353,56213],{"class":85},[68,65355,89],{"class":78},[68,65357,151],{"class":85},[68,65359,95],{"class":78},[68,65361,65362,65364,65366,65368],{"class":70,"line":9461},[68,65363,56487],{"class":85},[68,65365,89],{"class":78},[68,65367,52960],{"class":85},[68,65369,95],{"class":78},[68,65371,65372,65374,65376,65378],{"class":70,"line":9466},[68,65373,56498],{"class":85},[68,65375,89],{"class":78},[68,65377,53062],{"class":85},[68,65379,95],{"class":78},[68,65381,65382],{"class":70,"line":9472},[68,65383,3677],{"class":78},[68,65385,65386],{"class":70,"line":9499},[68,65387,3890],{"emptyLinePlaceholder":1567},[68,65389,65390,65392,65394,65396],{"class":70,"line":9504},[68,65391,65223],{"class":74},[68,65393,62770],{"class":52784},[68,65395,56553],{"class":52784},[68,65397,79],{"class":78},[68,65399,65400,65402,65404,65406,65408,65410],{"class":70,"line":9510},[68,65401,56187],{"class":85},[68,65403,89],{"class":78},[68,65405,1248],{"class":85},[68,65407,10439],{"class":85},[68,65409,317],{"class":316},[68,65411,95],{"class":78},[68,65413,65414,65416,65418,65420,65422],{"class":70,"line":9522},[68,65415,56400],{"class":85},[68,65417,89],{"class":78},[68,65419,2177],{"class":85},[68,65421,317],{"class":316},[68,65423,95],{"class":78},[68,65425,65426],{"class":70,"line":9534},[68,65427,3677],{"class":78},[68,65429,65430],{"class":70,"line":9546},[68,65431,3890],{"emptyLinePlaceholder":1567},[68,65433,65434,65436,65438,65440,65442],{"class":70,"line":11204},[68,65435,65223],{"class":74},[68,65437,62770],{"class":52784},[68,65439,56553],{"class":52784},[68,65441,2891],{"class":52784},[68,65443,79],{"class":78},[68,65445,65446,65449,65451,65453],{"class":70,"line":11229},[68,65447,65448],{"class":85},"      text-decoration",[68,65450,89],{"class":78},[68,65452,151],{"class":85},[68,65454,95],{"class":78},[68,65456,65457,65459,65461,65463,65465,65467,65470],{"class":70,"line":11252},[68,65458,63710],{"class":85},[68,65460,89],{"class":78},[68,65462,1715],{"class":85},[68,65464,317],{"class":316},[68,65466,53003],{"class":85},[68,65468,65469],{"class":85}," transparent",[68,65471,95],{"class":78},[68,65473,65474,65476,65478,65480],{"class":70,"line":11276},[68,65475,58894],{"class":85},[68,65477,89],{"class":78},[68,65479,63847],{"class":85},[68,65481,95],{"class":78},[68,65483,65484],{"class":70,"line":11281},[68,65485,3677],{"class":78},[68,65487,65488],{"class":70,"line":11286},[68,65489,3890],{"emptyLinePlaceholder":1567},[68,65491,65492,65494,65496,65498,65500,65503],{"class":70,"line":11291},[68,65493,65223],{"class":74},[68,65495,62770],{"class":52784},[68,65497,56553],{"class":52784},[68,65499,2891],{"class":52784},[68,65501,65502],{"class":74},".active",[68,65504,79],{"class":78},[68,65506,65507,65509,65511,65514],{"class":70,"line":11300},[68,65508,63269],{"class":85},[68,65510,89],{"class":78},[68,65512,65513],{"class":85},"#e1251b",[68,65515,95],{"class":78},[68,65517,65518,65520,65522,65524],{"class":70,"line":11305},[68,65519,58894],{"class":85},[68,65521,89],{"class":78},[68,65523,65513],{"class":85},[68,65525,95],{"class":78},[68,65527,65528],{"class":70,"line":11311},[68,65529,3677],{"class":78},[68,65531,65532],{"class":70,"line":11332},[68,65533,3890],{"emptyLinePlaceholder":1567},[68,65535,65536,65539],{"class":70,"line":11338},[68,65537,65538],{"class":74},"    .tab-content",[68,65540,79],{"class":78},[68,65542,65543,65545,65547,65549,65552,65554],{"class":70,"line":11352},[68,65544,56176],{"class":85},[68,65546,89],{"class":78},[68,65548,1248],{"class":85},[68,65550,65551],{"class":85}," 16",[68,65553,317],{"class":316},[68,65555,95],{"class":78},[68,65557,65558],{"class":70,"line":11358},[68,65559,3677],{"class":78},[68,65561,65562],{"class":70,"line":11385},[68,65563,3890],{"emptyLinePlaceholder":1567},[68,65565,65566,65568,65570],{"class":70,"line":11394},[68,65567,65538],{"class":74},[68,65569,63652],{"class":74},[68,65571,79],{"class":78},[68,65573,65574,65576,65578,65580],{"class":70,"line":11400},[68,65575,56487],{"class":85},[68,65577,89],{"class":78},[68,65579,151],{"class":85},[68,65581,95],{"class":78},[68,65583,65584],{"class":70,"line":11408},[68,65585,3677],{"class":78},[68,65587,65588],{"class":70,"line":11413},[68,65589,3890],{"emptyLinePlaceholder":1567},[68,65591,65592,65594,65597],{"class":70,"line":18091},[68,65593,65538],{"class":74},[68,65595,65596],{"class":74}," .item.active",[68,65598,79],{"class":78},[68,65600,65601,65603,65605,65607],{"class":70,"line":18097},[68,65602,56487],{"class":85},[68,65604,89],{"class":78},[68,65606,62347],{"class":85},[68,65608,95],{"class":78},[68,65610,65611],{"class":70,"line":18120},[68,65612,3677],{"class":78},[68,65614,65615,65617,65619],{"class":70,"line":18126},[68,65616,53899],{"class":78},[68,65618,1553],{"class":52784},[68,65620,52791],{"class":78},[68,65622,65623,65625,65627],{"class":70,"line":18149},[68,65624,53267],{"class":78},[68,65626,52818],{"class":52784},[68,65628,52791],{"class":78},[68,65630,65631],{"class":70,"line":18163},[68,65632,3890],{"emptyLinePlaceholder":1567},[68,65634,65635,65637,65639],{"class":70,"line":18183},[68,65636,2537],{"class":78},[68,65638,53282],{"class":52784},[68,65640,52791],{"class":78},[68,65642,65643,65645,65647,65649,65651,65654],{"class":70,"line":18189},[68,65644,53626],{"class":78},[68,65646,53093],{"class":52784},[68,65648,54968],{"class":74},[68,65650,1685],{"class":78},[68,65652,65653],{"class":1742},"\"tab\"",[68,65655,52791],{"class":78},[68,65657,65658,65660,65662,65664,65666,65669],{"class":70,"line":18200},[68,65659,52825],{"class":78},[68,65661,53093],{"class":52784},[68,65663,54968],{"class":74},[68,65665,1685],{"class":78},[68,65667,65668],{"class":1742},"\"tab-nav\"",[68,65670,52791],{"class":78},[68,65672,65673,65675,65677,65680,65682],{"class":70,"line":18223},[68,65674,56712],{"class":78},[68,65676,19],{"class":52784},[68,65678,65679],{"class":78},">每日特价\u003C\u002F",[68,65681,19],{"class":52784},[68,65683,52791],{"class":78},[68,65685,65686,65688,65690],{"class":70,"line":18245},[68,65687,56712],{"class":78},[68,65689,24],{"class":52784},[68,65691,52791],{"class":78},[68,65693,65694,65696,65698,65700,65702,65704,65706,65708,65710,65712,65715,65718,65720,65722,65724],{"class":70,"line":18250},[68,65695,56780],{"class":78},[68,65697,27],{"class":52784},[68,65699,62530],{"class":78},[68,65701,1867],{"class":52784},[68,65703,54968],{"class":74},[68,65705,1685],{"class":78},[68,65707,61184],{"class":1742},[68,65709,62535],{"class":74},[68,65711,1685],{"class":78},[68,65713,65714],{"class":1742},"\"javascript:;\"",[68,65716,65717],{"class":78},">精选\u003C\u002F",[68,65719,1867],{"class":52784},[68,65721,56792],{"class":78},[68,65723,27],{"class":52784},[68,65725,52791],{"class":78},[68,65727,65728,65730,65732,65734,65736,65738,65740,65742,65745,65747,65749,65751],{"class":70,"line":18256},[68,65729,56780],{"class":78},[68,65731,27],{"class":52784},[68,65733,62530],{"class":78},[68,65735,1867],{"class":52784},[68,65737,62535],{"class":74},[68,65739,1685],{"class":78},[68,65741,65714],{"class":1742},[68,65743,65744],{"class":78},">美食\u003C\u002F",[68,65746,1867],{"class":52784},[68,65748,56792],{"class":78},[68,65750,27],{"class":52784},[68,65752,52791],{"class":78},[68,65754,65755,65757,65759,65761,65763,65765,65767,65769,65772,65774,65776,65778],{"class":70,"line":18270},[68,65756,56780],{"class":78},[68,65758,27],{"class":52784},[68,65760,62530],{"class":78},[68,65762,1867],{"class":52784},[68,65764,62535],{"class":74},[68,65766,1685],{"class":78},[68,65768,65714],{"class":1742},[68,65770,65771],{"class":78},">百货\u003C\u002F",[68,65773,1867],{"class":52784},[68,65775,56792],{"class":78},[68,65777,27],{"class":52784},[68,65779,52791],{"class":78},[68,65781,65782,65784,65786,65788,65790,65792,65794,65796,65799,65801,65803,65805],{"class":70,"line":18283},[68,65783,56780],{"class":78},[68,65785,27],{"class":52784},[68,65787,62530],{"class":78},[68,65789,1867],{"class":52784},[68,65791,62535],{"class":74},[68,65793,1685],{"class":78},[68,65795,65714],{"class":1742},[68,65797,65798],{"class":78},">个护\u003C\u002F",[68,65800,1867],{"class":52784},[68,65802,56792],{"class":78},[68,65804,27],{"class":52784},[68,65806,52791],{"class":78},[68,65808,65809,65811,65813,65815,65817,65819,65821,65823,65826,65828,65830,65832],{"class":70,"line":18288},[68,65810,56780],{"class":78},[68,65812,27],{"class":52784},[68,65814,62530],{"class":78},[68,65816,1867],{"class":52784},[68,65818,62535],{"class":74},[68,65820,1685],{"class":78},[68,65822,65714],{"class":1742},[68,65824,65825],{"class":78},">预告\u003C\u002F",[68,65827,1867],{"class":52784},[68,65829,56792],{"class":78},[68,65831,27],{"class":52784},[68,65833,52791],{"class":78},[68,65835,65836,65838,65840],{"class":70,"line":18302},[68,65837,56885],{"class":78},[68,65839,24],{"class":52784},[68,65841,52791],{"class":78},[68,65843,65844,65846,65848],{"class":70,"line":18307},[68,65845,53258],{"class":78},[68,65847,53093],{"class":52784},[68,65849,52791],{"class":78},[68,65851,65852,65854,65856,65858,65860,65863],{"class":70,"line":18313},[68,65853,52825],{"class":78},[68,65855,53093],{"class":52784},[68,65857,54968],{"class":74},[68,65859,1685],{"class":78},[68,65861,65862],{"class":1742},"\"tab-content\"",[68,65864,52791],{"class":78},[68,65866,65867,65869,65871,65873,65875,65878,65880,65882,65884,65886,65889,65891,65893,65895,65898,65900],{"class":70,"line":18318},[68,65868,56712],{"class":78},[68,65870,53093],{"class":52784},[68,65872,54968],{"class":74},[68,65874,1685],{"class":78},[68,65876,65877],{"class":1742},"\"item active\"",[68,65879,62530],{"class":78},[68,65881,801],{"class":52784},[68,65883,56717],{"class":74},[68,65885,1685],{"class":78},[68,65887,65888],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[68,65890,56725],{"class":74},[68,65892,1685],{"class":78},[68,65894,9141],{"class":1742},[68,65896,65897],{"class":78}," \u002F>\u003C\u002F",[68,65899,53093],{"class":52784},[68,65901,52791],{"class":78},[68,65903,65904,65906,65908,65910,65912,65914,65916,65918,65920,65922,65925,65927,65929,65931,65933,65935],{"class":70,"line":18332},[68,65905,56712],{"class":78},[68,65907,53093],{"class":52784},[68,65909,54968],{"class":74},[68,65911,1685],{"class":78},[68,65913,64101],{"class":1742},[68,65915,62530],{"class":78},[68,65917,801],{"class":52784},[68,65919,56717],{"class":74},[68,65921,1685],{"class":78},[68,65923,65924],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[68,65926,56725],{"class":74},[68,65928,1685],{"class":78},[68,65930,9141],{"class":1742},[68,65932,65897],{"class":78},[68,65934,53093],{"class":52784},[68,65936,52791],{"class":78},[68,65938,65939,65941,65943,65945,65947,65949,65951,65953,65955,65957,65960,65962,65964,65966,65968,65970],{"class":70,"line":18337},[68,65940,56712],{"class":78},[68,65942,53093],{"class":52784},[68,65944,54968],{"class":74},[68,65946,1685],{"class":78},[68,65948,64101],{"class":1742},[68,65950,62530],{"class":78},[68,65952,801],{"class":52784},[68,65954,56717],{"class":74},[68,65956,1685],{"class":78},[68,65958,65959],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[68,65961,56725],{"class":74},[68,65963,1685],{"class":78},[68,65965,9141],{"class":1742},[68,65967,65897],{"class":78},[68,65969,53093],{"class":52784},[68,65971,52791],{"class":78},[68,65973,65974,65976,65978,65980,65982,65984,65986,65988,65990,65992,65995,65997,65999,66001,66003,66005],{"class":70,"line":18342},[68,65975,56712],{"class":78},[68,65977,53093],{"class":52784},[68,65979,54968],{"class":74},[68,65981,1685],{"class":78},[68,65983,64101],{"class":1742},[68,65985,62530],{"class":78},[68,65987,801],{"class":52784},[68,65989,56717],{"class":74},[68,65991,1685],{"class":78},[68,65993,65994],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[68,65996,56725],{"class":74},[68,65998,1685],{"class":78},[68,66000,9141],{"class":1742},[68,66002,65897],{"class":78},[68,66004,53093],{"class":52784},[68,66006,52791],{"class":78},[68,66008,66009,66011,66013,66015,66017,66019,66021,66023,66025,66027,66030,66032,66034,66036,66038,66040],{"class":70,"line":18356},[68,66010,56712],{"class":78},[68,66012,53093],{"class":52784},[68,66014,54968],{"class":74},[68,66016,1685],{"class":78},[68,66018,64101],{"class":1742},[68,66020,62530],{"class":78},[68,66022,801],{"class":52784},[68,66024,56717],{"class":74},[68,66026,1685],{"class":78},[68,66028,66029],{"class":1742},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[68,66031,56725],{"class":74},[68,66033,1685],{"class":78},[68,66035,9141],{"class":1742},[68,66037,65897],{"class":78},[68,66039,53093],{"class":52784},[68,66041,52791],{"class":78},[68,66043,66044,66046,66048],{"class":70,"line":18368},[68,66045,53258],{"class":78},[68,66047,53093],{"class":52784},[68,66049,52791],{"class":78},[68,66051,66052,66054,66056],{"class":70,"line":18373},[68,66053,53899],{"class":78},[68,66055,53093],{"class":52784},[68,66057,52791],{"class":78},[68,66059,66060,66062,66064],{"class":70,"line":18386},[68,66061,53626],{"class":78},[68,66063,53295],{"class":52784},[68,66065,52791],{"class":78},[68,66067,66068],{"class":70,"line":18391},[68,66069,66070],{"class":302},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[68,66072,66073],{"class":70,"line":18396},[68,66074,66075],{"class":302},"    \u002F\u002F 1.1 获取 a 元素 \n",[68,66077,66078,66080,66083,66085,66087,66089,66091,66094],{"class":70,"line":18401},[68,66079,12709],{"class":316},[68,66081,66082],{"class":85}," as",[68,66084,15052],{"class":316},[68,66086,55877],{"class":78},[68,66088,57159],{"class":74},[68,66090,1640],{"class":78},[68,66092,66093],{"class":1742},"'.tab-nav a'",[68,66095,1646],{"class":78},[68,66097,66098],{"class":70,"line":18414},[68,66099,66100],{"class":302},"    \u002F\u002F console.log(as) \n",[68,66102,66103,66105,66107,66109,66111,66113,66115,66117,66119,66122,66124,66126,66128],{"class":70,"line":18419},[68,66104,4691],{"class":316},[68,66106,3149],{"class":78},[68,66108,53329],{"class":316},[68,66110,10926],{"class":78},[68,66112,1685],{"class":316},[68,66114,5583],{"class":85},[68,66116,10933],{"class":78},[68,66118,2537],{"class":316},[68,66120,66121],{"class":78}," as.",[68,66123,53450],{"class":85},[68,66125,4704],{"class":78},[68,66127,3782],{"class":316},[68,66129,13930],{"class":78},[68,66131,66132],{"class":70,"line":34117},[68,66133,66134],{"class":302},"      \u002F\u002F console.log(as[i])\n",[68,66136,66137],{"class":70,"line":34123},[68,66138,66139],{"class":302},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[68,66141,66142,66145,66147,66149,66152,66154,66156],{"class":70,"line":34129},[68,66143,66144],{"class":78},"      as[i].",[68,66146,59291],{"class":74},[68,66148,1640],{"class":78},[68,66150,66151],{"class":1742},"'mouseenter'",[68,66153,13923],{"class":78},[68,66155,55930],{"class":316},[68,66157,55933],{"class":78},[68,66159,66160],{"class":70,"line":34135},[68,66161,66162],{"class":302},"        \u002F\u002F console.log('鼠标经过')\n",[68,66164,66165],{"class":70,"line":34141},[68,66166,66167],{"class":302},"        \u002F\u002F 排他思想  \n",[68,66169,66170],{"class":70,"line":34152},[68,66171,66172],{"class":302},"        \u002F\u002F 干掉别人 移除类active\n",[68,66174,66175,66177,66179,66181,66184,66186,66188,66190,66193],{"class":70,"line":34158},[68,66176,53407],{"class":78},[68,66178,55880],{"class":74},[68,66180,1640],{"class":78},[68,66182,66183],{"class":1742},"'.tab-nav .active'",[68,66185,58481],{"class":78},[68,66187,58484],{"class":74},[68,66189,1640],{"class":78},[68,66191,66192],{"class":1742},"'active'",[68,66194,1646],{"class":78},[68,66196,66197],{"class":70,"line":34178},[68,66198,66199],{"class":302},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[68,66201,66202,66205,66208,66210,66212,66214],{"class":70,"line":34184},[68,66203,66204],{"class":85},"        this",[68,66206,66207],{"class":78},".classList.",[68,66209,6823],{"class":74},[68,66211,1640],{"class":78},[68,66213,66192],{"class":1742},[68,66215,1646],{"class":78},[68,66217,66218],{"class":70,"line":34195},[68,66219,3890],{"emptyLinePlaceholder":1567},[68,66221,66222],{"class":70,"line":34201},[68,66223,66224],{"class":302},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[68,66226,66227],{"class":70,"line":34207},[68,66228,66229],{"class":302},"        \u002F\u002F 干掉别人\n",[68,66231,66232,66234,66236,66238,66241,66243,66245,66247,66249],{"class":70,"line":34213},[68,66233,53407],{"class":78},[68,66235,55880],{"class":74},[68,66237,1640],{"class":78},[68,66239,66240],{"class":1742},"'.tab-content .active'",[68,66242,58481],{"class":78},[68,66244,58484],{"class":74},[68,66246,1640],{"class":78},[68,66248,66192],{"class":1742},[68,66250,1646],{"class":78},[68,66252,66253],{"class":70,"line":34219},[68,66254,66255],{"class":302},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[68,66257,66258,66260,66262,66264,66267,66269,66271,66273,66275,66277,66279,66281,66283],{"class":70,"line":34225},[68,66259,53407],{"class":78},[68,66261,55880],{"class":74},[68,66263,1640],{"class":78},[68,66265,66266],{"class":1742},"`.tab-content .item:nth-child(${",[68,66268,2070],{"class":78},[68,66270,47050],{"class":316},[68,66272,26604],{"class":85},[68,66274,58510],{"class":1742},[68,66276,58481],{"class":78},[68,66278,6823],{"class":74},[68,66280,1640],{"class":78},[68,66282,66192],{"class":1742},[68,66284,1646],{"class":78},[68,66286,66287],{"class":70,"line":34231},[68,66288,3890],{"emptyLinePlaceholder":1567},[68,66290,66291],{"class":70,"line":34237},[68,66292,66293],{"class":78},"      })\n",[68,66295,66296],{"class":70,"line":34257},[68,66297,3677],{"class":78},[68,66299,66300,66302,66304],{"class":70,"line":34263},[68,66301,53899],{"class":78},[68,66303,53295],{"class":52784},[68,66305,52791],{"class":78},[68,66307,66308,66310,66312],{"class":70,"line":34279},[68,66309,53267],{"class":78},[68,66311,53282],{"class":52784},[68,66313,52791],{"class":78},[68,66315,66316],{"class":70,"line":34285},[68,66317,3890],{"emptyLinePlaceholder":1567},[68,66319,66320,66322,66324],{"class":70,"line":34299},[68,66321,53267],{"class":78},[68,66323,52119],{"class":52784},[68,66325,52791],{"class":78},[170,66327,66328],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[170,66330,66331],{},"在监听事件中，this指向的就是他的调用者",[170,66333,66334],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[170,66336,55201],{},[170,66338,66339],{},"(function () {",[170,66341,66342],{},"const list = document.querySelector('.xtx-elevator-list')",[170,66344,66345],{},"list.addEventListener('click', function (e) {",[170,66347,66348],{},"if (e.target.tagName === 'A') {",[170,66350,66351],{},"\u002F\u002F 排他思想",[170,66353,66354],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[170,66356,66357],{},"const old = document.querySelector('.xtx-elevator-list .active')",[170,66359,66360],{},"\u002F\u002F console.log(old);",[170,66362,66363],{},"\u002F\u002F 判断",[170,66365,66366],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[170,66368,66369],{},"if (old) old.classList.remove('active')",[170,66371,66372],{},"e.target.classList.add('active')",[170,66374,2573],{},[170,66376,53946],{},[170,66378,66379],{},"})();",[19,66381,66383],{"id":66382},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[58,66385,66387],{"className":52117,"code":66386,"language":52119,"meta":63,"style":63},"\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",[65,66388,66389,66399,66403,66411,66415,66429,66443,66455,66463,66469,66479,66489,66493,66497,66504,66516,66527,66544,66557,66571,66581,66585,66589,66596,66607,66625,66635,66647,66651,66655,66662,66679,66690,66702,66706,66710,66717,66729,66733,66741,66749,66753,66761,66769,66777,66792,66836,66844,66857,66870,66883,66891,66899,66907,66935,66943,66955,66968,66981,66989,66997,67005,67031,67039,67052,67064,67077,67085,67093,67101,67127,67135,67148,67160,67173,67181,67189,67197,67202,67222,67227,67247,67252,67269,67274,67282,67287,67316,67329,67333,67337,67342,67346,67374,67379,67396,67401,67406,67411,67416,67442,67446,67450,67458,67466,67470],{"__ignoreMap":63},[68,66390,66391,66393,66395,66397],{"class":70,"line":71},[68,66392,52781],{"class":78},[68,66394,52785],{"class":52784},[68,66396,52788],{"class":74},[68,66398,52791],{"class":78},[68,66400,66401],{"class":70,"line":82},[68,66402,3890],{"emptyLinePlaceholder":1567},[68,66404,66405,66407,66409],{"class":70,"line":98},[68,66406,2537],{"class":78},[68,66408,52119],{"class":52784},[68,66410,52791],{"class":78},[68,66412,66413],{"class":70,"line":104},[68,66414,3890],{"emptyLinePlaceholder":1567},[68,66416,66417,66419,66421,66423,66425,66427],{"class":70,"line":112},[68,66418,2537],{"class":78},[68,66420,52818],{"class":52784},[68,66422,52800],{"class":74},[68,66424,1685],{"class":78},[68,66426,52805],{"class":1742},[68,66428,52791],{"class":78},[68,66430,66431,66433,66435,66437,66439,66441],{"class":70,"line":124},[68,66432,53626],{"class":78},[68,66434,52828],{"class":52784},[68,66436,52831],{"class":74},[68,66438,1685],{"class":78},[68,66440,52836],{"class":1742},[68,66442,52791],{"class":78},[68,66444,66445,66447,66449,66451,66453],{"class":70,"line":1496},[68,66446,53626],{"class":78},[68,66448,52891],{"class":52784},[68,66450,56792],{"class":78},[68,66452,52891],{"class":52784},[68,66454,52791],{"class":78},[68,66456,66457,66459,66461],{"class":70,"line":1502},[68,66458,53626],{"class":78},[68,66460,1553],{"class":52784},[68,66462,52791],{"class":78},[68,66464,66465,66467],{"class":70,"line":1510},[68,66466,7892],{"class":52784},[68,66468,79],{"class":78},[68,66470,66471,66473,66475,66477],{"class":70,"line":1521},[68,66472,56187],{"class":85},[68,66474,89],{"class":78},[68,66476,1248],{"class":85},[68,66478,95],{"class":78},[68,66480,66481,66483,66485,66487],{"class":70,"line":3103},[68,66482,56176],{"class":85},[68,66484,89],{"class":78},[68,66486,1248],{"class":85},[68,66488,95],{"class":78},[68,66490,66491],{"class":70,"line":3108},[68,66492,3677],{"class":78},[68,66494,66495],{"class":70,"line":3114},[68,66496,3890],{"emptyLinePlaceholder":1567},[68,66498,66499,66502],{"class":70,"line":3119},[68,66500,66501],{"class":52784},"    table",[68,66503,79],{"class":78},[68,66505,66506,66509,66511,66514],{"class":70,"line":3133},[68,66507,66508],{"class":85},"      border-collapse",[68,66510,89],{"class":78},[68,66512,66513],{"class":85},"collapse",[68,66515,95],{"class":78},[68,66517,66518,66521,66523,66525],{"class":70,"line":3138},[68,66519,66520],{"class":85},"      border-spacing",[68,66522,89],{"class":78},[68,66524,1248],{"class":85},[68,66526,95],{"class":78},[68,66528,66529,66531,66533,66535,66537,66539,66542],{"class":70,"line":3144},[68,66530,63455],{"class":85},[68,66532,89],{"class":78},[68,66534,1846],{"class":85},[68,66536,317],{"class":316},[68,66538,53003],{"class":85},[68,66540,66541],{"class":85}," #c0c0c0",[68,66543,95],{"class":78},[68,66545,66546,66548,66550,66553,66555],{"class":70,"line":3165},[68,66547,56250],{"class":85},[68,66549,89],{"class":78},[68,66551,66552],{"class":85},"500",[68,66554,317],{"class":316},[68,66556,95],{"class":78},[68,66558,66559,66561,66563,66565,66567,66569],{"class":70,"line":3170},[68,66560,56187],{"class":85},[68,66562,89],{"class":78},[68,66564,1940],{"class":85},[68,66566,317],{"class":316},[68,66568,53038],{"class":85},[68,66570,95],{"class":78},[68,66572,66573,66575,66577,66579],{"class":70,"line":3184},[68,66574,58764],{"class":85},[68,66576,89],{"class":78},[68,66578,53074],{"class":85},[68,66580,95],{"class":78},[68,66582,66583],{"class":70,"line":3189},[68,66584,3677],{"class":78},[68,66586,66587],{"class":70,"line":3218},[68,66588,3890],{"emptyLinePlaceholder":1567},[68,66590,66591,66594],{"class":70,"line":3223},[68,66592,66593],{"class":52784},"    th",[68,66595,79],{"class":78},[68,66597,66598,66600,66602,66605],{"class":70,"line":3240},[68,66599,56362],{"class":85},[68,66601,89],{"class":78},[68,66603,66604],{"class":85},"#09c",[68,66606,95],{"class":78},[68,66608,66609,66612,66614,66616,66618,66620,66623],{"class":70,"line":3245},[68,66610,66611],{"class":85},"      font",[68,66613,89],{"class":78},[68,66615,63817],{"class":85},[68,66617,65551],{"class":85},[68,66619,317],{"class":316},[68,66621,66622],{"class":1742}," \"微软雅黑\"",[68,66624,95],{"class":78},[68,66626,66627,66629,66631,66633],{"class":70,"line":3250},[68,66628,58894],{"class":85},[68,66630,89],{"class":78},[68,66632,62320],{"class":85},[68,66634,95],{"class":78},[68,66636,66637,66639,66641,66643,66645],{"class":70,"line":3255},[68,66638,56264],{"class":85},[68,66640,89],{"class":78},[68,66642,2427],{"class":85},[68,66644,317],{"class":316},[68,66646,95],{"class":78},[68,66648,66649],{"class":70,"line":3269},[68,66650,3677],{"class":78},[68,66652,66653],{"class":70,"line":3274},[68,66654,3890],{"emptyLinePlaceholder":1567},[68,66656,66657,66660],{"class":70,"line":4067},[68,66658,66659],{"class":52784},"    td",[68,66661,79],{"class":78},[68,66663,66664,66666,66668,66670,66672,66674,66677],{"class":70,"line":4081},[68,66665,63455],{"class":85},[68,66667,89],{"class":78},[68,66669,1846],{"class":85},[68,66671,317],{"class":316},[68,66673,53003],{"class":85},[68,66675,66676],{"class":85}," #d0d0d0",[68,66678,95],{"class":78},[68,66680,66681,66683,66685,66688],{"class":70,"line":4089},[68,66682,58894],{"class":85},[68,66684,89],{"class":78},[68,66686,66687],{"class":85},"#404060",[68,66689,95],{"class":78},[68,66691,66692,66694,66696,66698,66700],{"class":70,"line":4094},[68,66693,56176],{"class":85},[68,66695,89],{"class":78},[68,66697,313],{"class":85},[68,66699,317],{"class":316},[68,66701,95],{"class":78},[68,66703,66704],{"class":70,"line":4100},[68,66705,3677],{"class":78},[68,66707,66708],{"class":70,"line":4106},[68,66709,3890],{"emptyLinePlaceholder":1567},[68,66711,66712,66715],{"class":70,"line":4111},[68,66713,66714],{"class":74},"    .allCheck",[68,66716,79],{"class":78},[68,66718,66719,66721,66723,66725,66727],{"class":70,"line":9437},[68,66720,56250],{"class":85},[68,66722,89],{"class":78},[68,66724,2240],{"class":85},[68,66726,317],{"class":316},[68,66728,95],{"class":78},[68,66730,66731],{"class":70,"line":9461},[68,66732,3677],{"class":78},[68,66734,66735,66737,66739],{"class":70,"line":9466},[68,66736,53899],{"class":78},[68,66738,1553],{"class":52784},[68,66740,52791],{"class":78},[68,66742,66743,66745,66747],{"class":70,"line":9472},[68,66744,53267],{"class":78},[68,66746,52818],{"class":52784},[68,66748,52791],{"class":78},[68,66750,66751],{"class":70,"line":9499},[68,66752,3890],{"emptyLinePlaceholder":1567},[68,66754,66755,66757,66759],{"class":70,"line":9504},[68,66756,2537],{"class":78},[68,66758,53282],{"class":52784},[68,66760,52791],{"class":78},[68,66762,66763,66765,66767],{"class":70,"line":9510},[68,66764,53626],{"class":78},[68,66766,128],{"class":52784},[68,66768,52791],{"class":78},[68,66770,66771,66773,66775],{"class":70,"line":9522},[68,66772,52825],{"class":78},[68,66774,134],{"class":52784},[68,66776,52791],{"class":78},[68,66778,66779,66781,66783,66785,66787,66790],{"class":70,"line":9534},[68,66780,56712],{"class":78},[68,66782,137],{"class":52784},[68,66784,54968],{"class":74},[68,66786,1685],{"class":78},[68,66788,66789],{"class":1742},"\"allCheck\"",[68,66791,52791],{"class":78},[68,66793,66794,66796,66798,66800,66802,66804,66806,66808,66810,66812,66814,66817,66820,66822,66824,66826,66829,66832,66834],{"class":70,"line":9546},[68,66795,56780],{"class":78},[68,66797,55302],{"class":52784},[68,66799,55305],{"class":74},[68,66801,1685],{"class":78},[68,66803,55310],{"class":1742},[68,66805,16408],{"class":74},[68,66807,1685],{"class":78},[68,66809,9141],{"class":1742},[68,66811,16447],{"class":74},[68,66813,1685],{"class":78},[68,66815,66816],{"class":1742},"\"checkAll\"",[68,66818,66819],{"class":78},"> \u003C",[68,66821,68],{"class":52784},[68,66823,54968],{"class":74},[68,66825,1685],{"class":78},[68,66827,66828],{"class":1742},"\"all\"",[68,66830,66831],{"class":78},">全选\u003C\u002F",[68,66833,68],{"class":52784},[68,66835,52791],{"class":78},[68,66837,66838,66840,66842],{"class":70,"line":11204},[68,66839,56885],{"class":78},[68,66841,137],{"class":52784},[68,66843,52791],{"class":78},[68,66845,66846,66848,66850,66853,66855],{"class":70,"line":11229},[68,66847,56712],{"class":78},[68,66849,137],{"class":52784},[68,66851,66852],{"class":78},">商品\u003C\u002F",[68,66854,137],{"class":52784},[68,66856,52791],{"class":78},[68,66858,66859,66861,66863,66866,66868],{"class":70,"line":11252},[68,66860,56712],{"class":78},[68,66862,137],{"class":52784},[68,66864,66865],{"class":78},">商家\u003C\u002F",[68,66867,137],{"class":52784},[68,66869,52791],{"class":78},[68,66871,66872,66874,66876,66879,66881],{"class":70,"line":11276},[68,66873,56712],{"class":78},[68,66875,137],{"class":52784},[68,66877,66878],{"class":78},">价格\u003C\u002F",[68,66880,137],{"class":52784},[68,66882,52791],{"class":78},[68,66884,66885,66887,66889],{"class":70,"line":11281},[68,66886,53258],{"class":78},[68,66888,134],{"class":52784},[68,66890,52791],{"class":78},[68,66892,66893,66895,66897],{"class":70,"line":11286},[68,66894,52825],{"class":78},[68,66896,134],{"class":52784},[68,66898,52791],{"class":78},[68,66900,66901,66903,66905],{"class":70,"line":11291},[68,66902,56712],{"class":78},[68,66904,149],{"class":52784},[68,66906,52791],{"class":78},[68,66908,66909,66911,66913,66915,66917,66919,66921,66923,66926,66928,66930,66933],{"class":70,"line":11300},[68,66910,56780],{"class":78},[68,66912,55302],{"class":52784},[68,66914,55305],{"class":74},[68,66916,1685],{"class":78},[68,66918,55310],{"class":1742},[68,66920,16408],{"class":74},[68,66922,1685],{"class":78},[68,66924,66925],{"class":1742},"\"check\"",[68,66927,54968],{"class":74},[68,66929,1685],{"class":78},[68,66931,66932],{"class":1742},"\"ck\"",[68,66934,52791],{"class":78},[68,66936,66937,66939,66941],{"class":70,"line":11305},[68,66938,56885],{"class":78},[68,66940,149],{"class":52784},[68,66942,52791],{"class":78},[68,66944,66945,66947,66949,66951,66953],{"class":70,"line":11311},[68,66946,56712],{"class":78},[68,66948,149],{"class":52784},[68,66950,62651],{"class":78},[68,66952,149],{"class":52784},[68,66954,52791],{"class":78},[68,66956,66957,66959,66961,66964,66966],{"class":70,"line":11332},[68,66958,56712],{"class":78},[68,66960,149],{"class":52784},[68,66962,66963],{"class":78},">小米\u003C\u002F",[68,66965,149],{"class":52784},[68,66967,52791],{"class":78},[68,66969,66970,66972,66974,66977,66979],{"class":70,"line":11338},[68,66971,56712],{"class":78},[68,66973,149],{"class":52784},[68,66975,66976],{"class":78},">￥1999\u003C\u002F",[68,66978,149],{"class":52784},[68,66980,52791],{"class":78},[68,66982,66983,66985,66987],{"class":70,"line":11352},[68,66984,53258],{"class":78},[68,66986,134],{"class":52784},[68,66988,52791],{"class":78},[68,66990,66991,66993,66995],{"class":70,"line":11358},[68,66992,52825],{"class":78},[68,66994,134],{"class":52784},[68,66996,52791],{"class":78},[68,66998,66999,67001,67003],{"class":70,"line":11385},[68,67000,56712],{"class":78},[68,67002,149],{"class":52784},[68,67004,52791],{"class":78},[68,67006,67007,67009,67011,67013,67015,67017,67019,67021,67023,67025,67027,67029],{"class":70,"line":11394},[68,67008,56780],{"class":78},[68,67010,55302],{"class":52784},[68,67012,55305],{"class":74},[68,67014,1685],{"class":78},[68,67016,55310],{"class":1742},[68,67018,16408],{"class":74},[68,67020,1685],{"class":78},[68,67022,66925],{"class":1742},[68,67024,54968],{"class":74},[68,67026,1685],{"class":78},[68,67028,66932],{"class":1742},[68,67030,52791],{"class":78},[68,67032,67033,67035,67037],{"class":70,"line":11400},[68,67034,56885],{"class":78},[68,67036,149],{"class":52784},[68,67038,52791],{"class":78},[68,67040,67041,67043,67045,67048,67050],{"class":70,"line":11408},[68,67042,56712],{"class":78},[68,67044,149],{"class":52784},[68,67046,67047],{"class":78},">小米净水器\u003C\u002F",[68,67049,149],{"class":52784},[68,67051,52791],{"class":78},[68,67053,67054,67056,67058,67060,67062],{"class":70,"line":11413},[68,67055,56712],{"class":78},[68,67057,149],{"class":52784},[68,67059,66963],{"class":78},[68,67061,149],{"class":52784},[68,67063,52791],{"class":78},[68,67065,67066,67068,67070,67073,67075],{"class":70,"line":18091},[68,67067,56712],{"class":78},[68,67069,149],{"class":52784},[68,67071,67072],{"class":78},">￥4999\u003C\u002F",[68,67074,149],{"class":52784},[68,67076,52791],{"class":78},[68,67078,67079,67081,67083],{"class":70,"line":18097},[68,67080,53258],{"class":78},[68,67082,134],{"class":52784},[68,67084,52791],{"class":78},[68,67086,67087,67089,67091],{"class":70,"line":18120},[68,67088,52825],{"class":78},[68,67090,134],{"class":52784},[68,67092,52791],{"class":78},[68,67094,67095,67097,67099],{"class":70,"line":18126},[68,67096,56712],{"class":78},[68,67098,149],{"class":52784},[68,67100,52791],{"class":78},[68,67102,67103,67105,67107,67109,67111,67113,67115,67117,67119,67121,67123,67125],{"class":70,"line":18149},[68,67104,56780],{"class":78},[68,67106,55302],{"class":52784},[68,67108,55305],{"class":74},[68,67110,1685],{"class":78},[68,67112,55310],{"class":1742},[68,67114,16408],{"class":74},[68,67116,1685],{"class":78},[68,67118,66925],{"class":1742},[68,67120,54968],{"class":74},[68,67122,1685],{"class":78},[68,67124,66932],{"class":1742},[68,67126,52791],{"class":78},[68,67128,67129,67131,67133],{"class":70,"line":18163},[68,67130,56885],{"class":78},[68,67132,149],{"class":52784},[68,67134,52791],{"class":78},[68,67136,67137,67139,67141,67144,67146],{"class":70,"line":18183},[68,67138,56712],{"class":78},[68,67140,149],{"class":52784},[68,67142,67143],{"class":78},">小米电视\u003C\u002F",[68,67145,149],{"class":52784},[68,67147,52791],{"class":78},[68,67149,67150,67152,67154,67156,67158],{"class":70,"line":18189},[68,67151,56712],{"class":78},[68,67153,149],{"class":52784},[68,67155,66963],{"class":78},[68,67157,149],{"class":52784},[68,67159,52791],{"class":78},[68,67161,67162,67164,67166,67169,67171],{"class":70,"line":18200},[68,67163,56712],{"class":78},[68,67165,149],{"class":52784},[68,67167,67168],{"class":78},">￥5999\u003C\u002F",[68,67170,149],{"class":52784},[68,67172,52791],{"class":78},[68,67174,67175,67177,67179],{"class":70,"line":18223},[68,67176,53258],{"class":78},[68,67178,134],{"class":52784},[68,67180,52791],{"class":78},[68,67182,67183,67185,67187],{"class":70,"line":18245},[68,67184,53899],{"class":78},[68,67186,128],{"class":52784},[68,67188,52791],{"class":78},[68,67190,67191,67193,67195],{"class":70,"line":18250},[68,67192,53626],{"class":78},[68,67194,53295],{"class":52784},[68,67196,52791],{"class":78},[68,67198,67199],{"class":70,"line":18256},[68,67200,67201],{"class":302},"    \u002F\u002F 1. 获取大复选框\n",[68,67203,67204,67206,67209,67211,67213,67215,67217,67220],{"class":70,"line":18270},[68,67205,12709],{"class":316},[68,67207,67208],{"class":85}," checkAll",[68,67210,15052],{"class":316},[68,67212,55877],{"class":78},[68,67214,55880],{"class":74},[68,67216,1640],{"class":78},[68,67218,67219],{"class":1742},"'#checkAll'",[68,67221,1646],{"class":78},[68,67223,67224],{"class":70,"line":18283},[68,67225,67226],{"class":302},"    \u002F\u002F 2. 获取所有的小复选框\n",[68,67228,67229,67231,67234,67236,67238,67240,67242,67245],{"class":70,"line":18288},[68,67230,12709],{"class":316},[68,67232,67233],{"class":85}," cks",[68,67235,15052],{"class":316},[68,67237,55877],{"class":78},[68,67239,57159],{"class":74},[68,67241,1640],{"class":78},[68,67243,67244],{"class":1742},"'.ck'",[68,67246,1646],{"class":78},[68,67248,67249],{"class":70,"line":18302},[68,67250,67251],{"class":302},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[68,67253,67254,67257,67259,67261,67263,67265,67267],{"class":70,"line":18307},[68,67255,67256],{"class":78},"    checkAll.",[68,67258,59291],{"class":74},[68,67260,1640],{"class":78},[68,67262,59296],{"class":1742},[68,67264,13923],{"class":78},[68,67266,55930],{"class":316},[68,67268,55933],{"class":78},[68,67270,67271],{"class":70,"line":18313},[68,67272,67273],{"class":302},"      \u002F\u002F 得到当前大复选框的选中状态\n",[68,67275,67276,67279],{"class":70,"line":18318},[68,67277,67278],{"class":302},"      \u002F\u002F console.log(checkAll.checked)",[68,67280,67281],{"class":302},"  \u002F\u002F 得到 是 true 或者是 false\n",[68,67283,67284],{"class":70,"line":18332},[68,67285,67286],{"class":302},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[68,67288,67289,67291,67293,67295,67297,67299,67301,67303,67305,67308,67310,67312,67314],{"class":70,"line":18337},[68,67290,53766],{"class":316},[68,67292,3149],{"class":78},[68,67294,53329],{"class":316},[68,67296,10926],{"class":78},[68,67298,1685],{"class":316},[68,67300,5583],{"class":85},[68,67302,10933],{"class":78},[68,67304,2537],{"class":316},[68,67306,67307],{"class":78}," cks.",[68,67309,53450],{"class":85},[68,67311,4704],{"class":78},[68,67313,3782],{"class":316},[68,67315,13930],{"class":78},[68,67317,67318,67321,67323,67326],{"class":70,"line":18342},[68,67319,67320],{"class":78},"        cks[i].checked ",[68,67322,1685],{"class":316},[68,67324,67325],{"class":85}," this",[68,67327,67328],{"class":78},".checked\n",[68,67330,67331],{"class":70,"line":18356},[68,67332,53880],{"class":78},[68,67334,67335],{"class":70,"line":18368},[68,67336,34945],{"class":78},[68,67338,67339],{"class":70,"line":18373},[68,67340,67341],{"class":302},"    \u002F\u002F 5. 小复选框控制大复选框\n",[68,67343,67344],{"class":70,"line":18386},[68,67345,3890],{"emptyLinePlaceholder":1567},[68,67347,67348,67350,67352,67354,67356,67358,67360,67362,67364,67366,67368,67370,67372],{"class":70,"line":18391},[68,67349,4691],{"class":316},[68,67351,3149],{"class":78},[68,67353,53329],{"class":316},[68,67355,10926],{"class":78},[68,67357,1685],{"class":316},[68,67359,5583],{"class":85},[68,67361,10933],{"class":78},[68,67363,2537],{"class":316},[68,67365,67307],{"class":78},[68,67367,53450],{"class":85},[68,67369,4704],{"class":78},[68,67371,3782],{"class":316},[68,67373,13930],{"class":78},[68,67375,67376],{"class":70,"line":18396},[68,67377,67378],{"class":302},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[68,67380,67381,67384,67386,67388,67390,67392,67394],{"class":70,"line":18401},[68,67382,67383],{"class":78},"      cks[i].",[68,67385,59291],{"class":74},[68,67387,1640],{"class":78},[68,67389,59296],{"class":1742},[68,67391,13923],{"class":78},[68,67393,55930],{"class":316},[68,67395,55933],{"class":78},[68,67397,67398],{"class":70,"line":18414},[68,67399,67400],{"class":302},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[68,67402,67403],{"class":70,"line":18419},[68,67404,67405],{"class":302},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[68,67407,67408],{"class":70,"line":34117},[68,67409,67410],{"class":302},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[68,67412,67413],{"class":70,"line":34123},[68,67414,67415],{"class":302},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[68,67417,67418,67421,67423,67425,67427,67429,67432,67434,67436,67438,67440],{"class":70,"line":34129},[68,67419,67420],{"class":78},"        checkAll.checked ",[68,67422,1685],{"class":316},[68,67424,55877],{"class":78},[68,67426,57159],{"class":74},[68,67428,1640],{"class":78},[68,67430,67431],{"class":1742},"'.ck:checked'",[68,67433,32310],{"class":78},[68,67435,53450],{"class":85},[68,67437,59384],{"class":316},[68,67439,67307],{"class":78},[68,67441,57309],{"class":85},[68,67443,67444],{"class":70,"line":34135},[68,67445,66293],{"class":78},[68,67447,67448],{"class":70,"line":34141},[68,67449,3677],{"class":78},[68,67451,67452,67454,67456],{"class":70,"line":34152},[68,67453,53899],{"class":78},[68,67455,53295],{"class":52784},[68,67457,52791],{"class":78},[68,67459,67460,67462,67464],{"class":70,"line":34158},[68,67461,53267],{"class":78},[68,67463,53282],{"class":52784},[68,67465,52791],{"class":78},[68,67467,67468],{"class":70,"line":34178},[68,67469,3890],{"emptyLinePlaceholder":1567},[68,67471,67472,67474,67476],{"class":70,"line":34184},[68,67473,53267],{"class":78},[68,67475,52119],{"class":52784},[68,67477,52791],{"class":78},[170,67479,67480],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[170,67482,67483],{},"用好之间比较得到的布尔值！！！",[170,67485,67486,67487,67490,67491,3149,67494,2212,67496,67499],{},"在 JS 里访问的时候，",[65,67488,67489],{},"checkbox.checked"," 是一个 ",[268,67492,67493],{},"布尔值",[65,67495,2855],{},[65,67497,67498],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[170,67501,67502,67503,67506,67507],{},"HTML 的 ",[65,67504,67505],{},"checked=\"checked\""," 只是 ",[268,67508,67509,67510,67513],{},"初始值；JS 的 ",[65,67511,67512],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[170,67515,67516],{},"：checked是一个伪类选择器",[170,67518,67519],{},[801,67520],{"alt":63,"src":67521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[170,67523,67524,67527],{},[67525,67526],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[170,67529,67530],{},[801,67531],{"alt":63,"src":67532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67534,67536],{"id":67535},"_33-dom事件进阶","3.3 DOM事件进阶",[19,67538,67540],{"id":67539},"_331-事件流","3.3.1 事件流",[170,67542,67543],{},[801,67544],{"alt":63,"src":67545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[245,67547,67549],{"id":67548},"_3311-事件捕获","3.3.1.1 事件捕获",[170,67551,67552],{},[801,67553],{"alt":63,"src":67554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[58,67556,67558],{"className":52117,"code":67557,"language":52119,"meta":63,"style":63},"\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",[65,67559,67560,67570,67584,67588,67596,67610,67630,67642,67650,67657,67669,67681,67691,67695,67699,67706,67718,67730,67740,67744,67752,67760,67764,67772,67787,67806,67814,67822,67842,67862,67878,67889,67897,67914,67925,67933,67950,67961,67969,67977,67985,67989],{"__ignoreMap":63},[68,67561,67562,67564,67566,67568],{"class":70,"line":71},[68,67563,52781],{"class":78},[68,67565,52785],{"class":52784},[68,67567,52788],{"class":74},[68,67569,52791],{"class":78},[68,67571,67572,67574,67576,67578,67580,67582],{"class":70,"line":82},[68,67573,2537],{"class":78},[68,67575,52119],{"class":52784},[68,67577,52800],{"class":74},[68,67579,1685],{"class":78},[68,67581,52805],{"class":1742},[68,67583,52791],{"class":78},[68,67585,67586],{"class":70,"line":98},[68,67587,3890],{"emptyLinePlaceholder":1567},[68,67589,67590,67592,67594],{"class":70,"line":104},[68,67591,2537],{"class":78},[68,67593,52818],{"class":52784},[68,67595,52791],{"class":78},[68,67597,67598,67600,67602,67604,67606,67608],{"class":70,"line":112},[68,67599,53626],{"class":78},[68,67601,52828],{"class":52784},[68,67603,52831],{"class":74},[68,67605,1685],{"class":78},[68,67607,52836],{"class":1742},[68,67609,52791],{"class":78},[68,67611,67612,67614,67616,67618,67620,67622,67624,67626,67628],{"class":70,"line":124},[68,67613,53626],{"class":78},[68,67615,52828],{"class":52784},[68,67617,16408],{"class":74},[68,67619,1685],{"class":78},[68,67621,52875],{"class":1742},[68,67623,52855],{"class":74},[68,67625,1685],{"class":78},[68,67627,52882],{"class":1742},[68,67629,52791],{"class":78},[68,67631,67632,67634,67636,67638,67640],{"class":70,"line":1496},[68,67633,53626],{"class":78},[68,67635,52891],{"class":52784},[68,67637,52894],{"class":78},[68,67639,52891],{"class":52784},[68,67641,52791],{"class":78},[68,67643,67644,67646,67648],{"class":70,"line":1502},[68,67645,53626],{"class":78},[68,67647,1553],{"class":52784},[68,67649,52791],{"class":78},[68,67651,67652,67655],{"class":70,"line":1510},[68,67653,67654],{"class":74},"    .father",[68,67656,79],{"class":78},[68,67658,67659,67661,67663,67665,67667],{"class":70,"line":1521},[68,67660,56250],{"class":85},[68,67662,89],{"class":78},[68,67664,66552],{"class":85},[68,67666,317],{"class":316},[68,67668,95],{"class":78},[68,67670,67671,67673,67675,67677,67679],{"class":70,"line":3103},[68,67672,56264],{"class":85},[68,67674,89],{"class":78},[68,67676,66552],{"class":85},[68,67678,317],{"class":316},[68,67680,95],{"class":78},[68,67682,67683,67685,67687,67689],{"class":70,"line":3108},[68,67684,56362],{"class":85},[68,67686,89],{"class":78},[68,67688,53127],{"class":85},[68,67690,95],{"class":78},[68,67692,67693],{"class":70,"line":3114},[68,67694,3677],{"class":78},[68,67696,67697],{"class":70,"line":3119},[68,67698,3890],{"emptyLinePlaceholder":1567},[68,67700,67701,67704],{"class":70,"line":3133},[68,67702,67703],{"class":74},"    .son",[68,67705,79],{"class":78},[68,67707,67708,67710,67712,67714,67716],{"class":70,"line":3138},[68,67709,56250],{"class":85},[68,67711,89],{"class":78},[68,67713,3213],{"class":85},[68,67715,317],{"class":316},[68,67717,95],{"class":78},[68,67719,67720,67722,67724,67726,67728],{"class":70,"line":3144},[68,67721,56264],{"class":85},[68,67723,89],{"class":78},[68,67725,3213],{"class":85},[68,67727,317],{"class":316},[68,67729,95],{"class":78},[68,67731,67732,67734,67736,67738],{"class":70,"line":3165},[68,67733,56362],{"class":85},[68,67735,89],{"class":78},[68,67737,56367],{"class":85},[68,67739,95],{"class":78},[68,67741,67742],{"class":70,"line":3170},[68,67743,3677],{"class":78},[68,67745,67746,67748,67750],{"class":70,"line":3184},[68,67747,53899],{"class":78},[68,67749,1553],{"class":52784},[68,67751,52791],{"class":78},[68,67753,67754,67756,67758],{"class":70,"line":3189},[68,67755,53267],{"class":78},[68,67757,52818],{"class":52784},[68,67759,52791],{"class":78},[68,67761,67762],{"class":70,"line":3218},[68,67763,3890],{"emptyLinePlaceholder":1567},[68,67765,67766,67768,67770],{"class":70,"line":3223},[68,67767,2537],{"class":78},[68,67769,53282],{"class":52784},[68,67771,52791],{"class":78},[68,67773,67774,67776,67778,67780,67782,67785],{"class":70,"line":3240},[68,67775,53626],{"class":78},[68,67777,53093],{"class":52784},[68,67779,54968],{"class":74},[68,67781,1685],{"class":78},[68,67783,67784],{"class":1742},"\"father\"",[68,67786,52791],{"class":78},[68,67788,67789,67791,67793,67795,67797,67800,67802,67804],{"class":70,"line":3245},[68,67790,52825],{"class":78},[68,67792,53093],{"class":52784},[68,67794,54968],{"class":74},[68,67796,1685],{"class":78},[68,67798,67799],{"class":1742},"\"son\"",[68,67801,56792],{"class":78},[68,67803,53093],{"class":52784},[68,67805,52791],{"class":78},[68,67807,67808,67810,67812],{"class":70,"line":3250},[68,67809,53899],{"class":78},[68,67811,53093],{"class":52784},[68,67813,52791],{"class":78},[68,67815,67816,67818,67820],{"class":70,"line":3255},[68,67817,53626],{"class":78},[68,67819,53295],{"class":52784},[68,67821,52791],{"class":78},[68,67823,67824,67826,67829,67831,67833,67835,67837,67840],{"class":70,"line":3269},[68,67825,12709],{"class":316},[68,67827,67828],{"class":85}," fa",[68,67830,15052],{"class":316},[68,67832,55877],{"class":78},[68,67834,55880],{"class":74},[68,67836,1640],{"class":78},[68,67838,67839],{"class":1742},"'.father'",[68,67841,1646],{"class":78},[68,67843,67844,67846,67849,67851,67853,67855,67857,67860],{"class":70,"line":3274},[68,67845,12709],{"class":316},[68,67847,67848],{"class":85}," son",[68,67850,15052],{"class":316},[68,67852,55877],{"class":78},[68,67854,55880],{"class":74},[68,67856,1640],{"class":78},[68,67858,67859],{"class":1742},"'.son'",[68,67861,1646],{"class":78},[68,67863,67864,67866,67868,67870,67872,67874,67876],{"class":70,"line":4067},[68,67865,53889],{"class":78},[68,67867,59291],{"class":74},[68,67869,1640],{"class":78},[68,67871,59296],{"class":1742},[68,67873,13923],{"class":78},[68,67875,55930],{"class":316},[68,67877,55933],{"class":78},[68,67879,67880,67882,67884,67887],{"class":70,"line":4081},[68,67881,60403],{"class":74},[68,67883,1640],{"class":78},[68,67885,67886],{"class":1742},"'woshiu1'",[68,67888,1646],{"class":78},[68,67890,67891,67893,67895],{"class":70,"line":4089},[68,67892,56016],{"class":78},[68,67894,2855],{"class":85},[68,67896,1646],{"class":78},[68,67898,67899,67902,67904,67906,67908,67910,67912],{"class":70,"line":4094},[68,67900,67901],{"class":78},"    fa.",[68,67903,59291],{"class":74},[68,67905,1640],{"class":78},[68,67907,59296],{"class":1742},[68,67909,13923],{"class":78},[68,67911,55930],{"class":316},[68,67913,55933],{"class":78},[68,67915,67916,67918,67920,67923],{"class":70,"line":4100},[68,67917,60403],{"class":74},[68,67919,1640],{"class":78},[68,67921,67922],{"class":1742},"'1'",[68,67924,1646],{"class":78},[68,67926,67927,67929,67931],{"class":70,"line":4106},[68,67928,56016],{"class":78},[68,67930,2855],{"class":85},[68,67932,1646],{"class":78},[68,67934,67935,67938,67940,67942,67944,67946,67948],{"class":70,"line":4111},[68,67936,67937],{"class":78},"    son.",[68,67939,59291],{"class":74},[68,67941,1640],{"class":78},[68,67943,59296],{"class":1742},[68,67945,13923],{"class":78},[68,67947,55930],{"class":316},[68,67949,55933],{"class":78},[68,67951,67952,67954,67956,67959],{"class":70,"line":9437},[68,67953,60403],{"class":74},[68,67955,1640],{"class":78},[68,67957,67958],{"class":1742},"'2'",[68,67960,1646],{"class":78},[68,67962,67963,67965,67967],{"class":70,"line":9461},[68,67964,56016],{"class":78},[68,67966,2855],{"class":85},[68,67968,1646],{"class":78},[68,67970,67971,67973,67975],{"class":70,"line":9466},[68,67972,53899],{"class":78},[68,67974,53295],{"class":52784},[68,67976,52791],{"class":78},[68,67978,67979,67981,67983],{"class":70,"line":9472},[68,67980,53267],{"class":78},[68,67982,53282],{"class":52784},[68,67984,52791],{"class":78},[68,67986,67987],{"class":70,"line":9499},[68,67988,3890],{"emptyLinePlaceholder":1567},[68,67990,67991,67993,67995],{"class":70,"line":9504},[68,67992,53267],{"class":78},[68,67994,52119],{"class":52784},[68,67996,52791],{"class":78},[170,67998,67999],{},[801,68000],{"alt":63,"src":68001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[170,68003,68004],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[245,68006,68008],{"id":68007},"_3312-事件冒泡","3.3.1.2 事件冒泡",[170,68010,68011],{},[801,68012],{"alt":63,"src":68013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[170,68015,68016],{},"反着来",[170,68018,68019],{},"注意是同名事件，比如都是‘click’",[245,68021,68023],{"id":68022},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[170,68025,68026],{},[801,68027],{"alt":63,"src":68028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[245,68030,68032],{"id":68031},"_3314-解绑事件","3.3.1.4 解绑事件",[170,68034,68035],{},[801,68036],{"alt":63,"src":68037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[170,68039,68040],{},[801,68041],{"alt":63,"src":68042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[245,68044,68046],{"id":68045},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[263,68048,68049],{},[27,68050,68051],{},"事件类型的区别",[170,68053,68054],{},[801,68055],{"alt":63,"src":68056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[170,68058,68059],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[263,68061,68062],{"start":82},[27,68063,68064],{},"注册事件的区别",[170,68066,68067],{},[801,68068],{"alt":63,"src":68069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[245,68071,68073],{"id":68072},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[170,68075,68076],{},[801,68077],{"alt":63,"src":68078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[170,68080,68081],{},[801,68082],{"alt":63,"src":68083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[58,68085,68087],{"className":54549,"code":68086,"language":54551,"meta":63,"style":63},"\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",[65,68088,68089,68097,68114,68137,68145,68150,68155,68160,68164,68172,68180],{"__ignoreMap":63},[68,68090,68091,68093,68095],{"class":70,"line":71},[68,68092,2537],{"class":78},[68,68094,53282],{"class":52784},[68,68096,52791],{"class":78},[68,68098,68099,68101,68104,68107,68109,68112],{"class":70,"line":82},[68,68100,53626],{"class":78},[68,68102,68103],{"class":52784},"form",[68,68105,68106],{"class":74}," action",[68,68108,1685],{"class":78},[68,68110,68111],{"class":1742},"\"http:\u002F\u002Fwww.itcast.cn\"",[68,68113,52791],{"class":78},[68,68115,68116,68118,68120,68122,68124,68127,68130,68132,68135],{"class":70,"line":98},[68,68117,52825],{"class":78},[68,68119,55302],{"class":52784},[68,68121,55305],{"class":74},[68,68123,1685],{"class":78},[68,68125,68126],{"class":1742},"\"submit\"",[68,68128,68129],{"class":74}," value",[68,68131,1685],{"class":78},[68,68133,68134],{"class":1742},"\"免费注册\"",[68,68136,52791],{"class":78},[68,68138,68139,68141,68143],{"class":70,"line":104},[68,68140,52825],{"class":78},[68,68142,53295],{"class":52784},[68,68144,52791],{"class":78},[68,68146,68147],{"class":70,"line":112},[68,68148,68149],{"class":78},"      const form = document.querySelector('form')\n",[68,68151,68152],{"class":70,"line":124},[68,68153,68154],{"class":78},"      form.addEventListener('submit', function (e) {\n",[68,68156,68157],{"class":70,"line":1496},[68,68158,68159],{"class":78},"        e.preventDefault()\n",[68,68161,68162],{"class":70,"line":1502},[68,68163,66293],{"class":78},[68,68165,68166,68168,68170],{"class":70,"line":1510},[68,68167,53258],{"class":78},[68,68169,53295],{"class":52784},[68,68171,52791],{"class":78},[68,68173,68174,68176,68178],{"class":70,"line":1521},[68,68175,53899],{"class":78},[68,68177,68103],{"class":52784},[68,68179,52791],{"class":78},[68,68181,68182,68184,68186],{"class":70,"line":3103},[68,68183,53267],{"class":78},[68,68185,53282],{"class":52784},[68,68187,52791],{"class":78},[170,68189,68190],{},"点击不在跳转！！！",[19,68192,68194],{"id":68193},"_332-事件委托","3.3.2 事件委托",[170,68196,68197],{},[801,68198],{"alt":63,"src":68199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[58,68201,68203],{"className":52117,"code":68202,"language":52119,"meta":63,"style":63},"\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",[65,68204,68205,68215,68229,68233,68241,68255,68275,68287,68295,68299,68307,68315,68327,68339,68351,68363,68375,68388,68396,68404,68409,68428,68449,68454,68459,68464,68469,68478,68482,68492,68496,68501,68506,68520,68530,68534,68538,68546,68554,68558],{"__ignoreMap":63},[68,68206,68207,68209,68211,68213],{"class":70,"line":71},[68,68208,52781],{"class":78},[68,68210,52785],{"class":52784},[68,68212,52788],{"class":74},[68,68214,52791],{"class":78},[68,68216,68217,68219,68221,68223,68225,68227],{"class":70,"line":82},[68,68218,2537],{"class":78},[68,68220,52119],{"class":52784},[68,68222,52800],{"class":74},[68,68224,1685],{"class":78},[68,68226,52805],{"class":1742},[68,68228,52791],{"class":78},[68,68230,68231],{"class":70,"line":98},[68,68232,3890],{"emptyLinePlaceholder":1567},[68,68234,68235,68237,68239],{"class":70,"line":104},[68,68236,2537],{"class":78},[68,68238,52818],{"class":52784},[68,68240,52791],{"class":78},[68,68242,68243,68245,68247,68249,68251,68253],{"class":70,"line":112},[68,68244,53626],{"class":78},[68,68246,52828],{"class":52784},[68,68248,52831],{"class":74},[68,68250,1685],{"class":78},[68,68252,52836],{"class":1742},[68,68254,52791],{"class":78},[68,68256,68257,68259,68261,68263,68265,68267,68269,68271,68273],{"class":70,"line":124},[68,68258,53626],{"class":78},[68,68260,52828],{"class":52784},[68,68262,16408],{"class":74},[68,68264,1685],{"class":78},[68,68266,52875],{"class":1742},[68,68268,52855],{"class":74},[68,68270,1685],{"class":78},[68,68272,52882],{"class":1742},[68,68274,52791],{"class":78},[68,68276,68277,68279,68281,68283,68285],{"class":70,"line":1496},[68,68278,53626],{"class":78},[68,68280,52891],{"class":52784},[68,68282,52894],{"class":78},[68,68284,52891],{"class":52784},[68,68286,52791],{"class":78},[68,68288,68289,68291,68293],{"class":70,"line":1502},[68,68290,53267],{"class":78},[68,68292,52818],{"class":52784},[68,68294,52791],{"class":78},[68,68296,68297],{"class":70,"line":1510},[68,68298,3890],{"emptyLinePlaceholder":1567},[68,68300,68301,68303,68305],{"class":70,"line":1521},[68,68302,2537],{"class":78},[68,68304,53282],{"class":52784},[68,68306,52791],{"class":78},[68,68308,68309,68311,68313],{"class":70,"line":3103},[68,68310,53626],{"class":78},[68,68312,24],{"class":52784},[68,68314,52791],{"class":78},[68,68316,68317,68319,68321,68323,68325],{"class":70,"line":3108},[68,68318,52825],{"class":78},[68,68320,27],{"class":52784},[68,68322,55447],{"class":78},[68,68324,27],{"class":52784},[68,68326,52791],{"class":78},[68,68328,68329,68331,68333,68335,68337],{"class":70,"line":3114},[68,68330,52825],{"class":78},[68,68332,27],{"class":52784},[68,68334,55466],{"class":78},[68,68336,27],{"class":52784},[68,68338,52791],{"class":78},[68,68340,68341,68343,68345,68347,68349],{"class":70,"line":3119},[68,68342,52825],{"class":78},[68,68344,27],{"class":52784},[68,68346,55485],{"class":78},[68,68348,27],{"class":52784},[68,68350,52791],{"class":78},[68,68352,68353,68355,68357,68359,68361],{"class":70,"line":3133},[68,68354,52825],{"class":78},[68,68356,27],{"class":52784},[68,68358,55504],{"class":78},[68,68360,27],{"class":52784},[68,68362,52791],{"class":78},[68,68364,68365,68367,68369,68371,68373],{"class":70,"line":3138},[68,68366,52825],{"class":78},[68,68368,27],{"class":52784},[68,68370,55523],{"class":78},[68,68372,27],{"class":52784},[68,68374,52791],{"class":78},[68,68376,68377,68379,68381,68384,68386],{"class":70,"line":3144},[68,68378,52825],{"class":78},[68,68380,170],{"class":52784},[68,68382,68383],{"class":78},">我不需要变色\u003C\u002F",[68,68385,170],{"class":52784},[68,68387,52791],{"class":78},[68,68389,68390,68392,68394],{"class":70,"line":3165},[68,68391,53899],{"class":78},[68,68393,24],{"class":52784},[68,68395,52791],{"class":78},[68,68397,68398,68400,68402],{"class":70,"line":3170},[68,68399,53626],{"class":78},[68,68401,53295],{"class":52784},[68,68403,52791],{"class":78},[68,68405,68406],{"class":70,"line":3184},[68,68407,68408],{"class":302},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[68,68410,68411,68413,68415,68417,68419,68421,68423,68426],{"class":70,"line":3189},[68,68412,12709],{"class":316},[68,68414,62770],{"class":85},[68,68416,15052],{"class":316},[68,68418,55877],{"class":78},[68,68420,55880],{"class":74},[68,68422,1640],{"class":78},[68,68424,68425],{"class":1742},"'ul'",[68,68427,1646],{"class":78},[68,68429,68430,68433,68435,68437,68439,68441,68443,68445,68447],{"class":70,"line":3218},[68,68431,68432],{"class":78},"    ul.",[68,68434,59291],{"class":74},[68,68436,1640],{"class":78},[68,68438,59296],{"class":1742},[68,68440,13923],{"class":78},[68,68442,55930],{"class":316},[68,68444,3149],{"class":78},[68,68446,1712],{"class":6705},[68,68448,13930],{"class":78},[68,68450,68451],{"class":70,"line":3223},[68,68452,68453],{"class":302},"      \u002F\u002F alert(1)\n",[68,68455,68456],{"class":70,"line":3240},[68,68457,68458],{"class":302},"      \u002F\u002F e.target就是我们点击的对象\n",[68,68460,68461],{"class":70,"line":3245},[68,68462,68463],{"class":302},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[68,68465,68466],{"class":70,"line":3250},[68,68467,68468],{"class":302},"      \u002F\u002F e.target.style.color = 'red'\n",[68,68470,68471,68473,68475],{"class":70,"line":3255},[68,68472,59722],{"class":78},[68,68474,59725],{"class":74},[68,68476,68477],{"class":78},"(e)\n",[68,68479,68480],{"class":70,"line":3269},[68,68481,3890],{"emptyLinePlaceholder":1567},[68,68483,68484,68486,68489],{"class":70,"line":3274},[68,68485,59722],{"class":78},[68,68487,68488],{"class":74},"dir",[68,68490,68491],{"class":78},"(e.target)\n",[68,68493,68494],{"class":70,"line":4067},[68,68495,3890],{"emptyLinePlaceholder":1567},[68,68497,68498],{"class":70,"line":4081},[68,68499,68500],{"class":302},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[68,68502,68503],{"class":70,"line":4089},[68,68504,68505],{"class":302},"      \u002F\u002F 通过tagName来进行判断\n",[68,68507,68508,68510,68513,68515,68518],{"class":70,"line":4094},[68,68509,55961],{"class":316},[68,68511,68512],{"class":78}," (e.target.tagName ",[68,68514,55967],{"class":316},[68,68516,68517],{"class":1742}," 'LI'",[68,68519,13930],{"class":78},[68,68521,68522,68525,68527],{"class":70,"line":4100},[68,68523,68524],{"class":78},"        e.target.style.color ",[68,68526,1685],{"class":316},[68,68528,68529],{"class":1742}," 'red'\n",[68,68531,68532],{"class":70,"line":4106},[68,68533,53880],{"class":78},[68,68535,68536],{"class":70,"line":4111},[68,68537,34945],{"class":78},[68,68539,68540,68542,68544],{"class":70,"line":9437},[68,68541,53899],{"class":78},[68,68543,53295],{"class":52784},[68,68545,52791],{"class":78},[68,68547,68548,68550,68552],{"class":70,"line":9461},[68,68549,53267],{"class":78},[68,68551,53282],{"class":52784},[68,68553,52791],{"class":78},[68,68555,68556],{"class":70,"line":9466},[68,68557,3890],{"emptyLinePlaceholder":1567},[68,68559,68560,68562,68564],{"class":70,"line":9472},[68,68561,53267],{"class":78},[68,68563,52119],{"class":52784},[68,68565,52791],{"class":78},[170,68567,68568],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[170,68570,68571],{},"if(e.target.ragName==='P') {}",[170,68573,68574],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[170,68576,68577],{},"通过事件委托的方式实现tab栏切换改造：",[170,68579,68580],{},"一定要记住自定义属性！！！！！！",[170,68582,68583],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[170,68585,68586],{},"id是自定义的属性名",[170,68588,68589],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[58,68591,68593],{"className":52117,"code":68592,"language":52119,"meta":63,"style":63},"\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",[65,68594,68595,68605,68619,68623,68631,68645,68665,68685,68697,68705,68711,68721,68731,68735,68739,68745,68757,68769,68781,68797,68801,68805,68811,68823,68835,68847,68857,68867,68871,68875,68883,68895,68905,68917,68921,68925,68933,68943,68953,68963,68967,68971,68981,68995,69007,69011,69015,69027,69037,69053,69063,69067,69071,69085,69095,69105,69109,69113,69119,69133,69137,69141,69149,69159,69163,69167,69176,69186,69190,69198,69206,69210,69218,69232,69246,69258,69266,69305,69337,69369,69401,69433,69441,69449,69463,69497,69531,69565,69599,69633,69641,69649,69657,69662,69667,69686,69691,69711,69719,69724,69737,69758,69771,69775,69780,69785,69798,69818,69846,69850,69854,69858,69866,69874,69878],{"__ignoreMap":63},[68,68596,68597,68599,68601,68603],{"class":70,"line":71},[68,68598,52781],{"class":78},[68,68600,52785],{"class":52784},[68,68602,52788],{"class":74},[68,68604,52791],{"class":78},[68,68606,68607,68609,68611,68613,68615,68617],{"class":70,"line":82},[68,68608,2537],{"class":78},[68,68610,52119],{"class":52784},[68,68612,52800],{"class":74},[68,68614,1685],{"class":78},[68,68616,52805],{"class":1742},[68,68618,52791],{"class":78},[68,68620,68621],{"class":70,"line":98},[68,68622,3890],{"emptyLinePlaceholder":1567},[68,68624,68625,68627,68629],{"class":70,"line":104},[68,68626,2537],{"class":78},[68,68628,52818],{"class":52784},[68,68630,52791],{"class":78},[68,68632,68633,68635,68637,68639,68641,68643],{"class":70,"line":112},[68,68634,53626],{"class":78},[68,68636,52828],{"class":52784},[68,68638,52831],{"class":74},[68,68640,1685],{"class":78},[68,68642,52836],{"class":1742},[68,68644,60605],{"class":78},[68,68646,68647,68649,68651,68653,68655,68657,68659,68661,68663],{"class":70,"line":124},[68,68648,53626],{"class":78},[68,68650,52828],{"class":52784},[68,68652,52847],{"class":74},[68,68654,1685],{"class":78},[68,68656,52852],{"class":1742},[68,68658,52855],{"class":74},[68,68660,1685],{"class":78},[68,68662,52860],{"class":1742},[68,68664,60605],{"class":78},[68,68666,68667,68669,68671,68673,68675,68677,68679,68681,68683],{"class":70,"line":1496},[68,68668,53626],{"class":78},[68,68670,52828],{"class":52784},[68,68672,16408],{"class":74},[68,68674,1685],{"class":78},[68,68676,52875],{"class":1742},[68,68678,52855],{"class":74},[68,68680,1685],{"class":78},[68,68682,52882],{"class":1742},[68,68684,60605],{"class":78},[68,68686,68687,68689,68691,68693,68695],{"class":70,"line":1502},[68,68688,53626],{"class":78},[68,68690,52891],{"class":52784},[68,68692,65103],{"class":78},[68,68694,52891],{"class":52784},[68,68696,52791],{"class":78},[68,68698,68699,68701,68703],{"class":70,"line":1510},[68,68700,53626],{"class":78},[68,68702,1553],{"class":52784},[68,68704,52791],{"class":78},[68,68706,68707,68709],{"class":70,"line":1521},[68,68708,7892],{"class":52784},[68,68710,79],{"class":78},[68,68712,68713,68715,68717,68719],{"class":70,"line":3103},[68,68714,56187],{"class":85},[68,68716,89],{"class":78},[68,68718,1248],{"class":85},[68,68720,95],{"class":78},[68,68722,68723,68725,68727,68729],{"class":70,"line":3108},[68,68724,56176],{"class":85},[68,68726,89],{"class":78},[68,68728,1248],{"class":85},[68,68730,95],{"class":78},[68,68732,68733],{"class":70,"line":3114},[68,68734,3677],{"class":78},[68,68736,68737],{"class":70,"line":3119},[68,68738,3890],{"emptyLinePlaceholder":1567},[68,68740,68741,68743],{"class":70,"line":3133},[68,68742,65154],{"class":74},[68,68744,79],{"class":78},[68,68746,68747,68749,68751,68753,68755],{"class":70,"line":3138},[68,68748,56250],{"class":85},[68,68750,89],{"class":78},[68,68752,65165],{"class":85},[68,68754,317],{"class":316},[68,68756,95],{"class":78},[68,68758,68759,68761,68763,68765,68767],{"class":70,"line":3144},[68,68760,56264],{"class":85},[68,68762,89],{"class":78},[68,68764,65178],{"class":85},[68,68766,317],{"class":316},[68,68768,95],{"class":78},[68,68770,68771,68773,68775,68777,68779],{"class":70,"line":3165},[68,68772,56187],{"class":85},[68,68774,89],{"class":78},[68,68776,333],{"class":85},[68,68778,317],{"class":316},[68,68780,95],{"class":78},[68,68782,68783,68785,68787,68789,68791,68793,68795],{"class":70,"line":3170},[68,68784,63455],{"class":85},[68,68786,89],{"class":78},[68,68788,1846],{"class":85},[68,68790,317],{"class":316},[68,68792,53003],{"class":85},[68,68794,63722],{"class":85},[68,68796,95],{"class":78},[68,68798,68799],{"class":70,"line":3184},[68,68800,3677],{"class":78},[68,68802,68803],{"class":70,"line":3189},[68,68804,3890],{"emptyLinePlaceholder":1567},[68,68806,68807,68809],{"class":70,"line":3218},[68,68808,65223],{"class":74},[68,68810,79],{"class":78},[68,68812,68813,68815,68817,68819,68821],{"class":70,"line":3223},[68,68814,56250],{"class":85},[68,68816,89],{"class":78},[68,68818,1940],{"class":85},[68,68820,1957],{"class":316},[68,68822,95],{"class":78},[68,68824,68825,68827,68829,68831,68833],{"class":70,"line":3240},[68,68826,56264],{"class":85},[68,68828,89],{"class":78},[68,68830,2534],{"class":85},[68,68832,317],{"class":316},[68,68834,95],{"class":78},[68,68836,68837,68839,68841,68843,68845],{"class":70,"line":3245},[68,68838,58837],{"class":85},[68,68840,89],{"class":78},[68,68842,2534],{"class":85},[68,68844,317],{"class":316},[68,68846,95],{"class":78},[68,68848,68849,68851,68853,68855],{"class":70,"line":3250},[68,68850,56487],{"class":85},[68,68852,89],{"class":78},[68,68854,52960],{"class":85},[68,68856,95],{"class":78},[68,68858,68859,68861,68863,68865],{"class":70,"line":3255},[68,68860,56498],{"class":85},[68,68862,89],{"class":78},[68,68864,53150],{"class":85},[68,68866,95],{"class":78},[68,68868,68869],{"class":70,"line":3269},[68,68870,3677],{"class":78},[68,68872,68873],{"class":70,"line":3274},[68,68874,3890],{"emptyLinePlaceholder":1567},[68,68876,68877,68879,68881],{"class":70,"line":4067},[68,68878,65223],{"class":74},[68,68880,65296],{"class":52784},[68,68882,79],{"class":78},[68,68884,68885,68887,68889,68891,68893],{"class":70,"line":4081},[68,68886,56400],{"class":85},[68,68888,89],{"class":78},[68,68890,2427],{"class":85},[68,68892,317],{"class":316},[68,68894,95],{"class":78},[68,68896,68897,68899,68901,68903],{"class":70,"line":4089},[68,68898,63812],{"class":85},[68,68900,89],{"class":78},[68,68902,65319],{"class":85},[68,68904,95],{"class":78},[68,68906,68907,68909,68911,68913,68915],{"class":70,"line":4094},[68,68908,63478],{"class":85},[68,68910,89],{"class":78},[68,68912,333],{"class":85},[68,68914,317],{"class":316},[68,68916,95],{"class":78},[68,68918,68919],{"class":70,"line":4100},[68,68920,3677],{"class":78},[68,68922,68923],{"class":70,"line":4106},[68,68924,3890],{"emptyLinePlaceholder":1567},[68,68926,68927,68929,68931],{"class":70,"line":4111},[68,68928,65223],{"class":74},[68,68930,62770],{"class":52784},[68,68932,79],{"class":78},[68,68934,68935,68937,68939,68941],{"class":70,"line":9437},[68,68936,56213],{"class":85},[68,68938,89],{"class":78},[68,68940,151],{"class":85},[68,68942,95],{"class":78},[68,68944,68945,68947,68949,68951],{"class":70,"line":9461},[68,68946,56487],{"class":85},[68,68948,89],{"class":78},[68,68950,52960],{"class":85},[68,68952,95],{"class":78},[68,68954,68955,68957,68959,68961],{"class":70,"line":9466},[68,68956,56498],{"class":85},[68,68958,89],{"class":78},[68,68960,53062],{"class":85},[68,68962,95],{"class":78},[68,68964,68965],{"class":70,"line":9472},[68,68966,3677],{"class":78},[68,68968,68969],{"class":70,"line":9499},[68,68970,3890],{"emptyLinePlaceholder":1567},[68,68972,68973,68975,68977,68979],{"class":70,"line":9504},[68,68974,65223],{"class":74},[68,68976,62770],{"class":52784},[68,68978,56553],{"class":52784},[68,68980,79],{"class":78},[68,68982,68983,68985,68987,68989,68991,68993],{"class":70,"line":9510},[68,68984,56187],{"class":85},[68,68986,89],{"class":78},[68,68988,1248],{"class":85},[68,68990,10439],{"class":85},[68,68992,317],{"class":316},[68,68994,95],{"class":78},[68,68996,68997,68999,69001,69003,69005],{"class":70,"line":9522},[68,68998,56400],{"class":85},[68,69000,89],{"class":78},[68,69002,2177],{"class":85},[68,69004,317],{"class":316},[68,69006,95],{"class":78},[68,69008,69009],{"class":70,"line":9534},[68,69010,3677],{"class":78},[68,69012,69013],{"class":70,"line":9546},[68,69014,3890],{"emptyLinePlaceholder":1567},[68,69016,69017,69019,69021,69023,69025],{"class":70,"line":11204},[68,69018,65223],{"class":74},[68,69020,62770],{"class":52784},[68,69022,56553],{"class":52784},[68,69024,2891],{"class":52784},[68,69026,79],{"class":78},[68,69028,69029,69031,69033,69035],{"class":70,"line":11229},[68,69030,65448],{"class":85},[68,69032,89],{"class":78},[68,69034,151],{"class":85},[68,69036,95],{"class":78},[68,69038,69039,69041,69043,69045,69047,69049,69051],{"class":70,"line":11252},[68,69040,63710],{"class":85},[68,69042,89],{"class":78},[68,69044,1715],{"class":85},[68,69046,317],{"class":316},[68,69048,53003],{"class":85},[68,69050,65469],{"class":85},[68,69052,95],{"class":78},[68,69054,69055,69057,69059,69061],{"class":70,"line":11276},[68,69056,58894],{"class":85},[68,69058,89],{"class":78},[68,69060,63847],{"class":85},[68,69062,95],{"class":78},[68,69064,69065],{"class":70,"line":11281},[68,69066,3677],{"class":78},[68,69068,69069],{"class":70,"line":11286},[68,69070,3890],{"emptyLinePlaceholder":1567},[68,69072,69073,69075,69077,69079,69081,69083],{"class":70,"line":11291},[68,69074,65223],{"class":74},[68,69076,62770],{"class":52784},[68,69078,56553],{"class":52784},[68,69080,2891],{"class":52784},[68,69082,65502],{"class":74},[68,69084,79],{"class":78},[68,69086,69087,69089,69091,69093],{"class":70,"line":11300},[68,69088,63269],{"class":85},[68,69090,89],{"class":78},[68,69092,65513],{"class":85},[68,69094,95],{"class":78},[68,69096,69097,69099,69101,69103],{"class":70,"line":11305},[68,69098,58894],{"class":85},[68,69100,89],{"class":78},[68,69102,65513],{"class":85},[68,69104,95],{"class":78},[68,69106,69107],{"class":70,"line":11311},[68,69108,3677],{"class":78},[68,69110,69111],{"class":70,"line":11332},[68,69112,3890],{"emptyLinePlaceholder":1567},[68,69114,69115,69117],{"class":70,"line":11338},[68,69116,65538],{"class":74},[68,69118,79],{"class":78},[68,69120,69121,69123,69125,69127,69129,69131],{"class":70,"line":11352},[68,69122,56176],{"class":85},[68,69124,89],{"class":78},[68,69126,1248],{"class":85},[68,69128,65551],{"class":85},[68,69130,317],{"class":316},[68,69132,95],{"class":78},[68,69134,69135],{"class":70,"line":11358},[68,69136,3677],{"class":78},[68,69138,69139],{"class":70,"line":11385},[68,69140,3890],{"emptyLinePlaceholder":1567},[68,69142,69143,69145,69147],{"class":70,"line":11394},[68,69144,65538],{"class":74},[68,69146,63652],{"class":74},[68,69148,79],{"class":78},[68,69150,69151,69153,69155,69157],{"class":70,"line":11400},[68,69152,56487],{"class":85},[68,69154,89],{"class":78},[68,69156,151],{"class":85},[68,69158,95],{"class":78},[68,69160,69161],{"class":70,"line":11408},[68,69162,3677],{"class":78},[68,69164,69165],{"class":70,"line":11413},[68,69166,3890],{"emptyLinePlaceholder":1567},[68,69168,69169,69171,69174],{"class":70,"line":18091},[68,69170,65538],{"class":74},[68,69172,69173],{"class":74}," .active",[68,69175,79],{"class":78},[68,69177,69178,69180,69182,69184],{"class":70,"line":18097},[68,69179,56487],{"class":85},[68,69181,89],{"class":78},[68,69183,62347],{"class":85},[68,69185,95],{"class":78},[68,69187,69188],{"class":70,"line":18120},[68,69189,3677],{"class":78},[68,69191,69192,69194,69196],{"class":70,"line":18126},[68,69193,53899],{"class":78},[68,69195,1553],{"class":52784},[68,69197,52791],{"class":78},[68,69199,69200,69202,69204],{"class":70,"line":18149},[68,69201,53267],{"class":78},[68,69203,52818],{"class":52784},[68,69205,52791],{"class":78},[68,69207,69208],{"class":70,"line":18163},[68,69209,3890],{"emptyLinePlaceholder":1567},[68,69211,69212,69214,69216],{"class":70,"line":18183},[68,69213,2537],{"class":78},[68,69215,53282],{"class":52784},[68,69217,52791],{"class":78},[68,69219,69220,69222,69224,69226,69228,69230],{"class":70,"line":18189},[68,69221,53626],{"class":78},[68,69223,53093],{"class":52784},[68,69225,54968],{"class":74},[68,69227,1685],{"class":78},[68,69229,65653],{"class":1742},[68,69231,52791],{"class":78},[68,69233,69234,69236,69238,69240,69242,69244],{"class":70,"line":18200},[68,69235,52825],{"class":78},[68,69237,53093],{"class":52784},[68,69239,54968],{"class":74},[68,69241,1685],{"class":78},[68,69243,65668],{"class":1742},[68,69245,52791],{"class":78},[68,69247,69248,69250,69252,69254,69256],{"class":70,"line":18223},[68,69249,56712],{"class":78},[68,69251,19],{"class":52784},[68,69253,65679],{"class":78},[68,69255,19],{"class":52784},[68,69257,52791],{"class":78},[68,69259,69260,69262,69264],{"class":70,"line":18245},[68,69261,56712],{"class":78},[68,69263,24],{"class":52784},[68,69265,52791],{"class":78},[68,69267,69268,69270,69272,69274,69276,69278,69280,69282,69284,69286,69288,69290,69292,69295,69297,69299,69301,69303],{"class":70,"line":18250},[68,69269,56780],{"class":78},[68,69271,27],{"class":52784},[68,69273,62530],{"class":78},[68,69275,1867],{"class":52784},[68,69277,54968],{"class":74},[68,69279,1685],{"class":78},[68,69281,61184],{"class":1742},[68,69283,62535],{"class":74},[68,69285,1685],{"class":78},[68,69287,65714],{"class":1742},[68,69289,55432],{"class":74},[68,69291,1685],{"class":78},[68,69293,69294],{"class":1742},"\"0\"",[68,69296,65717],{"class":78},[68,69298,1867],{"class":52784},[68,69300,56792],{"class":78},[68,69302,27],{"class":52784},[68,69304,52791],{"class":78},[68,69306,69307,69309,69311,69313,69315,69317,69319,69321,69323,69325,69327,69329,69331,69333,69335],{"class":70,"line":18256},[68,69308,56780],{"class":78},[68,69310,27],{"class":52784},[68,69312,62530],{"class":78},[68,69314,1867],{"class":52784},[68,69316,62535],{"class":74},[68,69318,1685],{"class":78},[68,69320,65714],{"class":1742},[68,69322,55432],{"class":74},[68,69324,1685],{"class":78},[68,69326,5168],{"class":1742},[68,69328,65744],{"class":78},[68,69330,1867],{"class":52784},[68,69332,56792],{"class":78},[68,69334,27],{"class":52784},[68,69336,52791],{"class":78},[68,69338,69339,69341,69343,69345,69347,69349,69351,69353,69355,69357,69359,69361,69363,69365,69367],{"class":70,"line":18270},[68,69340,56780],{"class":78},[68,69342,27],{"class":52784},[68,69344,62530],{"class":78},[68,69346,1867],{"class":52784},[68,69348,62535],{"class":74},[68,69350,1685],{"class":78},[68,69352,65714],{"class":1742},[68,69354,55432],{"class":74},[68,69356,1685],{"class":78},[68,69358,5191],{"class":1742},[68,69360,65771],{"class":78},[68,69362,1867],{"class":52784},[68,69364,56792],{"class":78},[68,69366,27],{"class":52784},[68,69368,52791],{"class":78},[68,69370,69371,69373,69375,69377,69379,69381,69383,69385,69387,69389,69391,69393,69395,69397,69399],{"class":70,"line":18283},[68,69372,56780],{"class":78},[68,69374,27],{"class":52784},[68,69376,62530],{"class":78},[68,69378,1867],{"class":52784},[68,69380,62535],{"class":74},[68,69382,1685],{"class":78},[68,69384,65714],{"class":1742},[68,69386,55432],{"class":74},[68,69388,1685],{"class":78},[68,69390,5204],{"class":1742},[68,69392,65798],{"class":78},[68,69394,1867],{"class":52784},[68,69396,56792],{"class":78},[68,69398,27],{"class":52784},[68,69400,52791],{"class":78},[68,69402,69403,69405,69407,69409,69411,69413,69415,69417,69419,69421,69423,69425,69427,69429,69431],{"class":70,"line":18288},[68,69404,56780],{"class":78},[68,69406,27],{"class":52784},[68,69408,62530],{"class":78},[68,69410,1867],{"class":52784},[68,69412,62535],{"class":74},[68,69414,1685],{"class":78},[68,69416,65714],{"class":1742},[68,69418,55432],{"class":74},[68,69420,1685],{"class":78},[68,69422,5217],{"class":1742},[68,69424,65825],{"class":78},[68,69426,1867],{"class":52784},[68,69428,56792],{"class":78},[68,69430,27],{"class":52784},[68,69432,52791],{"class":78},[68,69434,69435,69437,69439],{"class":70,"line":18302},[68,69436,56885],{"class":78},[68,69438,24],{"class":52784},[68,69440,52791],{"class":78},[68,69442,69443,69445,69447],{"class":70,"line":18307},[68,69444,53258],{"class":78},[68,69446,53093],{"class":52784},[68,69448,52791],{"class":78},[68,69450,69451,69453,69455,69457,69459,69461],{"class":70,"line":18313},[68,69452,52825],{"class":78},[68,69454,53093],{"class":52784},[68,69456,54968],{"class":74},[68,69458,1685],{"class":78},[68,69460,65862],{"class":1742},[68,69462,52791],{"class":78},[68,69464,69465,69467,69469,69471,69473,69475,69477,69479,69481,69483,69485,69487,69489,69491,69493,69495],{"class":70,"line":18318},[68,69466,56712],{"class":78},[68,69468,53093],{"class":52784},[68,69470,54968],{"class":74},[68,69472,1685],{"class":78},[68,69474,65877],{"class":1742},[68,69476,62530],{"class":78},[68,69478,801],{"class":52784},[68,69480,56717],{"class":74},[68,69482,1685],{"class":78},[68,69484,65888],{"class":1742},[68,69486,56725],{"class":74},[68,69488,1685],{"class":78},[68,69490,9141],{"class":1742},[68,69492,65897],{"class":78},[68,69494,53093],{"class":52784},[68,69496,52791],{"class":78},[68,69498,69499,69501,69503,69505,69507,69509,69511,69513,69515,69517,69519,69521,69523,69525,69527,69529],{"class":70,"line":18332},[68,69500,56712],{"class":78},[68,69502,53093],{"class":52784},[68,69504,54968],{"class":74},[68,69506,1685],{"class":78},[68,69508,64101],{"class":1742},[68,69510,62530],{"class":78},[68,69512,801],{"class":52784},[68,69514,56717],{"class":74},[68,69516,1685],{"class":78},[68,69518,65924],{"class":1742},[68,69520,56725],{"class":74},[68,69522,1685],{"class":78},[68,69524,9141],{"class":1742},[68,69526,65897],{"class":78},[68,69528,53093],{"class":52784},[68,69530,52791],{"class":78},[68,69532,69533,69535,69537,69539,69541,69543,69545,69547,69549,69551,69553,69555,69557,69559,69561,69563],{"class":70,"line":18337},[68,69534,56712],{"class":78},[68,69536,53093],{"class":52784},[68,69538,54968],{"class":74},[68,69540,1685],{"class":78},[68,69542,64101],{"class":1742},[68,69544,62530],{"class":78},[68,69546,801],{"class":52784},[68,69548,56717],{"class":74},[68,69550,1685],{"class":78},[68,69552,65959],{"class":1742},[68,69554,56725],{"class":74},[68,69556,1685],{"class":78},[68,69558,9141],{"class":1742},[68,69560,65897],{"class":78},[68,69562,53093],{"class":52784},[68,69564,52791],{"class":78},[68,69566,69567,69569,69571,69573,69575,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595,69597],{"class":70,"line":18342},[68,69568,56712],{"class":78},[68,69570,53093],{"class":52784},[68,69572,54968],{"class":74},[68,69574,1685],{"class":78},[68,69576,64101],{"class":1742},[68,69578,62530],{"class":78},[68,69580,801],{"class":52784},[68,69582,56717],{"class":74},[68,69584,1685],{"class":78},[68,69586,65994],{"class":1742},[68,69588,56725],{"class":74},[68,69590,1685],{"class":78},[68,69592,9141],{"class":1742},[68,69594,65897],{"class":78},[68,69596,53093],{"class":52784},[68,69598,52791],{"class":78},[68,69600,69601,69603,69605,69607,69609,69611,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631],{"class":70,"line":18356},[68,69602,56712],{"class":78},[68,69604,53093],{"class":52784},[68,69606,54968],{"class":74},[68,69608,1685],{"class":78},[68,69610,64101],{"class":1742},[68,69612,62530],{"class":78},[68,69614,801],{"class":52784},[68,69616,56717],{"class":74},[68,69618,1685],{"class":78},[68,69620,66029],{"class":1742},[68,69622,56725],{"class":74},[68,69624,1685],{"class":78},[68,69626,9141],{"class":1742},[68,69628,65897],{"class":78},[68,69630,53093],{"class":52784},[68,69632,52791],{"class":78},[68,69634,69635,69637,69639],{"class":70,"line":18368},[68,69636,53258],{"class":78},[68,69638,53093],{"class":52784},[68,69640,52791],{"class":78},[68,69642,69643,69645,69647],{"class":70,"line":18373},[68,69644,53899],{"class":78},[68,69646,53093],{"class":52784},[68,69648,52791],{"class":78},[68,69650,69651,69653,69655],{"class":70,"line":18386},[68,69652,53626],{"class":78},[68,69654,53295],{"class":52784},[68,69656,52791],{"class":78},[68,69658,69659],{"class":70,"line":18391},[68,69660,69661],{"class":302},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[68,69663,69664],{"class":70,"line":18396},[68,69665,69666],{"class":302},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[68,69668,69669,69671,69673,69675,69677,69679,69681,69684],{"class":70,"line":18401},[68,69670,12709],{"class":316},[68,69672,62770],{"class":85},[68,69674,15052],{"class":316},[68,69676,55877],{"class":78},[68,69678,55880],{"class":74},[68,69680,1640],{"class":78},[68,69682,69683],{"class":1742},"'.tab-nav ul'",[68,69685,1646],{"class":78},[68,69687,69688],{"class":70,"line":18414},[68,69689,69690],{"class":302},"    \u002F\u002F 2.添加事件\n",[68,69692,69693,69695,69697,69699,69701,69703,69705,69707,69709],{"class":70,"line":18419},[68,69694,68432],{"class":78},[68,69696,59291],{"class":74},[68,69698,1640],{"class":78},[68,69700,59296],{"class":1742},[68,69702,13923],{"class":78},[68,69704,55930],{"class":316},[68,69706,3149],{"class":78},[68,69708,1712],{"class":6705},[68,69710,13930],{"class":78},[68,69712,69713,69715,69717],{"class":70,"line":34117},[68,69714,59722],{"class":78},[68,69716,68488],{"class":74},[68,69718,68491],{"class":78},[68,69720,69721],{"class":70,"line":34123},[68,69722,69723],{"class":302},"      \u002F\u002Fe.targer是我们点击的对象\n",[68,69725,69726,69728,69730,69732,69735],{"class":70,"line":34129},[68,69727,55961],{"class":316},[68,69729,68512],{"class":78},[68,69731,55967],{"class":316},[68,69733,69734],{"class":1742}," 'A'",[68,69736,13930],{"class":78},[68,69738,69739,69741,69743,69745,69748,69750,69752,69754,69756],{"class":70,"line":34135},[68,69740,53407],{"class":78},[68,69742,55880],{"class":74},[68,69744,1640],{"class":78},[68,69746,69747],{"class":1742},"'.active'",[68,69749,58481],{"class":78},[68,69751,58484],{"class":74},[68,69753,1640],{"class":78},[68,69755,66192],{"class":1742},[68,69757,1646],{"class":78},[68,69759,69760,69763,69765,69767,69769],{"class":70,"line":34141},[68,69761,69762],{"class":78},"        e.target.classList.",[68,69764,6823],{"class":74},[68,69766,1640],{"class":78},[68,69768,66192],{"class":1742},[68,69770,1646],{"class":78},[68,69772,69773],{"class":70,"line":34152},[68,69774,3890],{"emptyLinePlaceholder":1567},[68,69776,69777],{"class":70,"line":34158},[68,69778,69779],{"class":302},"        \u002F\u002F 下面大盒子模块\n",[68,69781,69782],{"class":70,"line":34178},[68,69783,69784],{"class":302},"        \u002F\u002F console.log(e.target.dataset.id)\n",[68,69786,69787,69789,69791,69793,69795],{"class":70,"line":34184},[68,69788,62748],{"class":316},[68,69790,4522],{"class":85},[68,69792,15052],{"class":316},[68,69794,47050],{"class":316},[68,69796,69797],{"class":78},"e.target.dataset.id\n",[68,69799,69800,69802,69804,69806,69808,69810,69812,69814,69816],{"class":70,"line":34195},[68,69801,53407],{"class":78},[68,69803,55880],{"class":74},[68,69805,1640],{"class":78},[68,69807,66240],{"class":1742},[68,69809,58481],{"class":78},[68,69811,58484],{"class":74},[68,69813,1640],{"class":78},[68,69815,66192],{"class":1742},[68,69817,1646],{"class":78},[68,69819,69820,69822,69824,69826,69828,69830,69832,69834,69836,69838,69840,69842,69844],{"class":70,"line":34201},[68,69821,53407],{"class":78},[68,69823,55880],{"class":74},[68,69825,1640],{"class":78},[68,69827,66266],{"class":1742},[68,69829,2070],{"class":78},[68,69831,47050],{"class":316},[68,69833,26604],{"class":85},[68,69835,58510],{"class":1742},[68,69837,58481],{"class":78},[68,69839,6823],{"class":74},[68,69841,1640],{"class":78},[68,69843,66192],{"class":1742},[68,69845,1646],{"class":78},[68,69847,69848],{"class":70,"line":34207},[68,69849,3890],{"emptyLinePlaceholder":1567},[68,69851,69852],{"class":70,"line":34213},[68,69853,53880],{"class":78},[68,69855,69856],{"class":70,"line":34219},[68,69857,34945],{"class":78},[68,69859,69860,69862,69864],{"class":70,"line":34225},[68,69861,53899],{"class":78},[68,69863,53295],{"class":52784},[68,69865,52791],{"class":78},[68,69867,69868,69870,69872],{"class":70,"line":34231},[68,69869,53267],{"class":78},[68,69871,53282],{"class":52784},[68,69873,52791],{"class":78},[68,69875,69876],{"class":70,"line":34237},[68,69877,3890],{"emptyLinePlaceholder":1567},[68,69879,69880,69882,69884],{"class":70,"line":34257},[68,69881,53267],{"class":78},[68,69883,52119],{"class":52784},[68,69885,52791],{"class":78},[19,69887,69889],{"id":69888},"_333-页面加载事件","3.3.3 页面加载事件",[263,69891,69892],{},[27,69893,69894],{},"load",[170,69896,69897],{},[801,69898],{"alt":63,"src":69899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[170,69901,69902],{},"window代表整个窗口，比document还要大",[170,69904,69905],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[170,69907,69908],{},"img.addEventListener('load', function () {",[170,69910,69911],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[170,69913,53946],{},[263,69915,69916],{"start":82},[27,69917,69918],{},"DOMContentLoaded",[170,69920,69921],{},[801,69922],{"alt":63,"src":69923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[170,69925,69926],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,69928,69930],{"id":69929},"_334-元素滚动事件","3.3.4 元素滚动事件",[170,69932,69933],{},[801,69934],{"alt":63,"src":69935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[170,69937,69938],{},[801,69939],{"alt":63,"src":69940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[170,69942,69943],{},[801,69944],{"alt":63,"src":69945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[170,69947,69948],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[170,69950,69951],{},"获得的是数字型数据，不带单位",[170,69953,69954],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[170,69956,69957],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[170,69959,69960],{},"它是通过document.documentElement来获取",[170,69962,69963],{},[801,69964],{"alt":63,"src":69965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[170,69967,69968],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,69970,69972],{"id":69971},"_335-页面缩放事件","3.3.5 页面缩放事件",[170,69974,69975],{},[801,69976],{"alt":63,"src":69977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[170,69979,69980],{},[801,69981],{"alt":63,"src":69982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,69984,69986],{"id":69985},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[170,69988,69989],{},[801,69990],{"alt":63,"src":69991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[170,69993,69994],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[170,69996,69997],{},[801,69998],{"alt":63,"src":69999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[170,70001,70002],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[170,70004,70005],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[170,70007,70008],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[170,70010,70011],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[170,70013,70014],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[170,70016,70017],{},[801,70018],{"alt":63,"src":70019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[170,70021,70022],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[170,70024,70025],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[170,70027,70028],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[170,70030,70031],{},"e.pageX-box.getBoundingClientRect()",[19,70033,70035],{"id":70034},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[170,70037,70038],{},[801,70039],{"alt":63,"src":70040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[170,70042,70043],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,70045,70047],{"id":70046},"_338-总结","3.3.8 总结",[170,70049,70050],{},[801,70051],{"alt":63,"src":70052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[170,70054,70055],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[170,70057,70058],{},"修改盒子的宽高只能通过width和height来实现",[19,70060,70062],{"id":70061},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[58,70064,70066],{"className":52117,"code":70065,"language":52119,"meta":63,"style":63},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[65,70067,70068,70073,70078,70083,70088],{"__ignoreMap":63},[68,70069,70070],{"class":70,"line":71},[68,70071,70072],{"class":78},"\u002F* 页面滑动 *\u002F\n",[68,70074,70075],{"class":70,"line":82},[68,70076,70077],{"class":78},"html {\n",[68,70079,70080],{"class":70,"line":98},[68,70081,70082],{"class":78},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[68,70084,70085],{"class":70,"line":104},[68,70086,70087],{"class":78},"  scroll-behavior: smooth;\n",[68,70089,70090],{"class":70,"line":112},[68,70091,101],{"class":78},[170,70093,70094],{},"默认是auto",[19,70096,70098],{"id":70097},"_3310-日期对象","3.3.10 日期对象",[245,70100,70102],{"id":70101},"_33101-实例化","3.3.10.1 实例化",[170,70104,70105],{},[801,70106],{"alt":63,"src":70107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[245,70109,70111],{"id":70110},"_33102-时期对象方法","3.3.10.2 时期对象方法",[170,70113,70114],{},[801,70115],{"alt":63,"src":70116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[170,70118,70119],{},"月份+1",[170,70121,70122],{},"老外认为第一天为0，星期天",[170,70124,70125],{},"方法使用的时候必须要跟括号",[170,70127,70128],{},"快速获得日期",[170,70130,70131],{},"\u002F\u002F 得到年月日",[170,70133,70134],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[170,70136,70137],{},"\u002F\u002F 得到当地日期",[170,70139,70140],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[170,70142,70143],{},"\u002F\u002F 得到当地时间",[170,70145,70146],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[170,70148,70149],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[170,70151,70152],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53295,70154,70155],{},"\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",[170,70157,70158],{},"学会去封装函数！",[245,70160,70162],{"id":70161},"_33103-时间戳","3.3.10.3 时间戳",[170,70164,70165],{},[801,70166],{"alt":63,"src":70167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[170,70169,70170],{},[801,70171],{"alt":63,"src":70172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[170,70174,70175],{},"三种方法记住一个就可以",[19,70177,70179],{"id":70178},"_3311-节点操作","3.3.11 节点操作",[245,70181,70183],{"id":70182},"_33111-dom节点","3.3.11.1 DOM节点",[170,70185,70186],{},[801,70187],{"alt":63,"src":70188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[170,70190,70191],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[245,70193,70195],{"id":70194},"_33112-查找节点","3.3.11.2 查找节点",[170,70197,70198],{},"前边的document.querySelector()是获取的元素",[170,70200,70201],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[170,70203,70204],{},[801,70205],{"alt":63,"src":70206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[263,70208,70209],{},[27,70210,70211],{},"父节点",[170,70213,70214],{},[801,70215],{"alt":63,"src":70216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[263,70218,70219],{"start":82},[27,70220,70221],{},"子节点",[170,70223,70224],{},[801,70225],{"alt":63,"src":70226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[170,70228,70229],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[170,70231,70232],{},"children获得的是伪数组，是亲儿子",[263,70234,70235],{"start":98},[27,70236,70237],{},"兄弟节点",[170,70239,70240],{},[801,70241],{"alt":63,"src":70242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[245,70244,70246],{"id":70245},"_33113-增加节点","3.3.11.3 增加节点",[170,70248,70249],{},[801,70250],{"alt":63,"src":70251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[170,70253,70254],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[170,70256,70257],{},[801,70258],{"alt":63,"src":70259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[170,70261,70262],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[170,70264,70265],{},"下面是写法的部分展示，就按照下边的格式来写",[170,70267,70268],{},"例：",[53295,70270,70271],{},"\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",[170,70273,70274],{},[801,70275],{"alt":63,"src":70276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[170,70278,70279],{},"false只克隆标签，里边的内容不会克隆过来",[58,70281,70283],{"className":52117,"code":70282,"language":52119,"meta":63,"style":63},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[65,70284,70285],{"__ignoreMap":63},[68,70286,70287],{"class":70,"line":71},[68,70288,70282],{"class":78},[245,70290,70292],{"id":70291},"_33114-删除节点","3.3.11.4 删除节点",[170,70294,70295],{},[801,70296],{"alt":63,"src":70297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[170,70299,70300],{},"父亲删儿子",[170,70302,70303],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,70305,70307],{"id":70306},"_3312-m端事件","3.3.12 M端事件",[170,70309,70310],{},"M端就是移动端",[170,70312,70313],{},[801,70314],{"alt":63,"src":70315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,70317,70319],{"id":70318},"_3313-插件","3.3.13 插件",[170,70321,70322],{},"要熟悉官网！！！",[170,70324,70325],{},[1867,70326,70327],{"href":70327,"rel":70328},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25350],[170,70330,70331],{},[1867,70332,70333],{"href":70333,"rel":70334},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25350],[19,70336,70338],{"id":70337},"_3314-学生信息表","3.3.14 学生信息表",[263,70340,70341,70344,70347,70350,70353,70356,70359,70362],{},[27,70342,70343],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[27,70345,70346],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[27,70348,70349],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[27,70351,70352],{},"用好表单元素自带的属性，value,name等",[27,70354,70355],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[27,70357,70358],{},"不要忘记事件对象",[27,70360,70361],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[27,70363,70364],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[170,70366,70367],{},"结构：",[58,70369,70371],{"className":52117,"code":70370,"language":52119,"meta":63,"style":63},"\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",[65,70372,70373,70383,70397,70401,70409,70423,70443,70464,70477,70501,70509,70513,70521,70534,70555,70583,70611,70616,70638,70658,70677,70685,70713,70735,70755,70775,70795,70815,70835,70843,70863,70871,70875,70888,70896,70904,70912,70925,70938,70951,70964,70977,70990,71003,71011,71019,71027,71032,71037,71042,71047,71052,71057,71062,71067,71072,71077,71082,71087,71092,71100,71108,71116,71120,71140,71159,71179,71199,71219,71239,71243,71248,71268,71273,71283,71288,71293,71313,71335,71340,71350,71354,71358,71363,71368,71397,71411,71426,71430,71434,71438,71443,71454,71467,71472,71477,71482,71487,71492,71496,71501,71506,71515,71520,71525,71537,71542,71549,71553,71558,71568,71573,71583,71588,71616,71637,71647,71667,71685,71702,71719,71736,71753,71757,71767,71772,71777,71782,71793,71797,71801,71805,71810,71815,71836,71848,71853,71858,71863,71877,71882,71889,71893,71897,71905,71909,71917,71921],{"__ignoreMap":63},[68,70374,70375,70377,70379,70381],{"class":70,"line":71},[68,70376,52781],{"class":78},[68,70378,52785],{"class":52784},[68,70380,52788],{"class":74},[68,70382,52791],{"class":78},[68,70384,70385,70387,70389,70391,70393,70395],{"class":70,"line":82},[68,70386,2537],{"class":78},[68,70388,52119],{"class":52784},[68,70390,52800],{"class":74},[68,70392,1685],{"class":78},[68,70394,52805],{"class":1742},[68,70396,52791],{"class":78},[68,70398,70399],{"class":70,"line":98},[68,70400,3890],{"emptyLinePlaceholder":1567},[68,70402,70403,70405,70407],{"class":70,"line":104},[68,70404,2537],{"class":78},[68,70406,52818],{"class":52784},[68,70408,52791],{"class":78},[68,70410,70411,70413,70415,70417,70419,70421],{"class":70,"line":112},[68,70412,53626],{"class":78},[68,70414,52828],{"class":52784},[68,70416,52831],{"class":74},[68,70418,1685],{"class":78},[68,70420,52836],{"class":1742},[68,70422,60605],{"class":78},[68,70424,70425,70427,70429,70431,70433,70435,70437,70439,70441],{"class":70,"line":124},[68,70426,53626],{"class":78},[68,70428,52828],{"class":52784},[68,70430,16408],{"class":74},[68,70432,1685],{"class":78},[68,70434,52875],{"class":1742},[68,70436,52855],{"class":74},[68,70438,1685],{"class":78},[68,70440,52882],{"class":1742},[68,70442,60605],{"class":78},[68,70444,70445,70447,70449,70451,70453,70455,70457,70459,70462],{"class":70,"line":1496},[68,70446,53626],{"class":78},[68,70448,52828],{"class":52784},[68,70450,52847],{"class":74},[68,70452,1685],{"class":78},[68,70454,52852],{"class":1742},[68,70456,52855],{"class":74},[68,70458,1685],{"class":78},[68,70460,70461],{"class":1742},"\"ie=edge\"",[68,70463,60605],{"class":78},[68,70465,70466,70468,70470,70473,70475],{"class":70,"line":1502},[68,70467,53626],{"class":78},[68,70469,52891],{"class":52784},[68,70471,70472],{"class":78},">学生信息管理\u003C\u002F",[68,70474,52891],{"class":52784},[68,70476,52791],{"class":78},[68,70478,70479,70481,70484,70487,70489,70492,70494,70496,70499],{"class":70,"line":1510},[68,70480,53626],{"class":78},[68,70482,70483],{"class":52784},"link",[68,70485,70486],{"class":74}," rel",[68,70488,1685],{"class":78},[68,70490,70491],{"class":1742},"\"stylesheet\"",[68,70493,62535],{"class":74},[68,70495,1685],{"class":78},[68,70497,70498],{"class":1742},"\"css\u002Findex.css\"",[68,70500,60605],{"class":78},[68,70502,70503,70505,70507],{"class":70,"line":1521},[68,70504,53267],{"class":78},[68,70506,52818],{"class":52784},[68,70508,52791],{"class":78},[68,70510,70511],{"class":70,"line":3103},[68,70512,3890],{"emptyLinePlaceholder":1567},[68,70514,70515,70517,70519],{"class":70,"line":3108},[68,70516,2537],{"class":78},[68,70518,53282],{"class":52784},[68,70520,52791],{"class":78},[68,70522,70523,70525,70527,70530,70532],{"class":70,"line":3114},[68,70524,53626],{"class":78},[68,70526,10],{"class":52784},[68,70528,70529],{"class":78},">新增学员\u003C\u002F",[68,70531,10],{"class":52784},[68,70533,52791],{"class":78},[68,70535,70536,70538,70540,70542,70544,70546,70549,70551,70553],{"class":70,"line":3119},[68,70537,53626],{"class":78},[68,70539,68103],{"class":52784},[68,70541,54968],{"class":74},[68,70543,1685],{"class":78},[68,70545,64142],{"class":1742},[68,70547,70548],{"class":74}," autocomplete",[68,70550,1685],{"class":78},[68,70552,33260],{"class":1742},[68,70554,52791],{"class":78},[68,70556,70557,70560,70562,70564,70566,70568,70570,70572,70575,70577,70579,70581],{"class":70,"line":3133},[68,70558,70559],{"class":78},"    姓名：\u003C",[68,70561,55302],{"class":52784},[68,70563,55305],{"class":74},[68,70565,1685],{"class":78},[68,70567,64177],{"class":1742},[68,70569,54968],{"class":74},[68,70571,1685],{"class":78},[68,70573,70574],{"class":1742},"\"uname\"",[68,70576,16408],{"class":74},[68,70578,1685],{"class":78},[68,70580,70574],{"class":1742},[68,70582,60605],{"class":78},[68,70584,70585,70588,70590,70592,70594,70596,70598,70600,70603,70605,70607,70609],{"class":70,"line":3138},[68,70586,70587],{"class":78},"    年龄：\u003C",[68,70589,55302],{"class":52784},[68,70591,55305],{"class":74},[68,70593,1685],{"class":78},[68,70595,64177],{"class":1742},[68,70597,54968],{"class":74},[68,70599,1685],{"class":78},[68,70601,70602],{"class":1742},"\"age\"",[68,70604,16408],{"class":74},[68,70606,1685],{"class":78},[68,70608,70602],{"class":1742},[68,70610,60605],{"class":78},[68,70612,70613],{"class":70,"line":3144},[68,70614,70615],{"class":78},"    性别:\n",[68,70617,70618,70620,70623,70625,70627,70630,70632,70634,70636],{"class":70,"line":3165},[68,70619,52825],{"class":78},[68,70621,70622],{"class":52784},"select",[68,70624,16408],{"class":74},[68,70626,1685],{"class":78},[68,70628,70629],{"class":1742},"\"gender\"",[68,70631,54968],{"class":74},[68,70633,1685],{"class":78},[68,70635,70629],{"class":1742},[68,70637,52791],{"class":78},[68,70639,70640,70642,70645,70647,70649,70651,70654,70656],{"class":70,"line":3170},[68,70641,56712],{"class":78},[68,70643,70644],{"class":52784},"option",[68,70646,68129],{"class":74},[68,70648,1685],{"class":78},[68,70650,11449],{"class":1742},[68,70652,70653],{"class":78},">男\u003C\u002F",[68,70655,70644],{"class":52784},[68,70657,52791],{"class":78},[68,70659,70660,70662,70664,70666,70668,70670,70673,70675],{"class":70,"line":3184},[68,70661,56712],{"class":78},[68,70663,70644],{"class":52784},[68,70665,68129],{"class":74},[68,70667,1685],{"class":78},[68,70669,11518],{"class":1742},[68,70671,70672],{"class":78},">女\u003C\u002F",[68,70674,70644],{"class":52784},[68,70676,52791],{"class":78},[68,70678,70679,70681,70683],{"class":70,"line":3189},[68,70680,53258],{"class":78},[68,70682,70622],{"class":52784},[68,70684,52791],{"class":78},[68,70686,70687,70690,70692,70694,70696,70698,70700,70702,70705,70707,70709,70711],{"class":70,"line":3218},[68,70688,70689],{"class":78},"    薪资：\u003C",[68,70691,55302],{"class":52784},[68,70693,55305],{"class":74},[68,70695,1685],{"class":78},[68,70697,64177],{"class":1742},[68,70699,54968],{"class":74},[68,70701,1685],{"class":78},[68,70703,70704],{"class":1742},"\"salary\"",[68,70706,16408],{"class":74},[68,70708,1685],{"class":78},[68,70710,70704],{"class":1742},[68,70712,60605],{"class":78},[68,70714,70715,70718,70720,70722,70724,70727,70729,70731,70733],{"class":70,"line":3223},[68,70716,70717],{"class":78},"    就业城市：\u003C",[68,70719,70622],{"class":52784},[68,70721,16408],{"class":74},[68,70723,1685],{"class":78},[68,70725,70726],{"class":1742},"\"city\"",[68,70728,54968],{"class":74},[68,70730,1685],{"class":78},[68,70732,70726],{"class":1742},[68,70734,52791],{"class":78},[68,70736,70737,70739,70741,70743,70745,70748,70751,70753],{"class":70,"line":3240},[68,70738,56712],{"class":78},[68,70740,70644],{"class":52784},[68,70742,68129],{"class":74},[68,70744,1685],{"class":78},[68,70746,70747],{"class":1742},"\"北京\"",[68,70749,70750],{"class":78},">北京\u003C\u002F",[68,70752,70644],{"class":52784},[68,70754,52791],{"class":78},[68,70756,70757,70759,70761,70763,70765,70768,70771,70773],{"class":70,"line":3245},[68,70758,56712],{"class":78},[68,70760,70644],{"class":52784},[68,70762,68129],{"class":74},[68,70764,1685],{"class":78},[68,70766,70767],{"class":1742},"\"上海\"",[68,70769,70770],{"class":78},">上海\u003C\u002F",[68,70772,70644],{"class":52784},[68,70774,52791],{"class":78},[68,70776,70777,70779,70781,70783,70785,70788,70791,70793],{"class":70,"line":3250},[68,70778,56712],{"class":78},[68,70780,70644],{"class":52784},[68,70782,68129],{"class":74},[68,70784,1685],{"class":78},[68,70786,70787],{"class":1742},"\"广州\"",[68,70789,70790],{"class":78},">广州\u003C\u002F",[68,70792,70644],{"class":52784},[68,70794,52791],{"class":78},[68,70796,70797,70799,70801,70803,70805,70808,70811,70813],{"class":70,"line":3255},[68,70798,56712],{"class":78},[68,70800,70644],{"class":52784},[68,70802,68129],{"class":74},[68,70804,1685],{"class":78},[68,70806,70807],{"class":1742},"\"深圳\"",[68,70809,70810],{"class":78},">深圳\u003C\u002F",[68,70812,70644],{"class":52784},[68,70814,52791],{"class":78},[68,70816,70817,70819,70821,70823,70825,70828,70831,70833],{"class":70,"line":3269},[68,70818,56712],{"class":78},[68,70820,70644],{"class":52784},[68,70822,68129],{"class":74},[68,70824,1685],{"class":78},[68,70826,70827],{"class":1742},"\"曹县\"",[68,70829,70830],{"class":78},">曹县\u003C\u002F",[68,70832,70644],{"class":52784},[68,70834,52791],{"class":78},[68,70836,70837,70839,70841],{"class":70,"line":3274},[68,70838,53258],{"class":78},[68,70840,70622],{"class":52784},[68,70842,52791],{"class":78},[68,70844,70845,70847,70849,70851,70853,70856,70859,70861],{"class":70,"line":4067},[68,70846,52825],{"class":78},[68,70848,55368],{"class":52784},[68,70850,54968],{"class":74},[68,70852,1685],{"class":78},[68,70854,70855],{"class":1742},"\"add\"",[68,70857,70858],{"class":78},">录入\u003C\u002F",[68,70860,55368],{"class":52784},[68,70862,52791],{"class":78},[68,70864,70865,70867,70869],{"class":70,"line":4081},[68,70866,53899],{"class":78},[68,70868,68103],{"class":52784},[68,70870,52791],{"class":78},[68,70872,70873],{"class":70,"line":4089},[68,70874,3890],{"emptyLinePlaceholder":1567},[68,70876,70877,70879,70881,70884,70886],{"class":70,"line":4094},[68,70878,53626],{"class":78},[68,70880,10],{"class":52784},[68,70882,70883],{"class":78},">就业榜\u003C\u002F",[68,70885,10],{"class":52784},[68,70887,52791],{"class":78},[68,70889,70890,70892,70894],{"class":70,"line":4100},[68,70891,53626],{"class":78},[68,70893,128],{"class":52784},[68,70895,52791],{"class":78},[68,70897,70898,70900,70902],{"class":70,"line":4106},[68,70899,52825],{"class":78},[68,70901,131],{"class":52784},[68,70903,52791],{"class":78},[68,70905,70906,70908,70910],{"class":70,"line":4111},[68,70907,56712],{"class":78},[68,70909,134],{"class":52784},[68,70911,52791],{"class":78},[68,70913,70914,70916,70918,70921,70923],{"class":70,"line":9437},[68,70915,56780],{"class":78},[68,70917,137],{"class":52784},[68,70919,70920],{"class":78},">序号\u003C\u002F",[68,70922,137],{"class":52784},[68,70924,52791],{"class":78},[68,70926,70927,70929,70931,70934,70936],{"class":70,"line":9461},[68,70928,56780],{"class":78},[68,70930,137],{"class":52784},[68,70932,70933],{"class":78},">姓名\u003C\u002F",[68,70935,137],{"class":52784},[68,70937,52791],{"class":78},[68,70939,70940,70942,70944,70947,70949],{"class":70,"line":9466},[68,70941,56780],{"class":78},[68,70943,137],{"class":52784},[68,70945,70946],{"class":78},">年龄\u003C\u002F",[68,70948,137],{"class":52784},[68,70950,52791],{"class":78},[68,70952,70953,70955,70957,70960,70962],{"class":70,"line":9472},[68,70954,56780],{"class":78},[68,70956,137],{"class":52784},[68,70958,70959],{"class":78},">性别\u003C\u002F",[68,70961,137],{"class":52784},[68,70963,52791],{"class":78},[68,70965,70966,70968,70970,70973,70975],{"class":70,"line":9499},[68,70967,56780],{"class":78},[68,70969,137],{"class":52784},[68,70971,70972],{"class":78},">薪资\u003C\u002F",[68,70974,137],{"class":52784},[68,70976,52791],{"class":78},[68,70978,70979,70981,70983,70986,70988],{"class":70,"line":9504},[68,70980,56780],{"class":78},[68,70982,137],{"class":52784},[68,70984,70985],{"class":78},">就业城市\u003C\u002F",[68,70987,137],{"class":52784},[68,70989,52791],{"class":78},[68,70991,70992,70994,70996,70999,71001],{"class":70,"line":9510},[68,70993,56780],{"class":78},[68,70995,137],{"class":52784},[68,70997,70998],{"class":78},">操作\u003C\u002F",[68,71000,137],{"class":52784},[68,71002,52791],{"class":78},[68,71004,71005,71007,71009],{"class":70,"line":9522},[68,71006,56885],{"class":78},[68,71008,134],{"class":52784},[68,71010,52791],{"class":78},[68,71012,71013,71015,71017],{"class":70,"line":9534},[68,71014,53258],{"class":78},[68,71016,131],{"class":52784},[68,71018,52791],{"class":78},[68,71020,71021,71023,71025],{"class":70,"line":9546},[68,71022,52825],{"class":78},[68,71024,144],{"class":52784},[68,71026,52791],{"class":78},[68,71028,71029],{"class":70,"line":11204},[68,71030,71031],{"class":302},"      \u003C!-- \n",[68,71033,71034],{"class":70,"line":11229},[68,71035,71036],{"class":302},"        \u003Ctr>\n",[68,71038,71039],{"class":70,"line":11252},[68,71040,71041],{"class":302},"          \u003Ctd>1001\u003C\u002Ftd>\n",[68,71043,71044],{"class":70,"line":11276},[68,71045,71046],{"class":302},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[68,71048,71049],{"class":70,"line":11281},[68,71050,71051],{"class":302},"          \u003Ctd>19\u003C\u002Ftd>\n",[68,71053,71054],{"class":70,"line":11286},[68,71055,71056],{"class":302},"          \u003Ctd>男\u003C\u002Ftd>\n",[68,71058,71059],{"class":70,"line":11291},[68,71060,71061],{"class":302},"          \u003Ctd>15000\u003C\u002Ftd>\n",[68,71063,71064],{"class":70,"line":11300},[68,71065,71066],{"class":302},"          \u003Ctd>上海\u003C\u002Ftd>\n",[68,71068,71069],{"class":70,"line":11305},[68,71070,71071],{"class":302},"          \u003Ctd>\n",[68,71073,71074],{"class":70,"line":11311},[68,71075,71076],{"class":302},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[68,71078,71079],{"class":70,"line":11332},[68,71080,71081],{"class":302},"          \u003C\u002Ftd>\n",[68,71083,71084],{"class":70,"line":11338},[68,71085,71086],{"class":302},"        \u003C\u002Ftr> \n",[68,71088,71089],{"class":70,"line":11352},[68,71090,71091],{"class":302},"        -->\n",[68,71093,71094,71096,71098],{"class":70,"line":11358},[68,71095,53258],{"class":78},[68,71097,144],{"class":52784},[68,71099,52791],{"class":78},[68,71101,71102,71104,71106],{"class":70,"line":11385},[68,71103,53899],{"class":78},[68,71105,128],{"class":52784},[68,71107,52791],{"class":78},[68,71109,71110,71112,71114],{"class":70,"line":11394},[68,71111,53626],{"class":78},[68,71113,53295],{"class":52784},[68,71115,52791],{"class":78},[68,71117,71118],{"class":70,"line":11400},[68,71119,61436],{"class":302},[68,71121,71122,71124,71127,71129,71131,71133,71135,71138],{"class":70,"line":11408},[68,71123,12709],{"class":316},[68,71125,71126],{"class":85}," uname",[68,71128,15052],{"class":316},[68,71130,55877],{"class":78},[68,71132,55880],{"class":74},[68,71134,1640],{"class":78},[68,71136,71137],{"class":1742},"'.uname'",[68,71139,1646],{"class":78},[68,71141,71142,71144,71146,71148,71150,71152,71154,71157],{"class":70,"line":11413},[68,71143,12709],{"class":316},[68,71145,17176],{"class":85},[68,71147,15052],{"class":316},[68,71149,55877],{"class":78},[68,71151,55880],{"class":74},[68,71153,1640],{"class":78},[68,71155,71156],{"class":1742},"'.age'",[68,71158,1646],{"class":78},[68,71160,71161,71163,71166,71168,71170,71172,71174,71177],{"class":70,"line":18091},[68,71162,12709],{"class":316},[68,71164,71165],{"class":85}," gender",[68,71167,15052],{"class":316},[68,71169,55877],{"class":78},[68,71171,55880],{"class":74},[68,71173,1640],{"class":78},[68,71175,71176],{"class":1742},"'.gender'",[68,71178,1646],{"class":78},[68,71180,71181,71183,71186,71188,71190,71192,71194,71197],{"class":70,"line":18097},[68,71182,12709],{"class":316},[68,71184,71185],{"class":85}," salary",[68,71187,15052],{"class":316},[68,71189,55877],{"class":78},[68,71191,55880],{"class":74},[68,71193,1640],{"class":78},[68,71195,71196],{"class":1742},"'.salary'",[68,71198,1646],{"class":78},[68,71200,71201,71203,71206,71208,71210,71212,71214,71217],{"class":70,"line":18120},[68,71202,12709],{"class":316},[68,71204,71205],{"class":85}," city",[68,71207,15052],{"class":316},[68,71209,55877],{"class":78},[68,71211,55880],{"class":74},[68,71213,1640],{"class":78},[68,71215,71216],{"class":1742},"'.city'",[68,71218,1646],{"class":78},[68,71220,71221,71223,71226,71228,71230,71232,71234,71237],{"class":70,"line":18126},[68,71222,12709],{"class":316},[68,71224,71225],{"class":85}," tbody",[68,71227,15052],{"class":316},[68,71229,55877],{"class":78},[68,71231,55880],{"class":74},[68,71233,1640],{"class":78},[68,71235,71236],{"class":1742},"'tbody'",[68,71238,1646],{"class":78},[68,71240,71241],{"class":70,"line":18149},[68,71242,3890],{"emptyLinePlaceholder":1567},[68,71244,71245],{"class":70,"line":18163},[68,71246,71247],{"class":302},"    \u002F\u002F 获取所有带有name属性的元素\n",[68,71249,71250,71252,71255,71257,71259,71261,71263,71266],{"class":70,"line":18183},[68,71251,12709],{"class":316},[68,71253,71254],{"class":85}," items",[68,71256,15052],{"class":316},[68,71258,55877],{"class":78},[68,71260,57159],{"class":74},[68,71262,1640],{"class":78},[68,71264,71265],{"class":1742},"'[name]'",[68,71267,1646],{"class":78},[68,71269,71270],{"class":70,"line":18189},[68,71271,71272],{"class":302},"    \u002F\u002F 声明一个空的数组\n",[68,71274,71275,71277,71279,71281],{"class":70,"line":18200},[68,71276,12709],{"class":316},[68,71278,59173],{"class":85},[68,71280,15052],{"class":316},[68,71282,53320],{"class":78},[68,71284,71285],{"class":70,"line":18223},[68,71286,71287],{"class":302},"    \u002F\u002F 1.录入模块\n",[68,71289,71290],{"class":70,"line":18245},[68,71291,71292],{"class":302},"    \u002F\u002F 1.1这是一个表单提交事件\n",[68,71294,71295,71297,71300,71302,71304,71306,71308,71311],{"class":70,"line":18250},[68,71296,12709],{"class":316},[68,71298,71299],{"class":85}," info",[68,71301,15052],{"class":316},[68,71303,55877],{"class":78},[68,71305,55880],{"class":74},[68,71307,1640],{"class":78},[68,71309,71310],{"class":1742},"'.info'",[68,71312,1646],{"class":78},[68,71314,71315,71318,71320,71322,71325,71327,71329,71331,71333],{"class":70,"line":18256},[68,71316,71317],{"class":78},"    info.",[68,71319,59291],{"class":74},[68,71321,1640],{"class":78},[68,71323,71324],{"class":1742},"'submit'",[68,71326,13923],{"class":78},[68,71328,55930],{"class":316},[68,71330,3149],{"class":78},[68,71332,1712],{"class":6705},[68,71334,13930],{"class":78},[68,71336,71337],{"class":70,"line":18270},[68,71338,71339],{"class":302},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[68,71341,71342,71345,71348],{"class":70,"line":18283},[68,71343,71344],{"class":78},"      e.",[68,71346,71347],{"class":74},"preventDefault",[68,71349,3466],{"class":78},[68,71351,71352],{"class":70,"line":18288},[68,71353,61490],{"class":302},[68,71355,71356],{"class":70,"line":18302},[68,71357,3890],{"emptyLinePlaceholder":1567},[68,71359,71360],{"class":70,"line":18307},[68,71361,71362],{"class":302},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[68,71364,71365],{"class":70,"line":18313},[68,71366,71367],{"class":302},"      \u002F\u002F 先遍历循环\n",[68,71369,71370,71372,71374,71376,71378,71380,71382,71384,71386,71389,71391,71393,71395],{"class":70,"line":18318},[68,71371,53766],{"class":316},[68,71373,3149],{"class":78},[68,71375,53329],{"class":316},[68,71377,10926],{"class":78},[68,71379,1685],{"class":316},[68,71381,5583],{"class":85},[68,71383,10933],{"class":78},[68,71385,2537],{"class":316},[68,71387,71388],{"class":78}," items.",[68,71390,53450],{"class":85},[68,71392,4704],{"class":78},[68,71394,3782],{"class":316},[68,71396,13930],{"class":78},[68,71398,71399,71401,71404,71406,71409],{"class":70,"line":18332},[68,71400,3987],{"class":316},[68,71402,71403],{"class":78}," (items[i].value ",[68,71405,55967],{"class":316},[68,71407,71408],{"class":1742}," ''",[68,71410,13930],{"class":78},[68,71412,71413,71416,71419,71421,71424],{"class":70,"line":18337},[68,71414,71415],{"class":316},"          return",[68,71417,71418],{"class":74}," alert",[68,71420,1640],{"class":78},[68,71422,71423],{"class":1742},"'输入内容不能为空'",[68,71425,1646],{"class":78},[68,71427,71428],{"class":70,"line":18342},[68,71429,4019],{"class":78},[68,71431,71432],{"class":70,"line":18356},[68,71433,53880],{"class":78},[68,71435,71436],{"class":70,"line":18368},[68,71437,3890],{"emptyLinePlaceholder":1567},[68,71439,71440],{"class":70,"line":18373},[68,71441,71442],{"class":302},"      \u002F\u002F 创建新的对象\n",[68,71444,71445,71447,71450,71452],{"class":70,"line":18386},[68,71446,59706],{"class":316},[68,71448,71449],{"class":85}," obj",[68,71451,15052],{"class":316},[68,71453,79],{"class":78},[68,71455,71456,71459,71461,71463,71465],{"class":70,"line":18391},[68,71457,71458],{"class":78},"        stuID: arr.",[68,71460,53450],{"class":85},[68,71462,47050],{"class":316},[68,71464,26604],{"class":85},[68,71466,32950],{"class":78},[68,71468,71469],{"class":70,"line":18396},[68,71470,71471],{"class":78},"        uname: uname.value,\n",[68,71473,71474],{"class":70,"line":18401},[68,71475,71476],{"class":78},"        age: age.value,\n",[68,71478,71479],{"class":70,"line":18414},[68,71480,71481],{"class":78},"        gender: gender.value,\n",[68,71483,71484],{"class":70,"line":18419},[68,71485,71486],{"class":78},"        salary: salary.value,\n",[68,71488,71489],{"class":70,"line":34117},[68,71490,71491],{"class":78},"        city: city.value\n",[68,71493,71494],{"class":70,"line":34123},[68,71495,53880],{"class":78},[68,71497,71498],{"class":70,"line":34129},[68,71499,71500],{"class":302},"      \u002F\u002F console.log(obj);\n",[68,71502,71503],{"class":70,"line":34135},[68,71504,71505],{"class":302},"      \u002F\u002F 追加到数组里面\n",[68,71507,71508,71510,71512],{"class":70,"line":34141},[68,71509,59485],{"class":78},[68,71511,53366],{"class":74},[68,71513,71514],{"class":78},"(obj)\n",[68,71516,71517],{"class":70,"line":34152},[68,71518,71519],{"class":302},"      \u002F\u002F console.log(arr);\n",[68,71521,71522],{"class":70,"line":34158},[68,71523,71524],{"class":302},"      \u002F\u002F 清空表单  reset重置表单\n",[68,71526,71527,71530,71532,71535],{"class":70,"line":34178},[68,71528,71529],{"class":85},"      this",[68,71531,2186],{"class":78},[68,71533,71534],{"class":74},"reset",[68,71536,3466],{"class":78},[68,71538,71539],{"class":70,"line":34184},[68,71540,71541],{"class":302},"      \u002F\u002F 调用渲染函数\n",[68,71543,71544,71547],{"class":70,"line":34195},[68,71545,71546],{"class":74},"      render",[68,71548,3466],{"class":78},[68,71550,71551],{"class":70,"line":34201},[68,71552,34945],{"class":78},[68,71554,71555],{"class":70,"line":34207},[68,71556,71557],{"class":302},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[68,71559,71560,71563,71566],{"class":70,"line":34213},[68,71561,71562],{"class":316},"    function",[68,71564,71565],{"class":74}," render",[68,71567,12341],{"class":78},[68,71569,71570],{"class":70,"line":34219},[68,71571,71572],{"class":302},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[68,71574,71575,71578,71580],{"class":70,"line":34225},[68,71576,71577],{"class":78},"      tbody.innerHTML ",[68,71579,1685],{"class":316},[68,71581,71582],{"class":1742}," ''\n",[68,71584,71585],{"class":70,"line":34231},[68,71586,71587],{"class":302},"      \u002F\u002F 遍历数组\n",[68,71589,71590,71592,71594,71596,71598,71600,71602,71604,71606,71608,71610,71612,71614],{"class":70,"line":34237},[68,71591,53766],{"class":316},[68,71593,3149],{"class":78},[68,71595,53329],{"class":316},[68,71597,10926],{"class":78},[68,71599,1685],{"class":316},[68,71601,5583],{"class":85},[68,71603,10933],{"class":78},[68,71605,2537],{"class":316},[68,71607,53447],{"class":78},[68,71609,53450],{"class":85},[68,71611,4704],{"class":78},[68,71613,3782],{"class":316},[68,71615,13930],{"class":78},[68,71617,71618,71620,71623,71625,71627,71630,71632,71635],{"class":70,"line":34257},[68,71619,62748],{"class":316},[68,71621,71622],{"class":85}," tr",[68,71624,15052],{"class":316},[68,71626,55877],{"class":78},[68,71628,71629],{"class":74},"createElement",[68,71631,1640],{"class":78},[68,71633,71634],{"class":1742},"'tr'",[68,71636,1646],{"class":78},[68,71638,71639,71642,71644],{"class":70,"line":34263},[68,71640,71641],{"class":78},"        tr.innerHTML ",[68,71643,1685],{"class":316},[68,71645,71646],{"class":1742}," `\n",[68,71648,71649,71652,71654,71656,71658,71661,71664],{"class":70,"line":34279},[68,71650,71651],{"class":1742},"        \u003Ctd>${",[68,71653,5370],{"class":78},[68,71655,2517],{"class":1742},[68,71657,2070],{"class":78},[68,71659,71660],{"class":1742},"].",[68,71662,71663],{"class":78},"stuID",[68,71665,71666],{"class":1742},"}\u003C\u002Ftd>\n",[68,71668,71669,71672,71674,71676,71678,71680,71683],{"class":70,"line":34285},[68,71670,71671],{"class":1742},"          \u003Ctd>${",[68,71673,5370],{"class":78},[68,71675,2517],{"class":1742},[68,71677,2070],{"class":78},[68,71679,71660],{"class":1742},[68,71681,71682],{"class":78},"uname",[68,71684,71666],{"class":1742},[68,71686,71687,71689,71691,71693,71695,71697,71700],{"class":70,"line":34299},[68,71688,71671],{"class":1742},[68,71690,5370],{"class":78},[68,71692,2517],{"class":1742},[68,71694,2070],{"class":78},[68,71696,71660],{"class":1742},[68,71698,71699],{"class":78},"age",[68,71701,71666],{"class":1742},[68,71703,71704,71706,71708,71710,71712,71714,71717],{"class":70,"line":34305},[68,71705,71671],{"class":1742},[68,71707,5370],{"class":78},[68,71709,2517],{"class":1742},[68,71711,2070],{"class":78},[68,71713,71660],{"class":1742},[68,71715,71716],{"class":78},"gender",[68,71718,71666],{"class":1742},[68,71720,71721,71723,71725,71727,71729,71731,71734],{"class":70,"line":34320},[68,71722,71671],{"class":1742},[68,71724,5370],{"class":78},[68,71726,2517],{"class":1742},[68,71728,2070],{"class":78},[68,71730,71660],{"class":1742},[68,71732,71733],{"class":78},"salary",[68,71735,71666],{"class":1742},[68,71737,71738,71740,71742,71744,71746,71748,71751],{"class":70,"line":34326},[68,71739,71671],{"class":1742},[68,71741,5370],{"class":78},[68,71743,2517],{"class":1742},[68,71745,2070],{"class":78},[68,71747,71660],{"class":1742},[68,71749,71750],{"class":78},"city",[68,71752,71666],{"class":1742},[68,71754,71755],{"class":70,"line":34335},[68,71756,71071],{"class":1742},[68,71758,71759,71762,71764],{"class":70,"line":34341},[68,71760,71761],{"class":1742},"            \u003Ca href=\"javascript:\" data-id=${",[68,71763,2070],{"class":78},[68,71765,71766],{"class":1742},"}>删除\u003C\u002Fa>\n",[68,71768,71769],{"class":70,"line":34350},[68,71770,71771],{"class":1742},"          \u003C\u002Ftd> \n",[68,71773,71774],{"class":70,"line":34356},[68,71775,71776],{"class":1742},"          `\n",[68,71778,71779],{"class":70,"line":34362},[68,71780,71781],{"class":302},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[68,71783,71784,71787,71790],{"class":70,"line":34371},[68,71785,71786],{"class":78},"        tbody.",[68,71788,71789],{"class":74},"appendChild",[68,71791,71792],{"class":78},"(tr)\n",[68,71794,71795],{"class":70,"line":34377},[68,71796,53880],{"class":78},[68,71798,71799],{"class":70,"line":34388},[68,71800,3677],{"class":78},[68,71802,71803],{"class":70,"line":34394},[68,71804,3890],{"emptyLinePlaceholder":1567},[68,71806,71807],{"class":70,"line":34413},[68,71808,71809],{"class":302},"    \u002F\u002F 3.删除委托\n",[68,71811,71812],{"class":70,"line":34419},[68,71813,71814],{"class":302},"    \u002F\u002F 3.1 事件委托 tbody\n",[68,71816,71817,71820,71822,71824,71826,71828,71830,71832,71834],{"class":70,"line":34430},[68,71818,71819],{"class":78},"    tbody.",[68,71821,59291],{"class":74},[68,71823,1640],{"class":78},[68,71825,59296],{"class":1742},[68,71827,13923],{"class":78},[68,71829,55930],{"class":316},[68,71831,3149],{"class":78},[68,71833,1712],{"class":6705},[68,71835,13930],{"class":78},[68,71837,71838,71840,71842,71844,71846],{"class":70,"line":34436},[68,71839,55961],{"class":316},[68,71841,68512],{"class":78},[68,71843,55967],{"class":316},[68,71845,69734],{"class":1742},[68,71847,13930],{"class":78},[68,71849,71850],{"class":70,"line":34456},[68,71851,71852],{"class":302},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[68,71854,71855],{"class":70,"line":34472},[68,71856,71857],{"class":302},"        \u002F\u002F console.log(e.target.dataset.id);\n",[68,71859,71860],{"class":70,"line":34478},[68,71861,71862],{"class":302},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[68,71864,71865,71868,71870,71873,71875],{"class":70,"line":34492},[68,71866,71867],{"class":78},"        arr.",[68,71869,59488],{"class":74},[68,71871,71872],{"class":78},"(e.target.dataset.id, ",[68,71874,1846],{"class":85},[68,71876,1646],{"class":78},[68,71878,71879],{"class":70,"line":34498},[68,71880,71881],{"class":302},"        \u002F\u002F 重新渲染一次\n",[68,71883,71884,71887],{"class":70,"line":34504},[68,71885,71886],{"class":74},"        render",[68,71888,3466],{"class":78},[68,71890,71891],{"class":70,"line":34515},[68,71892,53880],{"class":78},[68,71894,71895],{"class":70,"line":34521},[68,71896,34945],{"class":78},[68,71898,71899,71901,71903],{"class":70,"line":34527},[68,71900,53899],{"class":78},[68,71902,53295],{"class":52784},[68,71904,52791],{"class":78},[68,71906,71907],{"class":70,"line":34537},[68,71908,3890],{"emptyLinePlaceholder":1567},[68,71910,71911,71913,71915],{"class":70,"line":34543},[68,71912,53267],{"class":78},[68,71914,53282],{"class":52784},[68,71916,52791],{"class":78},[68,71918,71919],{"class":70,"line":34554},[68,71920,3890],{"emptyLinePlaceholder":1567},[68,71922,71923,71925,71927],{"class":70,"line":34560},[68,71924,53267],{"class":78},[68,71926,52119],{"class":52784},[68,71928,52791],{"class":78},[170,71930,71931],{},"样式：",[58,71933,71937],{"className":71934,"code":71935,"language":71936,"meta":63,"style":63},"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",[65,71938,71939,71944,71954,71963,71967,71971,71976,71986,71991,71995,72000,72010,72015,72024,72028,72032,72037,72042,72052,72062,72067,72071,72076,72085,72095,72100,72110,72120,72124,72129,72137,72141,72146,72151,72156,72164,72173,72177,72182,72191,72195,72200,72209,72213,72218,72227,72236,72244,72248,72253,72262,72272,72281,72291,72297,72306,72316,72326,72330,72335,72344,72352,72362,72370,72379,72388,72398,72406,72410,72415,72424],{"__ignoreMap":63},[68,71940,71941],{"class":70,"line":71},[68,71942,71943],{"class":78},"* {\n",[68,71945,71946,71949,71951],{"class":70,"line":82},[68,71947,71948],{"class":52784},"  margin",[68,71950,89],{"class":78},[68,71952,71953],{"class":1742},"0;\n",[68,71955,71956,71959,71961],{"class":70,"line":98},[68,71957,71958],{"class":1742},"  padding",[68,71960,89],{"class":78},[68,71962,71953],{"class":1742},[68,71964,71965],{"class":70,"line":104},[68,71966,101],{"class":78},[68,71968,71969],{"class":70,"line":112},[68,71970,3890],{"emptyLinePlaceholder":1567},[68,71972,71973],{"class":70,"line":124},[68,71974,71975],{"class":1742},"a {\n",[68,71977,71978,71981,71983],{"class":70,"line":1496},[68,71979,71980],{"class":52784},"  text-decoration",[68,71982,89],{"class":78},[68,71984,71985],{"class":1742},"none;\n",[68,71987,71988],{"class":70,"line":1502},[68,71989,71990],{"class":1742},"  color:#721c24;\n",[68,71992,71993],{"class":70,"line":1510},[68,71994,101],{"class":78},[68,71996,71997],{"class":70,"line":1521},[68,71998,71999],{"class":1742},"h1 {\n",[68,72001,72002,72005,72007],{"class":70,"line":3103},[68,72003,72004],{"class":52784},"  text-align",[68,72006,89],{"class":78},[68,72008,72009],{"class":1742},"center;\n",[68,72011,72012],{"class":70,"line":3108},[68,72013,72014],{"class":1742},"  color:#333;\n",[68,72016,72017,72019,72021],{"class":70,"line":3114},[68,72018,71948],{"class":52784},[68,72020,89],{"class":78},[68,72022,72023],{"class":1742},"20px 0;\n",[68,72025,72026],{"class":70,"line":3119},[68,72027,4164],{"class":78},[68,72029,72030],{"class":70,"line":3133},[68,72031,101],{"class":78},[68,72033,72034],{"class":70,"line":3138},[68,72035,72036],{"class":1742},"table {\n",[68,72038,72039],{"class":70,"line":3144},[68,72040,72041],{"class":1742},"  margin:0 auto;\n",[68,72043,72044,72047,72049],{"class":70,"line":3165},[68,72045,72046],{"class":52784},"  width",[68,72048,89],{"class":78},[68,72050,72051],{"class":1742},"800px;\n",[68,72053,72054,72057,72059],{"class":70,"line":3170},[68,72055,72056],{"class":52784},"  border-collapse",[68,72058,89],{"class":78},[68,72060,72061],{"class":1742},"collapse;\n",[68,72063,72064],{"class":70,"line":3184},[68,72065,72066],{"class":1742},"  color:#004085;\n",[68,72068,72069],{"class":70,"line":3189},[68,72070,101],{"class":78},[68,72072,72073],{"class":70,"line":3218},[68,72074,72075],{"class":1742},"th {\n",[68,72077,72078,72080,72082],{"class":70,"line":3223},[68,72079,71958],{"class":52784},[68,72081,89],{"class":78},[68,72083,72084],{"class":1742},"10px;\n",[68,72086,72087,72090,72092],{"class":70,"line":3240},[68,72088,72089],{"class":52784},"  background",[68,72091,89],{"class":78},[68,72093,72094],{"class":302},"#cfe5ff;\n",[68,72096,72097],{"class":70,"line":3245},[68,72098,72099],{"class":78},"  \n",[68,72101,72102,72105,72107],{"class":70,"line":3250},[68,72103,72104],{"class":52784},"  font-size",[68,72106,89],{"class":78},[68,72108,72109],{"class":1742},"20px;\n",[68,72111,72112,72115,72117],{"class":70,"line":3255},[68,72113,72114],{"class":52784},"  font-weight",[68,72116,89],{"class":78},[68,72118,72119],{"class":1742},"400;\n",[68,72121,72122],{"class":70,"line":3269},[68,72123,101],{"class":78},[68,72125,72126],{"class":70,"line":3274},[68,72127,72128],{"class":1742},"td,th {\n",[68,72130,72131,72134],{"class":70,"line":4067},[68,72132,72133],{"class":1742},"  border:1px solid",[68,72135,72136],{"class":302}," #b8daff;\n",[68,72138,72139],{"class":70,"line":4081},[68,72140,101],{"class":78},[68,72142,72143],{"class":70,"line":4089},[68,72144,72145],{"class":1742},"td {\n",[68,72147,72148],{"class":70,"line":4094},[68,72149,72150],{"class":1742},"  padding:10px;\n",[68,72152,72153],{"class":70,"line":4100},[68,72154,72155],{"class":1742},"  color:#666;\n",[68,72157,72158,72160,72162],{"class":70,"line":4106},[68,72159,72004],{"class":52784},[68,72161,89],{"class":78},[68,72163,72009],{"class":1742},[68,72165,72166,72168,72170],{"class":70,"line":4111},[68,72167,72104],{"class":52784},[68,72169,89],{"class":78},[68,72171,72172],{"class":1742},"16px;\n",[68,72174,72175],{"class":70,"line":9437},[68,72176,101],{"class":78},[68,72178,72179],{"class":70,"line":9461},[68,72180,72181],{"class":1742},"tbody tr {\n",[68,72183,72184,72186,72188],{"class":70,"line":9466},[68,72185,72089],{"class":52784},[68,72187,89],{"class":78},[68,72189,72190],{"class":302},"#fff;\n",[68,72192,72193],{"class":70,"line":9472},[68,72194,101],{"class":78},[68,72196,72197],{"class":70,"line":9499},[68,72198,72199],{"class":1742},"tbody tr:hover {\n",[68,72201,72202,72204,72206],{"class":70,"line":9504},[68,72203,72089],{"class":52784},[68,72205,89],{"class":78},[68,72207,72208],{"class":302},"#e1ecf8;\n",[68,72210,72211],{"class":70,"line":9510},[68,72212,101],{"class":78},[68,72214,72215],{"class":70,"line":9522},[68,72216,72217],{"class":1742},".info {\n",[68,72219,72220,72222,72224],{"class":70,"line":9534},[68,72221,72046],{"class":52784},[68,72223,89],{"class":78},[68,72225,72226],{"class":1742},"900px;\n",[68,72228,72229,72231,72233],{"class":70,"line":9546},[68,72230,71948],{"class":52784},[68,72232,89],{"class":78},[68,72234,72235],{"class":1742},"50px auto;\n",[68,72237,72238,72240,72242],{"class":70,"line":11204},[68,72239,72004],{"class":52784},[68,72241,89],{"class":78},[68,72243,72009],{"class":1742},[68,72245,72246],{"class":70,"line":11229},[68,72247,101],{"class":78},[68,72249,72250],{"class":70,"line":11252},[68,72251,72252],{"class":1742},".info  input, .info select {\n",[68,72254,72255,72257,72259],{"class":70,"line":11276},[68,72256,72046],{"class":52784},[68,72258,89],{"class":78},[68,72260,72261],{"class":1742},"80px;\n",[68,72263,72264,72267,72269],{"class":70,"line":11281},[68,72265,72266],{"class":52784},"  height",[68,72268,89],{"class":78},[68,72270,72271],{"class":1742},"27px;\n",[68,72273,72274,72277,72279],{"class":70,"line":11286},[68,72275,72276],{"class":52784},"  outline",[68,72278,89],{"class":78},[68,72280,71985],{"class":1742},[68,72282,72283,72286,72288],{"class":70,"line":11291},[68,72284,72285],{"class":52784},"  border-radius",[68,72287,89],{"class":78},[68,72289,72290],{"class":1742},"5px;\n",[68,72292,72293,72295],{"class":70,"line":11300},[68,72294,72133],{"class":1742},[68,72296,72136],{"class":302},[68,72298,72299,72302,72304],{"class":70,"line":11305},[68,72300,72301],{"class":52784},"  padding-left",[68,72303,89],{"class":78},[68,72305,72290],{"class":1742},[68,72307,72308,72311,72313],{"class":70,"line":11311},[68,72309,72310],{"class":52784},"  box-sizing",[68,72312,89],{"class":78},[68,72314,72315],{"class":1742},"border-box;\n",[68,72317,72318,72321,72323],{"class":70,"line":11332},[68,72319,72320],{"class":52784},"  margin-right",[68,72322,89],{"class":78},[68,72324,72325],{"class":1742},"15px;\n",[68,72327,72328],{"class":70,"line":11338},[68,72329,101],{"class":78},[68,72331,72332],{"class":70,"line":11352},[68,72333,72334],{"class":1742},".info button {\n",[68,72336,72337,72339,72341],{"class":70,"line":11358},[68,72338,72046],{"class":52784},[68,72340,89],{"class":78},[68,72342,72343],{"class":1742},"60px;\n",[68,72345,72346,72348,72350],{"class":70,"line":11385},[68,72347,72266],{"class":52784},[68,72349,89],{"class":78},[68,72351,72271],{"class":1742},[68,72353,72354,72357,72359],{"class":70,"line":11394},[68,72355,72356],{"class":52784},"  background-color",[68,72358,89],{"class":78},[68,72360,72361],{"class":302},"#004085;\n",[68,72363,72364,72366,72368],{"class":70,"line":11400},[68,72365,72276],{"class":52784},[68,72367,89],{"class":78},[68,72369,71985],{"class":1742},[68,72371,72372,72375,72377],{"class":70,"line":11408},[68,72373,72374],{"class":52784},"  border",[68,72376,89],{"class":78},[68,72378,71953],{"class":1742},[68,72380,72381,72384,72386],{"class":70,"line":11413},[68,72382,72383],{"class":52784},"  color",[68,72385,89],{"class":78},[68,72387,72190],{"class":302},[68,72389,72390,72393,72395],{"class":70,"line":18091},[68,72391,72392],{"class":52784},"  cursor",[68,72394,89],{"class":78},[68,72396,72397],{"class":1742},"pointer;\n",[68,72399,72400,72402,72404],{"class":70,"line":18097},[68,72401,72285],{"class":52784},[68,72403,89],{"class":78},[68,72405,72290],{"class":1742},[68,72407,72408],{"class":70,"line":18120},[68,72409,101],{"class":78},[68,72411,72412],{"class":70,"line":18126},[68,72413,72414],{"class":1742},".info .age {\n",[68,72416,72417,72419,72421],{"class":70,"line":18149},[68,72418,72046],{"class":52784},[68,72420,89],{"class":78},[68,72422,72423],{"class":1742},"50px;\n",[68,72425,72426],{"class":70,"line":18163},[68,72427,101],{"class":78},[170,72429,72430],{},"思路：",[170,72432,72433],{},[801,72434],{"alt":63,"src":72435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[170,72437,72438],{},[801,72439],{"alt":63,"src":72440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[170,72442,72443],{},[801,72444],{"alt":63,"src":72445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,72447,72449],{"id":72448},"_3315-重绘回流","3.3.15 重绘回流",[170,72451,72452],{},[801,72453],{"alt":63,"src":72454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[170,72456,72457],{},[801,72458],{"alt":63,"src":72459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[170,72461,72462],{},[801,72463],{"alt":63,"src":72464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72466,72468],{"id":72467},"_34-bom","3.4 BOM",[170,72470,72471],{},[801,72472],{"alt":63,"src":72473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[170,72475,72476],{},"平时写的document省略了window而已，实际上是window.document",[170,72478,72479],{},"函数也是这样，调用的时候实际为window.fn()",[170,72481,72482],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[170,72484,72485],{},"window大部分情况下可以省略",[19,72487,72489],{"id":72488},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[170,72491,72492],{},"只执行一次",[170,72494,72495],{},[801,72496],{"alt":63,"src":72497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[170,72499,72500],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[170,72502,72503],{},[801,72504],{"alt":63,"src":72505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,72507,72509],{"id":72508},"_342-js执行机制","3.4.2 JS执行机制",[170,72511,72512],{},[801,72513],{"alt":63,"src":72514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[170,72516,72517],{},"两个的结果都是1111 3333 2222",[170,72519,72520],{},[801,72521],{"alt":63,"src":72522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[170,72524,72525],{},[801,72526],{"alt":63,"src":72527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[170,72529,72530],{},[801,72531],{"alt":63,"src":72532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[170,72534,72535],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[170,72537,72538],{},"工作流程：",[170,72540,72541],{},[801,72542],{"alt":63,"src":72543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[170,72545,72546],{},[801,72547],{"alt":63,"src":72548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[170,72550,72551],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[170,72553,72554],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,72556,72558],{"id":72557},"_343-location对象","3.4.3 location对象",[170,72560,72561],{},"location对象属于window这个全局对象下的，可以 省略window",[170,72563,72564],{},[801,72565],{"alt":63,"src":72566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[170,72568,72569],{},"href可以跳转页面",[263,72571,72572],{},[27,72573,72574],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[170,72576,72577],{},"search得到提交信息之后网站后边的地址",[170,72579,72580],{},[801,72581],{"alt":63,"src":72582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[170,72584,72585],{},[801,72586],{"alt":63,"src":72587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[263,72589,72590],{"start":82},[27,72591,72592],{},"hash:这个获取单页面应用#后边的地址",[170,72594,72595],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[170,72597,72598],{},[801,72599],{"alt":63,"src":72600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[58,72602,72604],{"className":54549,"code":72603,"language":54551,"meta":63,"style":63},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[65,72605,72606,72626,72646],{"__ignoreMap":63},[68,72607,72608,72610,72612,72614,72616,72619,72622,72624],{"class":70,"line":71},[68,72609,53626],{"class":78},[68,72611,1867],{"class":52784},[68,72613,62535],{"class":74},[68,72615,1685],{"class":78},[68,72617,72618],{"class":1742},"\"#\u002Fmy\"",[68,72620,72621],{"class":78},">我的\u003C\u002F",[68,72623,1867],{"class":52784},[68,72625,52791],{"class":78},[68,72627,72628,72630,72632,72634,72636,72639,72642,72644],{"class":70,"line":82},[68,72629,53626],{"class":78},[68,72631,1867],{"class":52784},[68,72633,62535],{"class":74},[68,72635,1685],{"class":78},[68,72637,72638],{"class":1742},"\"#\u002Ffriend\"",[68,72640,72641],{"class":78},">关注\u003C\u002F",[68,72643,1867],{"class":52784},[68,72645,52791],{"class":78},[68,72647,72648,72650,72652,72654,72656,72659,72662,72664],{"class":70,"line":98},[68,72649,53626],{"class":78},[68,72651,1867],{"class":52784},[68,72653,62535],{"class":74},[68,72655,1685],{"class":78},[68,72657,72658],{"class":1742},"\"#\u002Fdownload\"",[68,72660,72661],{"class":78},">下载\u003C\u002F",[68,72663,1867],{"class":52784},[68,72665,52791],{"class":78},[170,72667,72668],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[263,72670,72671],{"start":98},[27,72672,72673,72674,72676,72677,72679],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[546,72675],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[546,72678],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,72681,72683],{"id":72682},"_345-navigator对象","3.4.5 navigator对象",[170,72685,72686],{},[801,72687],{"alt":63,"src":72688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[58,72690,72694],{"className":72691,"code":72692,"language":72693,"meta":63,"style":63},"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",[65,72695,72696,72701,72712,72724,72729,72780,72821,72826,72839,72851,72856],{"__ignoreMap":63},[68,72697,72698],{"class":70,"line":71},[68,72699,72700],{"class":302},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[68,72702,72703,72705,72707,72709],{"class":70,"line":82},[68,72704,1855],{"class":316},[68,72706,1640],{"class":78},[68,72708,55930],{"class":316},[68,72710,72711],{"class":78}," () { \n",[68,72713,72714,72716,72719,72721],{"class":70,"line":98},[68,72715,8281],{"class":316},[68,72717,72718],{"class":85}," userAgent",[68,72720,15052],{"class":316},[68,72722,72723],{"class":78}," navigator.userAgent \n",[68,72725,72726],{"class":70,"line":104},[68,72727,72728],{"class":302},"\u002F\u002F 验证是否为Android或iPhone \n",[68,72730,72731,72733,72736,72738,72741,72744,72746,72748,72751,72753,72756,72760,72762,72764,72766,72769,72771,72773,72775,72777],{"class":70,"line":112},[68,72732,8281],{"class":316},[68,72734,72735],{"class":85}," android",[68,72737,15052],{"class":316},[68,72739,72740],{"class":78}," userAgent.",[68,72742,72743],{"class":74},"match",[68,72745,1640],{"class":78},[68,72747,2212],{"class":1742},[68,72749,72750],{"class":49461},"(Android);",[68,72752,2613],{"class":316},[68,72754,72755],{"class":85},"[\\s",[68,72757,72759],{"class":72758},"snhLl","\\\u002F",[68,72761,2567],{"class":85},[68,72763,2109],{"class":316},[68,72765,1640],{"class":49461},[68,72767,72768],{"class":85},"[\\d.]",[68,72770,2109],{"class":316},[68,72772,2058],{"class":49461},[68,72774,2613],{"class":316},[68,72776,2212],{"class":1742},[68,72778,72779],{"class":78},") \n",[68,72781,72782,72784,72787,72789,72791,72793,72795,72797,72800,72803,72806,72808,72810,72813,72815,72817,72819],{"class":70,"line":124},[68,72783,8281],{"class":316},[68,72785,72786],{"class":85}," iphone",[68,72788,15052],{"class":316},[68,72790,72740],{"class":78},[68,72792,72743],{"class":74},[68,72794,1640],{"class":78},[68,72796,2212],{"class":1742},[68,72798,72799],{"class":49461},"(iPhone",[68,72801,72802],{"class":85},"\\s",[68,72804,72805],{"class":49461},"OS)",[68,72807,72802],{"class":85},[68,72809,1640],{"class":49461},[68,72811,72812],{"class":85},"[\\d_]",[68,72814,2109],{"class":316},[68,72816,2058],{"class":49461},[68,72818,2212],{"class":1742},[68,72820,72779],{"class":78},[68,72822,72823],{"class":70,"line":1496},[68,72824,72825],{"class":302},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[68,72827,72828,72830,72833,72836],{"class":70,"line":1502},[68,72829,3023],{"class":316},[68,72831,72832],{"class":78}," (android ",[68,72834,72835],{"class":316},"||",[68,72837,72838],{"class":78}," iphone) { \n",[68,72840,72841,72844,72846,72849],{"class":70,"line":1510},[68,72842,72843],{"class":78},"location.href ",[68,72845,1685],{"class":316},[68,72847,72848],{"class":1742}," 'http:\u002F\u002Fm.itcast.cn'",[68,72850,4164],{"class":78},[68,72852,72853],{"class":70,"line":1521},[68,72854,72855],{"class":78},"} \n",[68,72857,72858],{"class":70,"line":3103},[68,72859,72860],{"class":78},"})()\n",[19,72862,72864],{"id":72863},"_346-histroy对象","3.4.6 histroy对象",[170,72866,72867],{},[801,72868],{"alt":63,"src":72869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[170,72871,72872],{},"浏览器地址的前进与后退!!!",[170,72874,72875],{},"history.back() 等效于 history.go(-1)",[170,72877,72878],{},"history.forward() 等效于 history.go(1)",[14,72880,72882],{"id":72881},"_35-本地存储","3.5 本地存储",[263,72884,72885,72888,72891],{},[27,72886,72887],{},"数据存储在用户浏览器中",[27,72889,72890],{},"设置、读取方便、甚至页面刷新不丢失数据",[27,72892,72893],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,72895,72897],{"id":72896},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[170,72899,72900],{},"只能存储字符串",[170,72902,72903],{},[801,72904],{"alt":63,"src":72905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[170,72907,72908],{},[801,72909],{"alt":63,"src":72910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[170,72912,72913],{},"键值对要加引号,不然就会当变量来看了",[170,72915,72916],{},"localStorage.setItem('uname', 'pink')",[170,72918,72919],{},"刷新之后信息不再丢失",[170,72921,72922],{},"操作key,value会跟着变",[170,72924,72925],{},"删除只删除键就可以,即名字",[170,72927,72916],{},[170,72929,72930],{},"改:",[170,72932,72933],{},"localStorage.setItem('uname','red')",[170,72935,72936],{},"有这个键就是改,没有这个键就是改",[170,72938,72939],{},[801,72940],{"alt":63,"src":72941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[170,72943,72944],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[170,72946,72947],{},[801,72948],{"alt":63,"src":72949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[170,72951,72952],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,72954,72956],{"id":72955},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[170,72958,72959],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[170,72961,72962],{},"特性:",[263,72964,72965,72968,72971,72974],{},[27,72966,72967],{},"生命周期为关闭浏览器窗口",[27,72969,72970],{},"在同一个窗口(页面)下数据可以共享",[27,72972,72973],{},"以键值对的形式存储使用",[27,72975,72976],{},"用法跟localStorage 基本相同",[19,72978,72980],{"id":72979},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[170,72982,72983],{},"本地只能存储字符串,无法直接存储复杂数据类型",[58,72985,72987],{"className":54549,"code":72986,"language":54551,"meta":63,"style":63},"\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",[65,72988,72989,72997,73002,73007,73012,73017,73021,73026,73031],{"__ignoreMap":63},[68,72990,72991,72993,72995],{"class":70,"line":71},[68,72992,2537],{"class":78},[68,72994,53295],{"class":52784},[68,72996,52791],{"class":78},[68,72998,72999],{"class":70,"line":82},[68,73000,73001],{"class":78},"    const obj = {\n",[68,73003,73004],{"class":70,"line":98},[68,73005,73006],{"class":78},"      uname: 'pink老师',\n",[68,73008,73009],{"class":70,"line":104},[68,73010,73011],{"class":78},"      age: 18,\n",[68,73013,73014],{"class":70,"line":112},[68,73015,73016],{"class":78},"      gender: '女'\n",[68,73018,73019],{"class":70,"line":124},[68,73020,3677],{"class":78},[68,73022,73023],{"class":70,"line":1496},[68,73024,73025],{"class":78},"    \u002F\u002F 存储复杂数据类型\n",[68,73027,73028],{"class":70,"line":1502},[68,73029,73030],{"class":78},"    localStorage.setItem('obj', obj)\n",[68,73032,73033,73035,73037],{"class":70,"line":1510},[68,73034,53899],{"class":78},[68,73036,53295],{"class":52784},[68,73038,52791],{"class":78},[170,73040,73041],{},[801,73042],{"alt":63,"src":73043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[170,73045,73046],{},"如果获取一下数据:",[170,73048,73049],{},"log(localStorage.getItem('obj'))",[170,73051,73052],{},[801,73053],{"alt":63,"src":73054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[170,73056,73057],{},"发现直接存对象是使用不了的!!!",[245,73059,73061],{"id":73060},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[170,73063,73064],{},[801,73065],{"alt":63,"src":73066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[58,73068,73070],{"className":52117,"code":73069,"language":52119,"meta":63,"style":63},"\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",[65,73071,73072,73080,73090,73100,73109,73117,73121,73125,73151,73170,73178,73182,73187,73192],{"__ignoreMap":63},[68,73073,73074,73076,73078],{"class":70,"line":71},[68,73075,2537],{"class":78},[68,73077,53295],{"class":52784},[68,73079,52791],{"class":78},[68,73081,73082,73084,73086,73088],{"class":70,"line":82},[68,73083,12709],{"class":316},[68,73085,71449],{"class":85},[68,73087,15052],{"class":316},[68,73089,79],{"class":78},[68,73091,73092,73095,73098],{"class":70,"line":98},[68,73093,73094],{"class":78},"      uname: ",[68,73096,73097],{"class":1742},"'pink老师'",[68,73099,32950],{"class":78},[68,73101,73102,73105,73107],{"class":70,"line":104},[68,73103,73104],{"class":78},"      age: ",[68,73106,2278],{"class":85},[68,73108,32950],{"class":78},[68,73110,73111,73114],{"class":70,"line":112},[68,73112,73113],{"class":78},"      gender: ",[68,73115,73116],{"class":1742},"'女'\n",[68,73118,73119],{"class":70,"line":124},[68,73120,3677],{"class":78},[68,73122,73123],{"class":70,"line":1496},[68,73124,73025],{"class":302},[68,73126,73127,73130,73133,73135,73138,73140,73143,73145,73148],{"class":70,"line":1502},[68,73128,73129],{"class":78},"  localStorage.",[68,73131,73132],{"class":74},"setItem",[68,73134,1640],{"class":78},[68,73136,73137],{"class":1742},"'obj'",[68,73139,13923],{"class":78},[68,73141,73142],{"class":85},"JSON",[68,73144,2186],{"class":78},[68,73146,73147],{"class":74},"stringify",[68,73149,73150],{"class":78},"(obj))\n",[68,73152,73153,73156,73158,73161,73164,73166,73168],{"class":70,"line":1510},[68,73154,73155],{"class":78},"  console.",[68,73157,59725],{"class":74},[68,73159,73160],{"class":78},"(localStorage.",[68,73162,73163],{"class":74},"getItem",[68,73165,1640],{"class":78},[68,73167,73137],{"class":1742},[68,73169,31981],{"class":78},[68,73171,73172,73174,73176],{"class":70,"line":1521},[68,73173,53899],{"class":78},[68,73175,53295],{"class":52784},[68,73177,52791],{"class":78},[68,73179,73180],{"class":70,"line":3103},[68,73181,72099],{"class":78},[68,73183,73184],{"class":70,"line":3108},[68,73185,73186],{"class":78},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[68,73188,73189],{"class":70,"line":3114},[68,73190,73191],{"class":78},"  类型是字符串的\n",[68,73193,73194],{"class":70,"line":3119},[68,73195,73196],{"class":78},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[245,73198,73200],{"id":73199},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[170,73202,73203],{},[801,73204],{"alt":63,"src":73205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[170,73207,73208],{},[801,73209],{"alt":63,"src":73210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[58,73212,73214],{"className":54549,"code":73213,"language":54551,"meta":63,"style":63},"  \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",[65,73215,73216,73224,73228,73232,73236,73240,73244,73249,73254,73259,73264,73269,73274,73279,73284],{"__ignoreMap":63},[68,73217,73218,73220,73222],{"class":70,"line":71},[68,73219,53626],{"class":78},[68,73221,53295],{"class":52784},[68,73223,52791],{"class":78},[68,73225,73226],{"class":70,"line":82},[68,73227,73001],{"class":78},[68,73229,73230],{"class":70,"line":98},[68,73231,73006],{"class":78},[68,73233,73234],{"class":70,"line":104},[68,73235,73011],{"class":78},[68,73237,73238],{"class":70,"line":112},[68,73239,73016],{"class":78},[68,73241,73242],{"class":70,"line":124},[68,73243,3677],{"class":78},[68,73245,73246],{"class":70,"line":1496},[68,73247,73248],{"class":78},"    \u002F\u002F 1.存储复杂数据类型\n",[68,73250,73251],{"class":70,"line":1502},[68,73252,73253],{"class":78},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[68,73255,73256],{"class":70,"line":1510},[68,73257,73258],{"class":78},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[68,73260,73261],{"class":70,"line":1521},[68,73262,73263],{"class":78},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[68,73265,73266],{"class":70,"line":3103},[68,73267,73268],{"class":78},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[68,73270,73271],{"class":70,"line":3108},[68,73272,73273],{"class":78},"    \u002F\u002F 取\n",[68,73275,73276],{"class":70,"line":3114},[68,73277,73278],{"class":78},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[68,73280,73281],{"class":70,"line":3119},[68,73282,73283],{"class":78},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[68,73285,73286,73288,73290],{"class":70,"line":3133},[68,73287,53899],{"class":78},[68,73289,53295],{"class":52784},[68,73291,52791],{"class":78},[170,73293,73294],{},[801,73295],{"alt":63,"src":73296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,73298,73300],{"id":73299},"_356-数组map方法","3.5.6 数组map方法",[170,73302,73303],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[170,73305,73306],{},[801,73307],{"alt":63,"src":73308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[170,73310,73311],{},[801,73312],{"alt":63,"src":73313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[170,73315,73316,73319],{},[268,73317,73318],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[170,73321,73322],{},"map有返回值，但是forEach没有返回值",[170,73324,73325],{},"map是个方法。用的时候要加 ()",[170,73327,73328],{},"map返回的是一个数组",[19,73330,73332],{"id":73331},"_357-数组中join方法","3.5.7 数组中join方法",[170,73334,73335],{},[801,73336],{"alt":63,"src":73337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[170,73339,73340],{},"类似于python中拼接字符串一样！",[263,73342,73343,73346,73349],{},[27,73344,73345],{},"小括号为空则逗号分开",[27,73347,73348],{},"小括号为空字符串 ''，则元素之间没有分隔符",[27,73350,73351],{},"小括号用啥符号就用进行分割",[19,73353,73355],{"id":73354},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[263,73357,73358,73361,73364,73367,73370],{},[27,73359,73360],{},"记住本地时间获取快速方式：new Date().toDateString()",[27,73362,73363],{},"尽量减少DOM操作，用好map+join的渲染方式",[27,73365,73366],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[27,73368,73369],{},"return可以实现函数的结束",[27,73371,73372],{},"禁止跳转是 preventDefault() 不要忘记",[58,73374,73376],{"className":52117,"code":73375,"language":52119,"meta":63,"style":63},"\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",[65,73377,73378,73388,73402,73406,73414,73428,73448,73460,73468,73474,73484,73494,73498,73502,73508,73518,73530,73534,73538,73545,73557,73571,73581,73585,73589,73596,73603,73610,73622,73634,73644,73656,73660,73664,73671,73678,73690,73702,73712,73724,73754,73758,73762,73769,73781,73793,73817,73827,73837,73841,73845,73853,73864,73876,73888,73900,73917,73929,73941,73945,73949,73956,73968,73980,73992,74002,74020,74033,74045,74069,74080,74084,74088,74096,74106,74110,74114,74120,74132,74143,74153,74157,74161,74167,74189,74193,74197,74203,74209,74221,74231,74243,74273,74286,74303,74307,74311,74322,74344,74354,74358,74362,74375,74385,74397,74409,74421,74433,74443,74453,74463,74474,74487,74491,74499,74507,74511,74519,74532,74552,74585,74618,74651,74677,74695,74713,74721,74747,74765,74783,74801,74819,74837,74845,74853,74871,74879,74908,74916,74924,74932,74945,74957,74969,74981,74993,75005,75018,75030,75038,75046,75054,75059,75064,75068,75072,75076,75080,75084,75088,75093,75098,75103,75108,75116,75124,75132,75137,75142,75147,75152,75157,75162,75167,75172,75177,75182,75187,75192,75197,75202,75206,75211,75216,75226,75235,75239,75244,75253,75269,75311,75351,75390,75455,75463,75467,75472,75490,75498,75503,75508,75538,75544,75549,75562,75574,75586,75598,75610,75622,75634,75638,75648,75652,75657,75662,75666,75675,75679,75684,75689,75708,75713,75733,75737,75742,75746,75751,75769,75787,75805,75824,75843,75862,75867,75873,75894,75900,75909,75915,75921,75927,75954,75967,75972,75982,75988,75994,76000,76006,76011,76017,76023,76029,76035,76068,76073,76078,76083,76088,76094,76100,76106,76117,76122,76128,76135,76149,76155,76179,76184,76189,76195,76201,76222,76228,76241,76247,76253,76259,76265,76270,76276,76282,76288,76306,76320,76326,76334,76340,76362,76367,76372,76377,76382,76387,76396,76405,76410],{"__ignoreMap":63},[68,73379,73380,73382,73384,73386],{"class":70,"line":71},[68,73381,52781],{"class":78},[68,73383,52785],{"class":52784},[68,73385,52788],{"class":74},[68,73387,52791],{"class":78},[68,73389,73390,73392,73394,73396,73398,73400],{"class":70,"line":82},[68,73391,2537],{"class":78},[68,73393,52119],{"class":52784},[68,73395,52800],{"class":74},[68,73397,1685],{"class":78},[68,73399,52805],{"class":1742},[68,73401,52791],{"class":78},[68,73403,73404],{"class":70,"line":98},[68,73405,3890],{"emptyLinePlaceholder":1567},[68,73407,73408,73410,73412],{"class":70,"line":104},[68,73409,2537],{"class":78},[68,73411,52818],{"class":52784},[68,73413,52791],{"class":78},[68,73415,73416,73418,73420,73422,73424,73426],{"class":70,"line":112},[68,73417,53626],{"class":78},[68,73419,52828],{"class":52784},[68,73421,52831],{"class":74},[68,73423,1685],{"class":78},[68,73425,52836],{"class":1742},[68,73427,52791],{"class":78},[68,73429,73430,73432,73434,73436,73438,73440,73442,73444,73446],{"class":70,"line":124},[68,73431,53626],{"class":78},[68,73433,52828],{"class":52784},[68,73435,16408],{"class":74},[68,73437,1685],{"class":78},[68,73439,52875],{"class":1742},[68,73441,52855],{"class":74},[68,73443,1685],{"class":78},[68,73445,52882],{"class":1742},[68,73447,52791],{"class":78},[68,73449,73450,73452,73454,73456,73458],{"class":70,"line":1496},[68,73451,53626],{"class":78},[68,73453,52891],{"class":52784},[68,73455,52894],{"class":78},[68,73457,52891],{"class":52784},[68,73459,52791],{"class":78},[68,73461,73462,73464,73466],{"class":70,"line":1502},[68,73463,53626],{"class":78},[68,73465,1553],{"class":52784},[68,73467,52791],{"class":78},[68,73469,73470,73472],{"class":70,"line":1510},[68,73471,7892],{"class":52784},[68,73473,79],{"class":78},[68,73475,73476,73478,73480,73482],{"class":70,"line":1521},[68,73477,56176],{"class":85},[68,73479,89],{"class":78},[68,73481,1248],{"class":85},[68,73483,95],{"class":78},[68,73485,73486,73488,73490,73492],{"class":70,"line":3103},[68,73487,56187],{"class":85},[68,73489,89],{"class":78},[68,73491,1248],{"class":85},[68,73493,95],{"class":78},[68,73495,73496],{"class":70,"line":3108},[68,73497,3677],{"class":78},[68,73499,73500],{"class":70,"line":3114},[68,73501,3890],{"emptyLinePlaceholder":1567},[68,73503,73504,73506],{"class":70,"line":3119},[68,73505,58757],{"class":52784},[68,73507,79],{"class":78},[68,73509,73510,73512,73514,73516],{"class":70,"line":3133},[68,73511,58764],{"class":85},[68,73513,89],{"class":78},[68,73515,53074],{"class":85},[68,73517,95],{"class":78},[68,73519,73520,73522,73524,73526,73528],{"class":70,"line":3138},[68,73521,63555],{"class":85},[68,73523,89],{"class":78},[68,73525,333],{"class":85},[68,73527,317],{"class":316},[68,73529,95],{"class":78},[68,73531,73532],{"class":70,"line":3144},[68,73533,3677],{"class":78},[68,73535,73536],{"class":70,"line":3165},[68,73537,3890],{"emptyLinePlaceholder":1567},[68,73539,73540,73543],{"class":70,"line":3170},[68,73541,73542],{"class":74},"    .info",[68,73544,79],{"class":78},[68,73546,73547,73549,73551,73553,73555],{"class":70,"line":3184},[68,73548,56250],{"class":85},[68,73550,89],{"class":78},[68,73552,52972],{"class":85},[68,73554,317],{"class":316},[68,73556,95],{"class":78},[68,73558,73559,73561,73563,73565,73567,73569],{"class":70,"line":3189},[68,73560,56187],{"class":85},[68,73562,89],{"class":78},[68,73564,313],{"class":85},[68,73566,317],{"class":316},[68,73568,53038],{"class":85},[68,73570,95],{"class":78},[68,73572,73573,73575,73577,73579],{"class":70,"line":3218},[68,73574,58764],{"class":85},[68,73576,89],{"class":78},[68,73578,53074],{"class":85},[68,73580,95],{"class":78},[68,73582,73583],{"class":70,"line":3223},[68,73584,3677],{"class":78},[68,73586,73587],{"class":70,"line":3240},[68,73588,3890],{"emptyLinePlaceholder":1567},[68,73590,73591,73594],{"class":70,"line":3245},[68,73592,73593],{"class":74},"    .uname",[68,73595,32950],{"class":78},[68,73597,73598,73601],{"class":70,"line":3250},[68,73599,73600],{"class":74},"    .age",[68,73602,32950],{"class":78},[68,73604,73605,73608],{"class":70,"line":3255},[68,73606,73607],{"class":74},"    .salary",[68,73609,79],{"class":78},[68,73611,73612,73614,73616,73618,73620],{"class":70,"line":3269},[68,73613,56250],{"class":85},[68,73615,89],{"class":78},[68,73617,1940],{"class":85},[68,73619,317],{"class":316},[68,73621,95],{"class":78},[68,73623,73624,73626,73628,73630,73632],{"class":70,"line":3274},[68,73625,56264],{"class":85},[68,73627,89],{"class":78},[68,73629,333],{"class":85},[68,73631,317],{"class":316},[68,73633,95],{"class":78},[68,73635,73636,73638,73640,73642],{"class":70,"line":4067},[68,73637,63258],{"class":85},[68,73639,89],{"class":78},[68,73641,151],{"class":85},[68,73643,95],{"class":78},[68,73645,73646,73648,73650,73652,73654],{"class":70,"line":4081},[68,73647,63228],{"class":85},[68,73649,89],{"class":78},[68,73651,2203],{"class":85},[68,73653,317],{"class":316},[68,73655,95],{"class":78},[68,73657,73658],{"class":70,"line":4089},[68,73659,3677],{"class":78},[68,73661,73662],{"class":70,"line":4094},[68,73663,3890],{"emptyLinePlaceholder":1567},[68,73665,73666,73669],{"class":70,"line":4100},[68,73667,73668],{"class":74},"    .gender",[68,73670,32950],{"class":78},[68,73672,73673,73676],{"class":70,"line":4106},[68,73674,73675],{"class":74},"    .city",[68,73677,79],{"class":78},[68,73679,73680,73682,73684,73686,73688],{"class":70,"line":4111},[68,73681,56250],{"class":85},[68,73683,89],{"class":78},[68,73685,1940],{"class":85},[68,73687,317],{"class":316},[68,73689,95],{"class":78},[68,73691,73692,73694,73696,73698,73700],{"class":70,"line":9437},[68,73693,56264],{"class":85},[68,73695,89],{"class":78},[68,73697,2452],{"class":85},[68,73699,317],{"class":316},[68,73701,95],{"class":78},[68,73703,73704,73706,73708,73710],{"class":70,"line":9461},[68,73705,63258],{"class":85},[68,73707,89],{"class":78},[68,73709,151],{"class":85},[68,73711,95],{"class":78},[68,73713,73714,73716,73718,73720,73722],{"class":70,"line":9466},[68,73715,63228],{"class":85},[68,73717,89],{"class":78},[68,73719,2203],{"class":85},[68,73721,317],{"class":316},[68,73723,95],{"class":78},[68,73725,73726,73728,73730,73732,73734,73736,73739,73741,73743,73745,73748,73750,73752],{"class":70,"line":9472},[68,73727,63455],{"class":85},[68,73729,89],{"class":78},[68,73731,1846],{"class":85},[68,73733,317],{"class":316},[68,73735,53003],{"class":85},[68,73737,73738],{"class":85}," rgb",[68,73740,1640],{"class":78},[68,73742,3213],{"class":85},[68,73744,13923],{"class":78},[68,73746,73747],{"class":85},"197",[68,73749,13923],{"class":78},[68,73751,73747],{"class":85},[68,73753,4209],{"class":78},[68,73755,73756],{"class":70,"line":9499},[68,73757,3677],{"class":78},[68,73759,73760],{"class":70,"line":9504},[68,73761,3890],{"emptyLinePlaceholder":1567},[68,73763,73764,73767],{"class":70,"line":9510},[68,73765,73766],{"class":52784},"    button",[68,73768,79],{"class":78},[68,73770,73771,73773,73775,73777,73779],{"class":70,"line":9522},[68,73772,56264],{"class":85},[68,73774,89],{"class":78},[68,73776,2452],{"class":85},[68,73778,317],{"class":316},[68,73780,95],{"class":78},[68,73782,73783,73785,73787,73789,73791],{"class":70,"line":9534},[68,73784,56250],{"class":85},[68,73786,89],{"class":78},[68,73788,2112],{"class":85},[68,73790,317],{"class":316},[68,73792,95],{"class":78},[68,73794,73795,73797,73799,73802,73804,73806,73808,73811,73813,73815],{"class":70,"line":9546},[68,73796,56362],{"class":85},[68,73798,89],{"class":78},[68,73800,73801],{"class":85},"rgb",[68,73803,1640],{"class":78},[68,73805,2596],{"class":85},[68,73807,13923],{"class":78},[68,73809,73810],{"class":85},"187",[68,73812,13923],{"class":78},[68,73814,1928],{"class":85},[68,73816,4209],{"class":78},[68,73818,73819,73821,73823,73825],{"class":70,"line":11204},[68,73820,58894],{"class":85},[68,73822,89],{"class":78},[68,73824,62320],{"class":85},[68,73826,95],{"class":78},[68,73828,73829,73831,73833,73835],{"class":70,"line":11229},[68,73830,63455],{"class":85},[68,73832,89],{"class":78},[68,73834,1248],{"class":85},[68,73836,95],{"class":78},[68,73838,73839],{"class":70,"line":11252},[68,73840,3677],{"class":78},[68,73842,73843],{"class":70,"line":11276},[68,73844,3890],{"emptyLinePlaceholder":1567},[68,73846,73847,73849,73851],{"class":70,"line":11281},[68,73848,73766],{"class":52784},[68,73850,53170],{"class":52784},[68,73852,79],{"class":78},[68,73854,73855,73857,73859,73862],{"class":70,"line":11286},[68,73856,56487],{"class":85},[68,73858,89],{"class":78},[68,73860,73861],{"class":85},"inline-block",[68,73863,95],{"class":78},[68,73865,73866,73868,73870,73872,73874],{"class":70,"line":11291},[68,73867,56250],{"class":85},[68,73869,89],{"class":78},[68,73871,313],{"class":85},[68,73873,317],{"class":316},[68,73875,95],{"class":78},[68,73877,73878,73880,73882,73884,73886],{"class":70,"line":11300},[68,73879,56264],{"class":85},[68,73881,89],{"class":78},[68,73883,313],{"class":85},[68,73885,317],{"class":316},[68,73887,95],{"class":78},[68,73889,73890,73892,73894,73896,73898],{"class":70,"line":11305},[68,73891,58837],{"class":85},[68,73893,89],{"class":78},[68,73895,2100],{"class":85},[68,73897,317],{"class":316},[68,73899,95],{"class":78},[68,73901,73902,73904,73906,73908,73910,73912,73915],{"class":70,"line":11311},[68,73903,63455],{"class":85},[68,73905,89],{"class":78},[68,73907,1846],{"class":85},[68,73909,317],{"class":316},[68,73911,53003],{"class":85},[68,73913,73914],{"class":85}," #fff",[68,73916,95],{"class":78},[68,73918,73919,73921,73923,73925,73927],{"class":70,"line":11332},[68,73920,56612],{"class":85},[68,73922,89],{"class":78},[68,73924,1948],{"class":85},[68,73926,317],{"class":316},[68,73928,95],{"class":78},[68,73930,73931,73933,73935,73937,73939],{"class":70,"line":11338},[68,73932,63228],{"class":85},[68,73934,89],{"class":78},[68,73936,1846],{"class":85},[68,73938,317],{"class":316},[68,73940,95],{"class":78},[68,73942,73943],{"class":70,"line":11352},[68,73944,3677],{"class":78},[68,73946,73947],{"class":70,"line":11358},[68,73948,3890],{"emptyLinePlaceholder":1567},[68,73950,73951,73954],{"class":70,"line":11385},[68,73952,73953],{"class":74},"    .total",[68,73955,79],{"class":78},[68,73957,73958,73960,73962,73964,73966],{"class":70,"line":11394},[68,73959,56250],{"class":85},[68,73961,89],{"class":78},[68,73963,63107],{"class":85},[68,73965,317],{"class":316},[68,73967,95],{"class":78},[68,73969,73970,73972,73974,73976,73978],{"class":70,"line":11400},[68,73971,56264],{"class":85},[68,73973,89],{"class":78},[68,73975,2030],{"class":85},[68,73977,317],{"class":316},[68,73979,95],{"class":78},[68,73981,73982,73984,73986,73988,73990],{"class":70,"line":11408},[68,73983,58837],{"class":85},[68,73985,89],{"class":78},[68,73987,2030],{"class":85},[68,73989,317],{"class":316},[68,73991,95],{"class":78},[68,73993,73994,73996,73998,74000],{"class":70,"line":11413},[68,73995,58764],{"class":85},[68,73997,89],{"class":78},[68,73999,119],{"class":85},[68,74001,95],{"class":78},[68,74003,74004,74006,74008,74010,74012,74014,74016,74018],{"class":70,"line":18091},[68,74005,56187],{"class":85},[68,74007,89],{"class":78},[68,74009,2030],{"class":85},[68,74011,317],{"class":316},[68,74013,53038],{"class":85},[68,74015,3528],{"class":85},[68,74017,317],{"class":316},[68,74019,95],{"class":78},[68,74021,74022,74025,74027,74029,74031],{"class":70,"line":18097},[68,74023,74024],{"class":85},"      padding-right",[68,74026,89],{"class":78},[68,74028,313],{"class":85},[68,74030,317],{"class":316},[68,74032,95],{"class":78},[68,74034,74035,74037,74039,74041,74043],{"class":70,"line":18120},[68,74036,56400],{"class":85},[68,74038,89],{"class":78},[68,74040,2151],{"class":85},[68,74042,317],{"class":316},[68,74044,95],{"class":78},[68,74046,74047,74049,74051,74053,74055,74058,74060,74063,74065,74067],{"class":70,"line":18126},[68,74048,56362],{"class":85},[68,74050,89],{"class":78},[68,74052,73801],{"class":85},[68,74054,1640],{"class":78},[68,74056,74057],{"class":85},"237",[68,74059,13923],{"class":78},[68,74061,74062],{"class":85},"235",[68,74064,13923],{"class":78},[68,74066,74062],{"class":85},[68,74068,4209],{"class":78},[68,74070,74071,74074,74076,74078],{"class":70,"line":18149},[68,74072,74073],{"class":85},"      box-sizing",[68,74075,89],{"class":78},[68,74077,61983],{"class":85},[68,74079,95],{"class":78},[68,74081,74082],{"class":70,"line":18163},[68,74083,3677],{"class":78},[68,74085,74086],{"class":70,"line":18183},[68,74087,3890],{"emptyLinePlaceholder":1567},[68,74089,74090,74092,74094],{"class":70,"line":18189},[68,74091,73953],{"class":74},[68,74093,53170],{"class":52784},[68,74095,79],{"class":78},[68,74097,74098,74100,74102,74104],{"class":70,"line":18200},[68,74099,58894],{"class":85},[68,74101,89],{"class":78},[68,74103,58899],{"class":85},[68,74105,95],{"class":78},[68,74107,74108],{"class":70,"line":18223},[68,74109,3677],{"class":78},[68,74111,74112],{"class":70,"line":18245},[68,74113,3890],{"emptyLinePlaceholder":1567},[68,74115,74116,74118],{"class":70,"line":18250},[68,74117,66501],{"class":52784},[68,74119,79],{"class":78},[68,74121,74122,74124,74126,74128,74130],{"class":70,"line":18256},[68,74123,56250],{"class":85},[68,74125,89],{"class":78},[68,74127,63107],{"class":85},[68,74129,317],{"class":316},[68,74131,95],{"class":78},[68,74133,74134,74136,74138,74141],{"class":70,"line":18270},[68,74135,56187],{"class":85},[68,74137,89],{"class":78},[68,74139,74140],{"class":85},"auto",[68,74142,95],{"class":78},[68,74144,74145,74147,74149,74151],{"class":70,"line":18283},[68,74146,66508],{"class":85},[68,74148,89],{"class":78},[68,74150,66513],{"class":85},[68,74152,95],{"class":78},[68,74154,74155],{"class":70,"line":18288},[68,74156,3677],{"class":78},[68,74158,74159],{"class":70,"line":18302},[68,74160,3890],{"emptyLinePlaceholder":1567},[68,74162,74163,74165],{"class":70,"line":18307},[68,74164,66593],{"class":52784},[68,74166,79],{"class":78},[68,74168,74169,74171,74173,74175,74177,74179,74181,74183,74185,74187],{"class":70,"line":18313},[68,74170,56362],{"class":85},[68,74172,89],{"class":78},[68,74174,73801],{"class":85},[68,74176,1640],{"class":78},[68,74178,74057],{"class":85},[68,74180,13923],{"class":78},[68,74182,74062],{"class":85},[68,74184,13923],{"class":78},[68,74186,74062],{"class":85},[68,74188,4209],{"class":78},[68,74190,74191],{"class":70,"line":18318},[68,74192,3677],{"class":78},[68,74194,74195],{"class":70,"line":18332},[68,74196,3890],{"emptyLinePlaceholder":1567},[68,74198,74199,74201],{"class":70,"line":18337},[68,74200,66593],{"class":52784},[68,74202,32950],{"class":78},[68,74204,74205,74207],{"class":70,"line":18342},[68,74206,66659],{"class":52784},[68,74208,79],{"class":78},[68,74210,74211,74213,74215,74217,74219],{"class":70,"line":18356},[68,74212,56264],{"class":85},[68,74214,89],{"class":78},[68,74216,1902],{"class":85},[68,74218,317],{"class":316},[68,74220,95],{"class":78},[68,74222,74223,74225,74227,74229],{"class":70,"line":18368},[68,74224,58764],{"class":85},[68,74226,89],{"class":78},[68,74228,92],{"class":85},[68,74230,95],{"class":78},[68,74232,74233,74235,74237,74239,74241],{"class":70,"line":18373},[68,74234,56400],{"class":85},[68,74236,89],{"class":78},[68,74238,2177],{"class":85},[68,74240,317],{"class":316},[68,74242,95],{"class":78},[68,74244,74245,74247,74249,74251,74253,74255,74257,74259,74262,74264,74267,74269,74271],{"class":70,"line":18386},[68,74246,63455],{"class":85},[68,74248,89],{"class":78},[68,74250,1846],{"class":85},[68,74252,317],{"class":316},[68,74254,53003],{"class":85},[68,74256,73738],{"class":85},[68,74258,1640],{"class":78},[68,74260,74261],{"class":85},"228",[68,74263,13923],{"class":78},[68,74265,74266],{"class":85},"225",[68,74268,13923],{"class":78},[68,74270,74266],{"class":85},[68,74272,4209],{"class":78},[68,74274,74275,74278,74280,74282,74284],{"class":70,"line":18391},[68,74276,74277],{"class":85},"      padding-left",[68,74279,89],{"class":78},[68,74281,1948],{"class":85},[68,74283,317],{"class":316},[68,74285,95],{"class":78},[68,74287,74288,74290,74292,74294,74297,74299,74301],{"class":70,"line":18396},[68,74289,63338],{"class":85},[68,74291,89],{"class":78},[68,74293,29605],{"class":85},[68,74295,74296],{"class":85}," linear",[68,74298,63345],{"class":85},[68,74300,2323],{"class":316},[68,74302,95],{"class":78},[68,74304,74305],{"class":70,"line":18401},[68,74306,3677],{"class":78},[68,74308,74309],{"class":70,"line":18414},[68,74310,3890],{"emptyLinePlaceholder":1567},[68,74312,74313,74316,74318,74320],{"class":70,"line":18419},[68,74314,74315],{"class":52784},"    tbody",[68,74317,71622],{"class":52784},[68,74319,62418],{"class":74},[68,74321,79],{"class":78},[68,74323,74324,74326,74328,74330,74332,74334,74336,74338,74340,74342],{"class":70,"line":34117},[68,74325,56362],{"class":85},[68,74327,89],{"class":78},[68,74329,73801],{"class":85},[68,74331,1640],{"class":78},[68,74333,74057],{"class":85},[68,74335,13923],{"class":78},[68,74337,74062],{"class":85},[68,74339,13923],{"class":78},[68,74341,74062],{"class":85},[68,74343,4209],{"class":78},[68,74345,74346,74348,74350,74352],{"class":70,"line":34123},[68,74347,63503],{"class":85},[68,74349,89],{"class":78},[68,74351,63508],{"class":85},[68,74353,95],{"class":78},[68,74355,74356],{"class":70,"line":34129},[68,74357,3677],{"class":78},[68,74359,74360],{"class":70,"line":34135},[68,74361,3890],{"emptyLinePlaceholder":1567},[68,74363,74364,74366,74368,74371,74373],{"class":70,"line":34141},[68,74365,74315],{"class":52784},[68,74367,71622],{"class":52784},[68,74369,74370],{"class":52784}," td",[68,74372,2891],{"class":52784},[68,74374,79],{"class":78},[68,74376,74377,74379,74381,74383],{"class":70,"line":34152},[68,74378,56487],{"class":85},[68,74380,89],{"class":78},[68,74382,62347],{"class":85},[68,74384,95],{"class":78},[68,74386,74387,74389,74391,74393,74395],{"class":70,"line":34158},[68,74388,56250],{"class":85},[68,74390,89],{"class":78},[68,74392,2534],{"class":85},[68,74394,317],{"class":316},[68,74396,95],{"class":78},[68,74398,74399,74401,74403,74405,74407],{"class":70,"line":34178},[68,74400,56264],{"class":85},[68,74402,89],{"class":78},[68,74404,2452],{"class":85},[68,74406,317],{"class":316},[68,74408,95],{"class":78},[68,74410,74411,74413,74415,74417,74419],{"class":70,"line":34184},[68,74412,58837],{"class":85},[68,74414,89],{"class":78},[68,74416,2452],{"class":85},[68,74418,317],{"class":316},[68,74420,95],{"class":78},[68,74422,74423,74425,74427,74429,74431],{"class":70,"line":34195},[68,74424,63555],{"class":85},[68,74426,89],{"class":78},[68,74428,1715],{"class":85},[68,74430,317],{"class":316},[68,74432,95],{"class":78},[68,74434,74435,74437,74439,74441],{"class":70,"line":34201},[68,74436,58894],{"class":85},[68,74438,89],{"class":78},[68,74440,62320],{"class":85},[68,74442,95],{"class":78},[68,74444,74445,74447,74449,74451],{"class":70,"line":34207},[68,74446,58764],{"class":85},[68,74448,89],{"class":78},[68,74450,53074],{"class":85},[68,74452,95],{"class":78},[68,74454,74455,74457,74459,74461],{"class":70,"line":34213},[68,74456,65448],{"class":85},[68,74458,89],{"class":78},[68,74460,151],{"class":85},[68,74462,95],{"class":78},[68,74464,74465,74467,74469,74472],{"class":70,"line":34219},[68,74466,56362],{"class":85},[68,74468,89],{"class":78},[68,74470,74471],{"class":85},"orange",[68,74473,95],{"class":78},[68,74475,74476,74478,74480,74483,74485],{"class":70,"line":34225},[68,74477,56612],{"class":85},[68,74479,89],{"class":78},[68,74481,74482],{"class":85},"12.5",[68,74484,317],{"class":316},[68,74486,95],{"class":78},[68,74488,74489],{"class":70,"line":34231},[68,74490,3677],{"class":78},[68,74492,74493,74495,74497],{"class":70,"line":34237},[68,74494,53899],{"class":78},[68,74496,1553],{"class":52784},[68,74498,52791],{"class":78},[68,74500,74501,74503,74505],{"class":70,"line":34257},[68,74502,53267],{"class":78},[68,74504,52818],{"class":52784},[68,74506,52791],{"class":78},[68,74508,74509],{"class":70,"line":34263},[68,74510,3890],{"emptyLinePlaceholder":1567},[68,74512,74513,74515,74517],{"class":70,"line":34279},[68,74514,2537],{"class":78},[68,74516,53282],{"class":52784},[68,74518,52791],{"class":78},[68,74520,74521,74523,74525,74528,74530],{"class":70,"line":34285},[68,74522,53626],{"class":78},[68,74524,14],{"class":52784},[68,74526,74527],{"class":78},">学生就业统计表\u003C\u002F",[68,74529,14],{"class":52784},[68,74531,52791],{"class":78},[68,74533,74534,74536,74538,74540,74542,74544,74546,74548,74550],{"class":70,"line":34299},[68,74535,53626],{"class":78},[68,74537,68103],{"class":52784},[68,74539,54968],{"class":74},[68,74541,1685],{"class":78},[68,74543,64142],{"class":1742},[68,74545,70548],{"class":74},[68,74547,1685],{"class":78},[68,74549,33260],{"class":1742},[68,74551,52791],{"class":78},[68,74553,74554,74556,74558,74560,74562,74564,74566,74568,74570,74572,74574,74577,74579,74581,74583],{"class":70,"line":34305},[68,74555,52825],{"class":78},[68,74557,55302],{"class":52784},[68,74559,55305],{"class":74},[68,74561,1685],{"class":78},[68,74563,64177],{"class":1742},[68,74565,16408],{"class":74},[68,74567,1685],{"class":78},[68,74569,70574],{"class":1742},[68,74571,62498],{"class":74},[68,74573,1685],{"class":78},[68,74575,74576],{"class":1742},"\"姓名\"",[68,74578,54968],{"class":74},[68,74580,1685],{"class":78},[68,74582,70574],{"class":1742},[68,74584,52791],{"class":78},[68,74586,74587,74589,74591,74593,74595,74597,74599,74601,74603,74605,74607,74610,74612,74614,74616],{"class":70,"line":34320},[68,74588,52825],{"class":78},[68,74590,55302],{"class":52784},[68,74592,55305],{"class":74},[68,74594,1685],{"class":78},[68,74596,64177],{"class":1742},[68,74598,16408],{"class":74},[68,74600,1685],{"class":78},[68,74602,70602],{"class":1742},[68,74604,62498],{"class":74},[68,74606,1685],{"class":78},[68,74608,74609],{"class":1742},"\"年龄\"",[68,74611,54968],{"class":74},[68,74613,1685],{"class":78},[68,74615,70602],{"class":1742},[68,74617,52791],{"class":78},[68,74619,74620,74622,74624,74626,74628,74630,74632,74634,74636,74638,74640,74643,74645,74647,74649],{"class":70,"line":34326},[68,74621,52825],{"class":78},[68,74623,55302],{"class":52784},[68,74625,55305],{"class":74},[68,74627,1685],{"class":78},[68,74629,64177],{"class":1742},[68,74631,16408],{"class":74},[68,74633,1685],{"class":78},[68,74635,70704],{"class":1742},[68,74637,62498],{"class":74},[68,74639,1685],{"class":78},[68,74641,74642],{"class":1742},"\"薪资\"",[68,74644,54968],{"class":74},[68,74646,1685],{"class":78},[68,74648,70704],{"class":1742},[68,74650,52791],{"class":78},[68,74652,74653,74655,74657,74659,74661,74663,74665,74667,74669,74671,74673,74675],{"class":70,"line":34335},[68,74654,52825],{"class":78},[68,74656,70622],{"class":52784},[68,74658,16408],{"class":74},[68,74660,1685],{"class":78},[68,74662,70629],{"class":1742},[68,74664,16447],{"class":74},[68,74666,1685],{"class":78},[68,74668,9141],{"class":1742},[68,74670,54968],{"class":74},[68,74672,1685],{"class":78},[68,74674,70629],{"class":1742},[68,74676,52791],{"class":78},[68,74678,74679,74681,74683,74685,74687,74689,74691,74693],{"class":70,"line":34341},[68,74680,56712],{"class":78},[68,74682,70644],{"class":52784},[68,74684,68129],{"class":74},[68,74686,1685],{"class":78},[68,74688,11449],{"class":1742},[68,74690,70653],{"class":78},[68,74692,70644],{"class":52784},[68,74694,52791],{"class":78},[68,74696,74697,74699,74701,74703,74705,74707,74709,74711],{"class":70,"line":34350},[68,74698,56712],{"class":78},[68,74700,70644],{"class":52784},[68,74702,68129],{"class":74},[68,74704,1685],{"class":78},[68,74706,11518],{"class":1742},[68,74708,70672],{"class":78},[68,74710,70644],{"class":52784},[68,74712,52791],{"class":78},[68,74714,74715,74717,74719],{"class":70,"line":34356},[68,74716,53258],{"class":78},[68,74718,70622],{"class":52784},[68,74720,52791],{"class":78},[68,74722,74723,74725,74727,74729,74731,74733,74735,74737,74739,74741,74743,74745],{"class":70,"line":34362},[68,74724,52825],{"class":78},[68,74726,70622],{"class":52784},[68,74728,16408],{"class":74},[68,74730,1685],{"class":78},[68,74732,70726],{"class":1742},[68,74734,16447],{"class":74},[68,74736,1685],{"class":78},[68,74738,9141],{"class":1742},[68,74740,54968],{"class":74},[68,74742,1685],{"class":78},[68,74744,70726],{"class":1742},[68,74746,52791],{"class":78},[68,74748,74749,74751,74753,74755,74757,74759,74761,74763],{"class":70,"line":34371},[68,74750,56712],{"class":78},[68,74752,70644],{"class":52784},[68,74754,68129],{"class":74},[68,74756,1685],{"class":78},[68,74758,70747],{"class":1742},[68,74760,70750],{"class":78},[68,74762,70644],{"class":52784},[68,74764,52791],{"class":78},[68,74766,74767,74769,74771,74773,74775,74777,74779,74781],{"class":70,"line":34377},[68,74768,56712],{"class":78},[68,74770,70644],{"class":52784},[68,74772,68129],{"class":74},[68,74774,1685],{"class":78},[68,74776,70767],{"class":1742},[68,74778,70770],{"class":78},[68,74780,70644],{"class":52784},[68,74782,52791],{"class":78},[68,74784,74785,74787,74789,74791,74793,74795,74797,74799],{"class":70,"line":34388},[68,74786,56712],{"class":78},[68,74788,70644],{"class":52784},[68,74790,68129],{"class":74},[68,74792,1685],{"class":78},[68,74794,70787],{"class":1742},[68,74796,70790],{"class":78},[68,74798,70644],{"class":52784},[68,74800,52791],{"class":78},[68,74802,74803,74805,74807,74809,74811,74813,74815,74817],{"class":70,"line":34394},[68,74804,56712],{"class":78},[68,74806,70644],{"class":52784},[68,74808,68129],{"class":74},[68,74810,1685],{"class":78},[68,74812,70807],{"class":1742},[68,74814,70810],{"class":78},[68,74816,70644],{"class":52784},[68,74818,52791],{"class":78},[68,74820,74821,74823,74825,74827,74829,74831,74833,74835],{"class":70,"line":34413},[68,74822,56712],{"class":78},[68,74824,70644],{"class":52784},[68,74826,68129],{"class":74},[68,74828,1685],{"class":78},[68,74830,70827],{"class":1742},[68,74832,70830],{"class":78},[68,74834,70644],{"class":52784},[68,74836,52791],{"class":78},[68,74838,74839,74841,74843],{"class":70,"line":34419},[68,74840,53258],{"class":78},[68,74842,70622],{"class":52784},[68,74844,52791],{"class":78},[68,74846,74847,74849,74851],{"class":70,"line":34430},[68,74848,52825],{"class":78},[68,74850,55368],{"class":52784},[68,74852,52791],{"class":78},[68,74854,74855,74857,74859,74862,74864,74867,74869],{"class":70,"line":34436},[68,74856,56712],{"class":78},[68,74858,68],{"class":52784},[68,74860,74861],{"class":78},">+\u003C\u002F",[68,74863,68],{"class":52784},[68,74865,74866],{"class":78},">添加\u003C\u002F",[68,74868,55368],{"class":52784},[68,74870,52791],{"class":78},[68,74872,74873,74875,74877],{"class":70,"line":34456},[68,74874,53899],{"class":78},[68,74876,68103],{"class":52784},[68,74878,52791],{"class":78},[68,74880,74881,74883,74885,74887,74889,74891,74894,74896,74899,74901,74904,74906],{"class":70,"line":34472},[68,74882,53626],{"class":78},[68,74884,53093],{"class":52784},[68,74886,54968],{"class":74},[68,74888,1685],{"class":78},[68,74890,64058],{"class":1742},[68,74892,74893],{"class":78},">共有数据 \u003C",[68,74895,68],{"class":52784},[68,74897,74898],{"class":78},">0\u003C\u002F",[68,74900,68],{"class":52784},[68,74902,74903],{"class":78},"> 条\u003C\u002F",[68,74905,53093],{"class":52784},[68,74907,52791],{"class":78},[68,74909,74910,74912,74914],{"class":70,"line":34478},[68,74911,53626],{"class":78},[68,74913,128],{"class":52784},[68,74915,52791],{"class":78},[68,74917,74918,74920,74922],{"class":70,"line":34492},[68,74919,52825],{"class":78},[68,74921,131],{"class":52784},[68,74923,52791],{"class":78},[68,74925,74926,74928,74930],{"class":70,"line":34498},[68,74927,56712],{"class":78},[68,74929,134],{"class":52784},[68,74931,52791],{"class":78},[68,74933,74934,74936,74938,74941,74943],{"class":70,"line":34504},[68,74935,56780],{"class":78},[68,74937,137],{"class":52784},[68,74939,74940],{"class":78},">ID\u003C\u002F",[68,74942,137],{"class":52784},[68,74944,52791],{"class":78},[68,74946,74947,74949,74951,74953,74955],{"class":70,"line":34515},[68,74948,56780],{"class":78},[68,74950,137],{"class":52784},[68,74952,70933],{"class":78},[68,74954,137],{"class":52784},[68,74956,52791],{"class":78},[68,74958,74959,74961,74963,74965,74967],{"class":70,"line":34521},[68,74960,56780],{"class":78},[68,74962,137],{"class":52784},[68,74964,70946],{"class":78},[68,74966,137],{"class":52784},[68,74968,52791],{"class":78},[68,74970,74971,74973,74975,74977,74979],{"class":70,"line":34527},[68,74972,56780],{"class":78},[68,74974,137],{"class":52784},[68,74976,70959],{"class":78},[68,74978,137],{"class":52784},[68,74980,52791],{"class":78},[68,74982,74983,74985,74987,74989,74991],{"class":70,"line":34537},[68,74984,56780],{"class":78},[68,74986,137],{"class":52784},[68,74988,70972],{"class":78},[68,74990,137],{"class":52784},[68,74992,52791],{"class":78},[68,74994,74995,74997,74999,75001,75003],{"class":70,"line":34543},[68,74996,56780],{"class":78},[68,74998,137],{"class":52784},[68,75000,70985],{"class":78},[68,75002,137],{"class":52784},[68,75004,52791],{"class":78},[68,75006,75007,75009,75011,75014,75016],{"class":70,"line":34554},[68,75008,56780],{"class":78},[68,75010,137],{"class":52784},[68,75012,75013],{"class":78},">录入时间\u003C\u002F",[68,75015,137],{"class":52784},[68,75017,52791],{"class":78},[68,75019,75020,75022,75024,75026,75028],{"class":70,"line":34560},[68,75021,56780],{"class":78},[68,75023,137],{"class":52784},[68,75025,70998],{"class":78},[68,75027,137],{"class":52784},[68,75029,52791],{"class":78},[68,75031,75032,75034,75036],{"class":70,"line":34570},[68,75033,56885],{"class":78},[68,75035,134],{"class":52784},[68,75037,52791],{"class":78},[68,75039,75040,75042,75044],{"class":70,"line":34575},[68,75041,53258],{"class":78},[68,75043,131],{"class":52784},[68,75045,52791],{"class":78},[68,75047,75048,75050,75052],{"class":70,"line":34581},[68,75049,52825],{"class":78},[68,75051,144],{"class":52784},[68,75053,52791],{"class":78},[68,75055,75056],{"class":70,"line":34630},[68,75057,75058],{"class":302},"      \u003C!-- \u003Ctr>\n",[68,75060,75061],{"class":70,"line":34677},[68,75062,75063],{"class":302},"        \u003Ctd>1\u003C\u002Ftd>\n",[68,75065,75066],{"class":70,"line":34682},[68,75067,75063],{"class":302},[68,75069,75070],{"class":70,"line":34688},[68,75071,75063],{"class":302},[68,75073,75074],{"class":70,"line":34707},[68,75075,75063],{"class":302},[68,75077,75078],{"class":70,"line":34713},[68,75079,75063],{"class":302},[68,75081,75082],{"class":70,"line":34733},[68,75083,75063],{"class":302},[68,75085,75086],{"class":70,"line":34739},[68,75087,75063],{"class":302},[68,75089,75090],{"class":70,"line":34745},[68,75091,75092],{"class":302},"        \u003Ctd>\n",[68,75094,75095],{"class":70,"line":34755},[68,75096,75097],{"class":302},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[68,75099,75100],{"class":70,"line":34760},[68,75101,75102],{"class":302},"        \u003C\u002Ftd>\n",[68,75104,75105],{"class":70,"line":34766},[68,75106,75107],{"class":302},"      \u003C\u002Ftr> -->\n",[68,75109,75110,75112,75114],{"class":70,"line":34782},[68,75111,53258],{"class":78},[68,75113,144],{"class":52784},[68,75115,52791],{"class":78},[68,75117,75118,75120,75122],{"class":70,"line":34827},[68,75119,53899],{"class":78},[68,75121,128],{"class":52784},[68,75123,52791],{"class":78},[68,75125,75126,75128,75130],{"class":70,"line":34833},[68,75127,53626],{"class":78},[68,75129,53295],{"class":52784},[68,75131,52791],{"class":78},[68,75133,75134],{"class":70,"line":34839},[68,75135,75136],{"class":302},"    \u002F\u002F const initData = [{\n",[68,75138,75139],{"class":70,"line":34845},[68,75140,75141],{"class":302},"    \u002F\u002F   unameId: 1,\n",[68,75143,75144],{"class":70,"line":34856},[68,75145,75146],{"class":302},"    \u002F\u002F   uname: '华晨宇',\n",[68,75148,75149],{"class":70,"line":34862},[68,75150,75151],{"class":302},"    \u002F\u002F   age: 22,\n",[68,75153,75154],{"class":70,"line":34868},[68,75155,75156],{"class":302},"    \u002F\u002F   salary: 12000,\n",[68,75158,75159],{"class":70,"line":34874},[68,75160,75161],{"class":302},"    \u002F\u002F   gender: '男',\n",[68,75163,75164],{"class":70,"line":34892},[68,75165,75166],{"class":302},"    \u002F\u002F   city: '北京',\n",[68,75168,75169],{"class":70,"line":34906},[68,75170,75171],{"class":302},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[68,75173,75174],{"class":70,"line":34915},[68,75175,75176],{"class":302},"    \u002F\u002F }]\n",[68,75178,75179],{"class":70,"line":34924},[68,75180,75181],{"class":302},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[68,75183,75184],{"class":70,"line":34933},[68,75185,75186],{"class":302},"    \u002F\u002F 1.渲染业务\n",[68,75188,75189],{"class":70,"line":34942},[68,75190,75191],{"class":302},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[68,75193,75194],{"class":70,"line":34948},[68,75195,75196],{"class":302},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[68,75198,75199],{"class":70,"line":34954},[68,75200,75201],{"class":302},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[68,75203,75204],{"class":70,"line":34962},[68,75205,3890],{"emptyLinePlaceholder":1567},[68,75207,75208],{"class":70,"line":34967},[68,75209,75210],{"class":302},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[68,75212,75213],{"class":70,"line":34973},[68,75214,75215],{"class":302},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[68,75217,75218,75220,75222,75224],{"class":70,"line":34984},[68,75219,12709],{"class":316},[68,75221,59173],{"class":85},[68,75223,15052],{"class":316},[68,75225,53320],{"class":78},[68,75227,75228,75231,75233],{"class":70,"line":34990},[68,75229,75230],{"class":78},"    console.",[68,75232,59725],{"class":74},[68,75234,53894],{"class":78},[68,75236,75237],{"class":70,"line":35010},[68,75238,3890],{"emptyLinePlaceholder":1567},[68,75240,75241],{"class":70,"line":35016},[68,75242,75243],{"class":302},"    \u002F\u002F 时间函数\n",[68,75245,75246,75248,75251],{"class":70,"line":35022},[68,75247,71562],{"class":316},[68,75249,75250],{"class":74}," getTime",[68,75252,12341],{"class":78},[68,75254,75255,75257,75260,75262,75264,75267],{"class":70,"line":35028},[68,75256,59706],{"class":316},[68,75258,75259],{"class":85}," date",[68,75261,15052],{"class":316},[68,75263,13066],{"class":316},[68,75265,75266],{"class":74}," Date",[68,75268,3466],{"class":78},[68,75270,75271,75273,75275,75277,75280,75283,75285,75287,75289,75292,75295,75297,75299,75301,75303,75305,75307,75309],{"class":70,"line":35045},[68,75272,59706],{"class":316},[68,75274,17578],{"class":85},[68,75276,15052],{"class":316},[68,75278,75279],{"class":78}," date.",[68,75281,75282],{"class":74},"getHours",[68,75284,14538],{"class":78},[68,75286,2537],{"class":316},[68,75288,3528],{"class":85},[68,75290,75291],{"class":316}," ?",[68,75293,75294],{"class":1742}," '0'",[68,75296,47050],{"class":316},[68,75298,75279],{"class":78},[68,75300,75282],{"class":74},[68,75302,14538],{"class":78},[68,75304,2486],{"class":316},[68,75306,75279],{"class":78},[68,75308,75282],{"class":74},[68,75310,3466],{"class":78},[68,75312,75313,75315,75318,75320,75322,75325,75327,75329,75331,75333,75335,75337,75339,75341,75343,75345,75347,75349],{"class":70,"line":35051},[68,75314,59706],{"class":316},[68,75316,75317],{"class":85}," m",[68,75319,15052],{"class":316},[68,75321,75279],{"class":78},[68,75323,75324],{"class":74},"getMinutes",[68,75326,14538],{"class":78},[68,75328,2537],{"class":316},[68,75330,3528],{"class":85},[68,75332,75291],{"class":316},[68,75334,75294],{"class":1742},[68,75336,47050],{"class":316},[68,75338,75279],{"class":78},[68,75340,75324],{"class":74},[68,75342,14538],{"class":78},[68,75344,2486],{"class":316},[68,75346,75279],{"class":78},[68,75348,75324],{"class":74},[68,75350,3466],{"class":78},[68,75352,75353,75355,75357,75359,75361,75364,75366,75368,75370,75372,75374,75376,75378,75380,75382,75384,75386,75388],{"class":70,"line":35057},[68,75354,59706],{"class":316},[68,75356,9917],{"class":85},[68,75358,15052],{"class":316},[68,75360,75279],{"class":78},[68,75362,75363],{"class":74},"getSeconds",[68,75365,14538],{"class":78},[68,75367,2537],{"class":316},[68,75369,3528],{"class":85},[68,75371,75291],{"class":316},[68,75373,75294],{"class":1742},[68,75375,47050],{"class":316},[68,75377,75279],{"class":78},[68,75379,75363],{"class":74},[68,75381,14538],{"class":78},[68,75383,2486],{"class":316},[68,75385,75279],{"class":78},[68,75387,75363],{"class":74},[68,75389,3466],{"class":78},[68,75391,75392,75394,75397,75399,75401,75404,75406,75409,75411,75414,75416,75418,75421,75423,75425,75427,75429,75431,75433,75436,75438,75441,75443,75446,75448,75450,75452],{"class":70,"line":35063},[68,75393,59706],{"class":316},[68,75395,75396],{"class":85}," str",[68,75398,15052],{"class":316},[68,75400,64381],{"class":1742},[68,75402,75403],{"class":78},"date",[68,75405,2186],{"class":1742},[68,75407,75408],{"class":74},"getFullYear",[68,75410,3917],{"class":1742},[68,75412,75413],{"class":1742},"}\u002F${",[68,75415,75403],{"class":78},[68,75417,2186],{"class":1742},[68,75419,75420],{"class":74},"getMonth",[68,75422,14538],{"class":1742},[68,75424,2109],{"class":316},[68,75426,26604],{"class":85},[68,75428,75413],{"class":1742},[68,75430,75403],{"class":78},[68,75432,2186],{"class":1742},[68,75434,75435],{"class":74},"getDate",[68,75437,3917],{"class":1742},[68,75439,75440],{"class":1742},"} ${",[68,75442,2044],{"class":78},[68,75444,75445],{"class":1742},"}:${",[68,75447,2172],{"class":78},[68,75449,75445],{"class":1742},[68,75451,2323],{"class":78},[68,75453,75454],{"class":1742},"}`\n",[68,75456,75457,75460],{"class":70,"line":35069},[68,75458,75459],{"class":316},"      return",[68,75461,75462],{"class":78}," str\n",[68,75464,75465],{"class":70,"line":35075},[68,75466,3677],{"class":78},[68,75468,75469],{"class":70,"line":35102},[68,75470,75471],{"class":302},"    \u002F\u002F 渲染函数\n",[68,75473,75474,75476,75478,75480,75482,75484,75486,75488],{"class":70,"line":35126},[68,75475,12709],{"class":316},[68,75477,71225],{"class":85},[68,75479,15052],{"class":316},[68,75481,55877],{"class":78},[68,75483,55880],{"class":74},[68,75485,1640],{"class":78},[68,75487,71236],{"class":1742},[68,75489,1646],{"class":78},[68,75491,75492,75494,75496],{"class":70,"line":35132},[68,75493,71562],{"class":316},[68,75495,71565],{"class":74},[68,75497,12341],{"class":78},[68,75499,75500],{"class":70,"line":35138},[68,75501,75502],{"class":302},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[68,75504,75505],{"class":70,"line":35144},[68,75506,75507],{"class":302},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[68,75509,75510,75512,75515,75517,75519,75522,75524,75526,75528,75531,75533,75536],{"class":70,"line":35155},[68,75511,59706],{"class":316},[68,75513,75514],{"class":85}," trArr",[68,75516,15052],{"class":316},[68,75518,53447],{"class":78},[68,75520,75521],{"class":74},"map",[68,75523,1640],{"class":78},[68,75525,55930],{"class":316},[68,75527,3149],{"class":78},[68,75529,75530],{"class":6705},"ele",[68,75532,13923],{"class":78},[68,75534,75535],{"class":6705},"index",[68,75537,13930],{"class":78},[68,75539,75540,75542],{"class":70,"line":35166},[68,75541,16240],{"class":316},[68,75543,71646],{"class":1742},[68,75545,75546],{"class":70,"line":35172},[68,75547,75548],{"class":1742},"      \u003Ctr>\n",[68,75550,75551,75553,75555,75557,75560],{"class":70,"line":35189},[68,75552,71651],{"class":1742},[68,75554,75530],{"class":78},[68,75556,2186],{"class":1742},[68,75558,75559],{"class":78},"unameId",[68,75561,71666],{"class":1742},[68,75563,75564,75566,75568,75570,75572],{"class":70,"line":35212},[68,75565,71651],{"class":1742},[68,75567,75530],{"class":78},[68,75569,2186],{"class":1742},[68,75571,71682],{"class":78},[68,75573,71666],{"class":1742},[68,75575,75576,75578,75580,75582,75584],{"class":70,"line":35235},[68,75577,71651],{"class":1742},[68,75579,75530],{"class":78},[68,75581,2186],{"class":1742},[68,75583,71699],{"class":78},[68,75585,71666],{"class":1742},[68,75587,75588,75590,75592,75594,75596],{"class":70,"line":35241},[68,75589,71651],{"class":1742},[68,75591,75530],{"class":78},[68,75593,2186],{"class":1742},[68,75595,71716],{"class":78},[68,75597,71666],{"class":1742},[68,75599,75600,75602,75604,75606,75608],{"class":70,"line":35246},[68,75601,71651],{"class":1742},[68,75603,75530],{"class":78},[68,75605,2186],{"class":1742},[68,75607,71733],{"class":78},[68,75609,71666],{"class":1742},[68,75611,75612,75614,75616,75618,75620],{"class":70,"line":35255},[68,75613,71651],{"class":1742},[68,75615,75530],{"class":78},[68,75617,2186],{"class":1742},[68,75619,71750],{"class":78},[68,75621,71666],{"class":1742},[68,75623,75624,75626,75628,75630,75632],{"class":70,"line":35265},[68,75625,71651],{"class":1742},[68,75627,75530],{"class":78},[68,75629,2186],{"class":1742},[68,75631,3877],{"class":78},[68,75633,71666],{"class":1742},[68,75635,75636],{"class":70,"line":35271},[68,75637,75092],{"class":1742},[68,75639,75640,75643,75645],{"class":70,"line":35276},[68,75641,75642],{"class":1742},"          \u003Ca href=\"#\" data-id=\"${",[68,75644,75535],{"class":78},[68,75646,75647],{"class":1742},"}\">删除\u003C\u002Fa>\n",[68,75649,75650],{"class":70,"line":35282},[68,75651,75102],{"class":1742},[68,75653,75654],{"class":70,"line":35295},[68,75655,75656],{"class":1742},"      \u003C\u002Ftr>\n",[68,75658,75659],{"class":70,"line":35301},[68,75660,75661],{"class":1742},"  `\n",[68,75663,75664],{"class":70,"line":35312},[68,75665,66293],{"class":78},[68,75667,75668,75670,75672],{"class":70,"line":35323},[68,75669,59722],{"class":78},[68,75671,59725],{"class":74},[68,75673,75674],{"class":78},"(trArr)\n",[68,75676,75677],{"class":70,"line":35342},[68,75678,3890],{"emptyLinePlaceholder":1567},[68,75680,75681],{"class":70,"line":51002},[68,75682,75683],{"class":302},"      \u002F\u002F (2) 把数组转换为字符串join\n",[68,75685,75686],{"class":70,"line":51007},[68,75687,75688],{"class":302},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[68,75690,75691,75693,75695,75698,75701,75703,75706],{"class":70,"line":51016},[68,75692,71577],{"class":78},[68,75694,1685],{"class":316},[68,75696,75697],{"class":78}," trArr.",[68,75699,75700],{"class":74},"join",[68,75702,1640],{"class":78},[68,75704,75705],{"class":1742},"''",[68,75707,1646],{"class":78},[68,75709,75710],{"class":70,"line":51025},[68,75711,75712],{"class":302},"      \u002F\u002F 显示共有几条\n",[68,75714,75715,75717,75719,75721,75724,75727,75729,75731],{"class":70,"line":51030},[68,75716,57249],{"class":78},[68,75718,55880],{"class":74},[68,75720,1640],{"class":78},[68,75722,75723],{"class":1742},"'.total span'",[68,75725,75726],{"class":78},").innerHTML ",[68,75728,1685],{"class":316},[68,75730,53447],{"class":78},[68,75732,57309],{"class":85},[68,75734,75735],{"class":70,"line":51035},[68,75736,3677],{"class":78},[68,75738,75739],{"class":70,"line":51040},[68,75740,75741],{"class":302},"    \u002F\u002F render()\n",[68,75743,75744],{"class":70,"line":51053},[68,75745,3890],{"emptyLinePlaceholder":1567},[68,75747,75748],{"class":70,"line":51058},[68,75749,75750],{"class":302},"    \u002F\u002F 获取DOM对象\n",[68,75752,75753,75755,75757,75759,75761,75763,75765,75767],{"class":70,"line":51067},[68,75754,12709],{"class":316},[68,75756,71299],{"class":85},[68,75758,15052],{"class":316},[68,75760,55877],{"class":78},[68,75762,55880],{"class":74},[68,75764,1640],{"class":78},[68,75766,71310],{"class":1742},[68,75768,1646],{"class":78},[68,75770,75771,75773,75775,75777,75779,75781,75783,75785],{"class":70,"line":51076},[68,75772,12709],{"class":316},[68,75774,71126],{"class":85},[68,75776,15052],{"class":316},[68,75778,55877],{"class":78},[68,75780,55880],{"class":74},[68,75782,1640],{"class":78},[68,75784,71137],{"class":1742},[68,75786,1646],{"class":78},[68,75788,75789,75791,75793,75795,75797,75799,75801,75803],{"class":70,"line":51093},[68,75790,12709],{"class":316},[68,75792,17176],{"class":85},[68,75794,15052],{"class":316},[68,75796,55877],{"class":78},[68,75798,55880],{"class":74},[68,75800,1640],{"class":78},[68,75802,71156],{"class":1742},[68,75804,1646],{"class":78},[68,75806,75808,75810,75812,75814,75816,75818,75820,75822],{"class":70,"line":75807},231,[68,75809,12709],{"class":316},[68,75811,71185],{"class":85},[68,75813,15052],{"class":316},[68,75815,55877],{"class":78},[68,75817,55880],{"class":74},[68,75819,1640],{"class":78},[68,75821,71196],{"class":1742},[68,75823,1646],{"class":78},[68,75825,75827,75829,75831,75833,75835,75837,75839,75841],{"class":70,"line":75826},232,[68,75828,12709],{"class":316},[68,75830,71165],{"class":85},[68,75832,15052],{"class":316},[68,75834,55877],{"class":78},[68,75836,55880],{"class":74},[68,75838,1640],{"class":78},[68,75840,71176],{"class":1742},[68,75842,1646],{"class":78},[68,75844,75846,75848,75850,75852,75854,75856,75858,75860],{"class":70,"line":75845},233,[68,75847,12709],{"class":316},[68,75849,71205],{"class":85},[68,75851,15052],{"class":316},[68,75853,55877],{"class":78},[68,75855,55880],{"class":74},[68,75857,1640],{"class":78},[68,75859,71216],{"class":1742},[68,75861,1646],{"class":78},[68,75863,75865],{"class":70,"line":75864},234,[68,75866,3890],{"emptyLinePlaceholder":1567},[68,75868,75870],{"class":70,"line":75869},235,[68,75871,75872],{"class":302},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[68,75874,75876,75878,75880,75882,75884,75886,75888,75890,75892],{"class":70,"line":75875},236,[68,75877,71317],{"class":78},[68,75879,59291],{"class":74},[68,75881,1640],{"class":78},[68,75883,71324],{"class":1742},[68,75885,13923],{"class":78},[68,75887,55930],{"class":316},[68,75889,3149],{"class":78},[68,75891,1712],{"class":6705},[68,75893,13930],{"class":78},[68,75895,75897],{"class":70,"line":75896},237,[68,75898,75899],{"class":302},"      \u002F\u002F 禁止浏览器跳转\n",[68,75901,75903,75905,75907],{"class":70,"line":75902},238,[68,75904,71344],{"class":78},[68,75906,71347],{"class":74},[68,75908,3466],{"class":78},[68,75910,75912],{"class":70,"line":75911},239,[68,75913,75914],{"class":302},"      \u002F\u002F 非空判断\n",[68,75916,75918],{"class":70,"line":75917},240,[68,75919,75920],{"class":302},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[68,75922,75924],{"class":70,"line":75923},241,[68,75925,75926],{"class":302},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[68,75928,75930,75932,75934,75936,75939,75941,75944,75947,75949,75951],{"class":70,"line":75929},242,[68,75931,55961],{"class":316},[68,75933,3149],{"class":78},[68,75935,1855],{"class":316},[68,75937,75938],{"class":78},"uname.value ",[68,75940,72835],{"class":316},[68,75942,75943],{"class":316}," !",[68,75945,75946],{"class":78},"age.value ",[68,75948,72835],{"class":316},[68,75950,75943],{"class":316},[68,75952,75953],{"class":78},"salary.value) {\n",[68,75955,75957,75959,75961,75963,75965],{"class":70,"line":75956},243,[68,75958,16240],{"class":316},[68,75960,71418],{"class":74},[68,75962,1640],{"class":78},[68,75964,71423],{"class":1742},[68,75966,1646],{"class":78},[68,75968,75970],{"class":70,"line":75969},244,[68,75971,53880],{"class":78},[68,75973,75975,75977,75979],{"class":70,"line":75974},245,[68,75976,59485],{"class":78},[68,75978,53366],{"class":74},[68,75980,75981],{"class":78},"({\n",[68,75983,75985],{"class":70,"line":75984},246,[68,75986,75987],{"class":302},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[68,75989,75991],{"class":70,"line":75990},247,[68,75992,75993],{"class":302},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[68,75995,75997],{"class":70,"line":75996},248,[68,75998,75999],{"class":302},"        \u002F\u002F 对象的序号应为数组长度+1\n",[68,76001,76003],{"class":70,"line":76002},249,[68,76004,76005],{"class":302},"        \u002F\u002F unameId: arr.length + 1,\n",[68,76007,76009],{"class":70,"line":76008},250,[68,76010,3890],{"emptyLinePlaceholder":1567},[68,76012,76014],{"class":70,"line":76013},251,[68,76015,76016],{"class":302},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[68,76018,76020],{"class":70,"line":76019},252,[68,76021,76022],{"class":302},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[68,76024,76026],{"class":70,"line":76025},253,[68,76027,76028],{"class":302},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[68,76030,76032],{"class":70,"line":76031},254,[68,76033,76034],{"class":302},"        \u002F\u002F 0当假看\n",[68,76036,76038,76041,76043,76045,76048,76050,76052,76054,76057,76059,76061,76064,76066],{"class":70,"line":76037},255,[68,76039,76040],{"class":78},"        unameId: arr.",[68,76042,53450],{"class":85},[68,76044,75291],{"class":316},[68,76046,76047],{"class":78}," arr[arr.",[68,76049,53450],{"class":85},[68,76051,53753],{"class":316},[68,76053,26604],{"class":85},[68,76055,76056],{"class":78},"].unameId ",[68,76058,2109],{"class":316},[68,76060,26604],{"class":85},[68,76062,76063],{"class":316}," :",[68,76065,26604],{"class":85},[68,76067,32950],{"class":78},[68,76069,76071],{"class":70,"line":76070},256,[68,76072,71471],{"class":78},[68,76074,76076],{"class":70,"line":76075},257,[68,76077,71476],{"class":78},[68,76079,76081],{"class":70,"line":76080},258,[68,76082,71486],{"class":78},[68,76084,76086],{"class":70,"line":76085},259,[68,76087,71481],{"class":78},[68,76089,76091],{"class":70,"line":76090},260,[68,76092,76093],{"class":78},"        city: city.value,\n",[68,76095,76097],{"class":70,"line":76096},261,[68,76098,76099],{"class":302},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[68,76101,76103],{"class":70,"line":76102},262,[68,76104,76105],{"class":302},"        \u002F\u002F time: new Date().toDateString()\n",[68,76107,76109,76112,76115],{"class":70,"line":76108},263,[68,76110,76111],{"class":78},"        time: ",[68,76113,76114],{"class":74},"getTime",[68,76116,3466],{"class":78},[68,76118,76120],{"class":70,"line":76119},264,[68,76121,66293],{"class":78},[68,76123,76125],{"class":70,"line":76124},265,[68,76126,76127],{"class":302},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[68,76129,76131,76133],{"class":70,"line":76130},266,[68,76132,71546],{"class":74},[68,76134,3466],{"class":78},[68,76136,76138,76140,76142,76144,76146],{"class":70,"line":76137},267,[68,76139,71529],{"class":85},[68,76141,2186],{"class":78},[68,76143,71534],{"class":74},[68,76145,14538],{"class":78},[68,76147,76148],{"class":302},"\u002F\u002F重置表单\n",[68,76150,76152],{"class":70,"line":76151},268,[68,76153,76154],{"class":302},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[68,76156,76158,76161,76163,76165,76168,76170,76172,76174,76176],{"class":70,"line":76157},269,[68,76159,76160],{"class":78},"      localStorage.",[68,76162,73132],{"class":74},[68,76164,1640],{"class":78},[68,76166,76167],{"class":1742},"'data'",[68,76169,13923],{"class":78},[68,76171,73142],{"class":85},[68,76173,2186],{"class":78},[68,76175,73147],{"class":74},[68,76177,76178],{"class":78},"(arr))\n",[68,76180,76182],{"class":70,"line":76181},270,[68,76183,34945],{"class":78},[68,76185,76187],{"class":70,"line":76186},271,[68,76188,3890],{"emptyLinePlaceholder":1567},[68,76190,76192],{"class":70,"line":76191},272,[68,76193,76194],{"class":302},"    \u002F\u002F 3.删除业务\n",[68,76196,76198],{"class":70,"line":76197},273,[68,76199,76200],{"class":302},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[68,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220],{"class":70,"line":76203},274,[68,76205,71819],{"class":78},[68,76207,59291],{"class":74},[68,76209,1640],{"class":78},[68,76211,59296],{"class":1742},[68,76213,13923],{"class":78},[68,76215,55930],{"class":316},[68,76217,3149],{"class":78},[68,76219,1712],{"class":6705},[68,76221,13930],{"class":78},[68,76223,76225],{"class":70,"line":76224},275,[68,76226,76227],{"class":302},"      \u002F\u002F 判断是否点击的是删除按钮\n",[68,76229,76231,76233,76235,76237,76239],{"class":70,"line":76230},276,[68,76232,55961],{"class":316},[68,76234,68512],{"class":78},[68,76236,55967],{"class":316},[68,76238,69734],{"class":1742},[68,76240,13930],{"class":78},[68,76242,76244],{"class":70,"line":76243},277,[68,76245,76246],{"class":302},"        \u002F\u002F alert(1)\n",[68,76248,76250],{"class":70,"line":76249},278,[68,76251,76252],{"class":302},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[68,76254,76256],{"class":70,"line":76255},279,[68,76257,76258],{"class":302},"        \u002F\u002F console.log(e.target)\n",[68,76260,76262],{"class":70,"line":76261},280,[68,76263,76264],{"class":302},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[68,76266,76268],{"class":70,"line":76267},281,[68,76269,3890],{"emptyLinePlaceholder":1567},[68,76271,76273],{"class":70,"line":76272},282,[68,76274,76275],{"class":302},"        \u002F\u002F 确认框，确然是否真的要删除\n",[68,76277,76279],{"class":70,"line":76278},283,[68,76280,76281],{"class":302},"        \u002F\u002F confirm()为确认框\n",[68,76283,76285],{"class":70,"line":76284},284,[68,76286,76287],{"class":302},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[68,76289,76291,76293,76295,76298,76300,76303],{"class":70,"line":76290},285,[68,76292,3987],{"class":316},[68,76294,3149],{"class":78},[68,76296,76297],{"class":74},"confirm",[68,76299,1640],{"class":78},[68,76301,76302],{"class":1742},"'您确定要删除这条数据吗？'",[68,76304,76305],{"class":78},")) {\n",[68,76307,76309,76312,76314,76316,76318],{"class":70,"line":76308},286,[68,76310,76311],{"class":78},"          arr.",[68,76313,59488],{"class":74},[68,76315,71872],{"class":78},[68,76317,1846],{"class":85},[68,76319,1646],{"class":78},[68,76321,76323],{"class":70,"line":76322},287,[68,76324,76325],{"class":302},"          \u002F\u002F 3.4 重新渲染页面\n",[68,76327,76329,76332],{"class":70,"line":76328},288,[68,76330,76331],{"class":74},"          render",[68,76333,3466],{"class":78},[68,76335,76337],{"class":70,"line":76336},289,[68,76338,76339],{"class":302},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[68,76341,76343,76346,76348,76350,76352,76354,76356,76358,76360],{"class":70,"line":76342},290,[68,76344,76345],{"class":78},"          localStorage.",[68,76347,73132],{"class":74},[68,76349,1640],{"class":78},[68,76351,76167],{"class":1742},[68,76353,13923],{"class":78},[68,76355,73142],{"class":85},[68,76357,2186],{"class":78},[68,76359,73147],{"class":74},[68,76361,76178],{"class":78},[68,76363,76365],{"class":70,"line":76364},291,[68,76366,4019],{"class":78},[68,76368,76370],{"class":70,"line":76369},292,[68,76371,53880],{"class":78},[68,76373,76375],{"class":70,"line":76374},293,[68,76376,3890],{"emptyLinePlaceholder":1567},[68,76378,76380],{"class":70,"line":76379},294,[68,76381,34945],{"class":78},[68,76383,76385],{"class":70,"line":76384},295,[68,76386,3890],{"emptyLinePlaceholder":1567},[68,76388,76390,76392,76394],{"class":70,"line":76389},296,[68,76391,53899],{"class":78},[68,76393,53295],{"class":52784},[68,76395,52791],{"class":78},[68,76397,76399,76401,76403],{"class":70,"line":76398},297,[68,76400,53267],{"class":78},[68,76402,53282],{"class":52784},[68,76404,52791],{"class":78},[68,76406,76408],{"class":70,"line":76407},298,[68,76409,3890],{"emptyLinePlaceholder":1567},[68,76411,76413,76415,76417],{"class":70,"line":76412},299,[68,76414,53267],{"class":78},[68,76416,52119],{"class":52784},[68,76418,52791],{"class":78},[14,76420,76422],{"id":76421},"_36-正则表达式","3.6 正则表达式",[170,76424,76425],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[170,76427,76428],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[170,76430,76431],{},"正则表达式的作用：",[24,76433,76434,76441,76447],{},[27,76435,76436,76437,76440],{},"表单验证（ ",[268,76438,76439],{},"匹配"," ）",[27,76442,76443,76444,76440],{},"过滤敏感词（ ",[268,76445,76446],{},"替换",[27,76448,76449,76450,76440],{},"字符串中提取我们想要的部分（ ",[268,76451,76452],{},"提取",[19,76454,76456],{"id":76455},"_361-语法","3.6.1 语法",[170,76458,76459],{},"正则表达式使用步骤：",[263,76461,76462,76465],{},[27,76463,76464],{},"定义规则",[27,76466,76467],{},"查找是否匹配",[170,76469,76470],{},"正则表达式里边不需要写引号",[170,76472,76473],{},[801,76474],{"alt":63,"src":76475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[170,76477,76478],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[170,76480,76481],{},"reg.test(str)",[170,76483,76484],{},[801,76485],{"alt":63,"src":76486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[170,76488,76489],{},[801,76490],{"alt":63,"src":76491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,76493,76495],{"id":76494},"_362-元字符","3.6.2 元字符",[263,76497,76498,76501,76504,76507,76514],{},[27,76499,76500],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[27,76502,76503],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[27,76505,76506],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[27,76508,76509,76510],{},"正则验证工具：",[1867,76511,76512],{"href":76512,"rel":76513},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25350],[27,76515,76516],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[245,76518,76520],{"id":76519},"_3621-边界符","3.6.2.1 边界符",[170,76522,76523],{},[801,76524],{"alt":63,"src":76525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[170,76527,76528],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[170,76530,76531],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[170,76533,76534],{},"只匹配一次",[170,76536,76537],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[245,76539,76541],{"id":76540},"_3622-量词","3.6.2.2 量词",[170,76543,76544],{},[801,76545],{"alt":63,"src":76546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[170,76548,76549],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[245,76551,76553],{"id":76552},"_3623-元字符","3.6.2.3 元字符",[170,76555,76556],{},[801,76557],{"alt":63,"src":76558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[170,76560,76561],{},"匹配的是a或b或c []只选一个",[170,76563,76564],{},[801,76565],{"alt":63,"src":76566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[170,76568,76569],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[170,76571,76572],{},[801,76573],{"alt":63,"src":76574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[170,76576,76577],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[170,76579,76580],{},[801,76581],{"alt":63,"src":76582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[58,76584,76586],{"className":52117,"code":76585,"language":52119,"meta":63,"style":63},"\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",[65,76587,76588,76598,76612,76616,76624,76638,76658,76670,76678,76682,76690,76698,76703,76734,76761,76789,76793,76798,76826,76857,76862,76867,76898,76930,76962,76966,76971,77002,77032,77062,77066,77071,77102,77133,77163,77193,77197,77202,77235,77239,77244,77275,77306,77310,77315,77346,77376,77407,77411,77416,77448,77479,77510,77537,77568,77600,77633,77664,77695,77727,77758,77766,77774,77778],{"__ignoreMap":63},[68,76589,76590,76592,76594,76596],{"class":70,"line":71},[68,76591,52781],{"class":78},[68,76593,52785],{"class":52784},[68,76595,52788],{"class":74},[68,76597,52791],{"class":78},[68,76599,76600,76602,76604,76606,76608,76610],{"class":70,"line":82},[68,76601,2537],{"class":78},[68,76603,52119],{"class":52784},[68,76605,52800],{"class":74},[68,76607,1685],{"class":78},[68,76609,52805],{"class":1742},[68,76611,52791],{"class":78},[68,76613,76614],{"class":70,"line":98},[68,76615,3890],{"emptyLinePlaceholder":1567},[68,76617,76618,76620,76622],{"class":70,"line":104},[68,76619,2537],{"class":78},[68,76621,52818],{"class":52784},[68,76623,52791],{"class":78},[68,76625,76626,76628,76630,76632,76634,76636],{"class":70,"line":112},[68,76627,53626],{"class":78},[68,76629,52828],{"class":52784},[68,76631,52831],{"class":74},[68,76633,1685],{"class":78},[68,76635,52836],{"class":1742},[68,76637,52791],{"class":78},[68,76639,76640,76642,76644,76646,76648,76650,76652,76654,76656],{"class":70,"line":124},[68,76641,53626],{"class":78},[68,76643,52828],{"class":52784},[68,76645,16408],{"class":74},[68,76647,1685],{"class":78},[68,76649,52875],{"class":1742},[68,76651,52855],{"class":74},[68,76653,1685],{"class":78},[68,76655,52882],{"class":1742},[68,76657,52791],{"class":78},[68,76659,76660,76662,76664,76666,76668],{"class":70,"line":1496},[68,76661,53626],{"class":78},[68,76663,52891],{"class":52784},[68,76665,52894],{"class":78},[68,76667,52891],{"class":52784},[68,76669,52791],{"class":78},[68,76671,76672,76674,76676],{"class":70,"line":1502},[68,76673,53267],{"class":78},[68,76675,52818],{"class":52784},[68,76677,52791],{"class":78},[68,76679,76680],{"class":70,"line":1510},[68,76681,3890],{"emptyLinePlaceholder":1567},[68,76683,76684,76686,76688],{"class":70,"line":1521},[68,76685,2537],{"class":78},[68,76687,53282],{"class":52784},[68,76689,52791],{"class":78},[68,76691,76692,76694,76696],{"class":70,"line":3103},[68,76693,53626],{"class":78},[68,76695,53295],{"class":52784},[68,76697,52791],{"class":78},[68,76699,76700],{"class":70,"line":3108},[68,76701,76702],{"class":302},"    \u002F\u002F 元字符中\n",[68,76704,76705,76707,76709,76711,76713,76716,76718,76720,76723,76725,76728,76731],{"class":70,"line":3114},[68,76706,75230],{"class":78},[68,76708,59725],{"class":74},[68,76710,1640],{"class":78},[68,76712,2212],{"class":1742},[68,76714,76715],{"class":49461},"哈",[68,76717,2212],{"class":1742},[68,76719,2186],{"class":78},[68,76721,76722],{"class":74},"test",[68,76724,1640],{"class":78},[68,76726,76727],{"class":1742},"'哈'",[68,76729,76730],{"class":78},"))  ",[68,76732,76733],{"class":302},"\u002F\u002Ftrue\n",[68,76735,76736,76738,76740,76742,76744,76746,76748,76750,76752,76754,76757,76759],{"class":70,"line":3119},[68,76737,75230],{"class":78},[68,76739,59725],{"class":74},[68,76741,1640],{"class":78},[68,76743,2212],{"class":1742},[68,76745,76715],{"class":49461},[68,76747,2212],{"class":1742},[68,76749,2186],{"class":78},[68,76751,76722],{"class":74},[68,76753,1640],{"class":78},[68,76755,76756],{"class":1742},"'哈哈'",[68,76758,76730],{"class":78},[68,76760,76733],{"class":302},[68,76762,76763,76765,76767,76769,76771,76773,76775,76777,76779,76781,76784,76787],{"class":70,"line":3133},[68,76764,75230],{"class":78},[68,76766,59725],{"class":74},[68,76768,1640],{"class":78},[68,76770,2212],{"class":1742},[68,76772,76715],{"class":49461},[68,76774,2212],{"class":1742},[68,76776,2186],{"class":78},[68,76778,76722],{"class":74},[68,76780,1640],{"class":78},[68,76782,76783],{"class":1742},"'二哈'",[68,76785,76786],{"class":78},"))   ",[68,76788,76733],{"class":302},[68,76790,76791],{"class":70,"line":3138},[68,76792,3890],{"emptyLinePlaceholder":1567},[68,76794,76795],{"class":70,"line":3144},[68,76796,76797],{"class":302},"    \u002F\u002F 1.边界符\n",[68,76799,76800,76802,76804,76806,76808,76810,76812,76814,76816,76818,76820,76822,76824],{"class":70,"line":3165},[68,76801,75230],{"class":78},[68,76803,59725],{"class":74},[68,76805,1640],{"class":78},[68,76807,2212],{"class":1742},[68,76809,2593],{"class":316},[68,76811,76715],{"class":49461},[68,76813,2212],{"class":1742},[68,76815,2186],{"class":78},[68,76817,76722],{"class":74},[68,76819,1640],{"class":78},[68,76821,76727],{"class":1742},[68,76823,76730],{"class":78},[68,76825,76733],{"class":302},[68,76827,76828,76830,76832,76834,76836,76838,76840,76842,76844,76846,76848,76850,76852,76854],{"class":70,"line":3170},[68,76829,75230],{"class":78},[68,76831,59725],{"class":74},[68,76833,1640],{"class":78},[68,76835,2212],{"class":1742},[68,76837,2593],{"class":316},[68,76839,76715],{"class":49461},[68,76841,1931],{"class":316},[68,76843,2212],{"class":1742},[68,76845,2186],{"class":78},[68,76847,76722],{"class":74},[68,76849,1640],{"class":78},[68,76851,76756],{"class":1742},[68,76853,76730],{"class":78},[68,76855,76856],{"class":302},"\u002F\u002Ffalse\n",[68,76858,76859],{"class":70,"line":3184},[68,76860,76861],{"class":302},"    \u002F\u002F 2.量词\n",[68,76863,76864],{"class":70,"line":3189},[68,76865,76866],{"class":302},"    \u002F\u002F 量词 * 类似于 >= 0\n",[68,76868,76869,76871,76873,76875,76877,76879,76881,76884,76886,76888,76890,76892,76894,76896],{"class":70,"line":3218},[68,76870,75230],{"class":78},[68,76872,59725],{"class":74},[68,76874,1640],{"class":78},[68,76876,2212],{"class":1742},[68,76878,2593],{"class":316},[68,76880,76715],{"class":49461},[68,76882,76883],{"class":316},"*$",[68,76885,2212],{"class":1742},[68,76887,2186],{"class":78},[68,76889,76722],{"class":74},[68,76891,1640],{"class":78},[68,76893,76756],{"class":1742},[68,76895,76730],{"class":78},[68,76897,76733],{"class":302},[68,76899,76900,76902,76904,76906,76908,76910,76912,76914,76916,76918,76920,76922,76925,76927],{"class":70,"line":3223},[68,76901,75230],{"class":78},[68,76903,59725],{"class":74},[68,76905,1640],{"class":78},[68,76907,2212],{"class":1742},[68,76909,2593],{"class":316},[68,76911,76715],{"class":49461},[68,76913,76883],{"class":316},[68,76915,2212],{"class":1742},[68,76917,2186],{"class":78},[68,76919,76722],{"class":74},[68,76921,1640],{"class":78},[68,76923,76924],{"class":1742},"'二哈好傻'",[68,76926,76730],{"class":78},[68,76928,76929],{"class":302},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[68,76931,76932,76934,76936,76938,76940,76942,76944,76946,76948,76950,76952,76954,76957,76959],{"class":70,"line":3240},[68,76933,75230],{"class":78},[68,76935,59725],{"class":74},[68,76937,1640],{"class":78},[68,76939,2212],{"class":1742},[68,76941,2593],{"class":316},[68,76943,76715],{"class":49461},[68,76945,76883],{"class":316},[68,76947,2212],{"class":1742},[68,76949,2186],{"class":78},[68,76951,76722],{"class":74},[68,76953,1640],{"class":78},[68,76955,76956],{"class":1742},"'哈好哈'",[68,76958,76786],{"class":78},[68,76960,76961],{"class":302},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[68,76963,76964],{"class":70,"line":3245},[68,76965,3890],{"emptyLinePlaceholder":1567},[68,76967,76968],{"class":70,"line":3250},[68,76969,76970],{"class":302},"    \u002F\u002F +类似于>=1\n",[68,76972,76973,76975,76977,76979,76981,76983,76985,76988,76990,76992,76994,76996,76998,77000],{"class":70,"line":3255},[68,76974,75230],{"class":78},[68,76976,59725],{"class":74},[68,76978,1640],{"class":78},[68,76980,2212],{"class":1742},[68,76982,2593],{"class":316},[68,76984,76715],{"class":49461},[68,76986,76987],{"class":316},"+$",[68,76989,2212],{"class":1742},[68,76991,2186],{"class":78},[68,76993,76722],{"class":74},[68,76995,1640],{"class":78},[68,76997,76756],{"class":1742},[68,76999,76730],{"class":78},[68,77001,76733],{"class":302},[68,77003,77004,77006,77008,77010,77012,77014,77016,77018,77020,77022,77024,77026,77028,77030],{"class":70,"line":3269},[68,77005,75230],{"class":78},[68,77007,59725],{"class":74},[68,77009,1640],{"class":78},[68,77011,2212],{"class":1742},[68,77013,2593],{"class":316},[68,77015,76715],{"class":49461},[68,77017,76987],{"class":316},[68,77019,2212],{"class":1742},[68,77021,2186],{"class":78},[68,77023,76722],{"class":74},[68,77025,1640],{"class":78},[68,77027,76924],{"class":1742},[68,77029,76730],{"class":78},[68,77031,76929],{"class":302},[68,77033,77034,77036,77038,77040,77042,77044,77046,77048,77050,77052,77054,77056,77058,77060],{"class":70,"line":3274},[68,77035,75230],{"class":78},[68,77037,59725],{"class":74},[68,77039,1640],{"class":78},[68,77041,2212],{"class":1742},[68,77043,2593],{"class":316},[68,77045,76715],{"class":49461},[68,77047,76987],{"class":316},[68,77049,2212],{"class":1742},[68,77051,2186],{"class":78},[68,77053,76722],{"class":74},[68,77055,1640],{"class":78},[68,77057,76956],{"class":1742},[68,77059,76786],{"class":78},[68,77061,76856],{"class":302},[68,77063,77064],{"class":70,"line":4067},[68,77065,3890],{"emptyLinePlaceholder":1567},[68,77067,77068],{"class":70,"line":4081},[68,77069,77070],{"class":302},"    \u002F\u002F ?类似于0次或一次\n",[68,77072,77073,77075,77077,77079,77081,77083,77086,77088,77090,77092,77094,77096,77098,77100],{"class":70,"line":4089},[68,77074,75230],{"class":78},[68,77076,59725],{"class":74},[68,77078,1640],{"class":78},[68,77080,2212],{"class":1742},[68,77082,2593],{"class":316},[68,77084,77085],{"class":49461},"哈？",[68,77087,1931],{"class":316},[68,77089,2212],{"class":1742},[68,77091,2186],{"class":78},[68,77093,76722],{"class":74},[68,77095,1640],{"class":78},[68,77097,75705],{"class":1742},[68,77099,76786],{"class":78},[68,77101,76733],{"class":302},[68,77103,77104,77106,77108,77110,77112,77114,77116,77119,77121,77123,77125,77127,77129,77131],{"class":70,"line":4094},[68,77105,75230],{"class":78},[68,77107,59725],{"class":74},[68,77109,1640],{"class":78},[68,77111,2212],{"class":1742},[68,77113,2593],{"class":316},[68,77115,76715],{"class":49461},[68,77117,77118],{"class":316},"?$",[68,77120,2212],{"class":1742},[68,77122,2186],{"class":78},[68,77124,76722],{"class":74},[68,77126,1640],{"class":78},[68,77128,76756],{"class":1742},[68,77130,76730],{"class":78},[68,77132,76856],{"class":302},[68,77134,77135,77137,77139,77141,77143,77145,77147,77149,77151,77153,77155,77157,77159,77161],{"class":70,"line":4100},[68,77136,75230],{"class":78},[68,77138,59725],{"class":74},[68,77140,1640],{"class":78},[68,77142,2212],{"class":1742},[68,77144,2593],{"class":316},[68,77146,76715],{"class":49461},[68,77148,77118],{"class":316},[68,77150,2212],{"class":1742},[68,77152,2186],{"class":78},[68,77154,76722],{"class":74},[68,77156,1640],{"class":78},[68,77158,76924],{"class":1742},[68,77160,76730],{"class":78},[68,77162,76929],{"class":302},[68,77164,77165,77167,77169,77171,77173,77175,77177,77179,77181,77183,77185,77187,77189,77191],{"class":70,"line":4106},[68,77166,75230],{"class":78},[68,77168,59725],{"class":74},[68,77170,1640],{"class":78},[68,77172,2212],{"class":1742},[68,77174,2593],{"class":316},[68,77176,76715],{"class":49461},[68,77178,77118],{"class":316},[68,77180,2212],{"class":1742},[68,77182,2186],{"class":78},[68,77184,76722],{"class":74},[68,77186,1640],{"class":78},[68,77188,76956],{"class":1742},[68,77190,76730],{"class":78},[68,77192,76856],{"class":302},[68,77194,77195],{"class":70,"line":4111},[68,77196,3890],{"emptyLinePlaceholder":1567},[68,77198,77199],{"class":70,"line":9437},[68,77200,77201],{"class":302},"    \u002F\u002F {n}写几，就必须出现几次\n",[68,77203,77204,77206,77208,77210,77212,77214,77216,77219,77221,77223,77225,77227,77230,77233],{"class":70,"line":9461},[68,77205,75230],{"class":78},[68,77207,59725],{"class":74},[68,77209,1640],{"class":78},[68,77211,2212],{"class":1742},[68,77213,2593],{"class":316},[68,77215,76715],{"class":49461},[68,77217,77218],{"class":316},"{4}$",[68,77220,2212],{"class":1742},[68,77222,2186],{"class":78},[68,77224,76722],{"class":74},[68,77226,1640],{"class":78},[68,77228,77229],{"class":1742},"'哈哈哈哈'",[68,77231,77232],{"class":78},")) ",[68,77234,76733],{"class":302},[68,77236,77237],{"class":70,"line":9466},[68,77238,3890],{"emptyLinePlaceholder":1567},[68,77240,77241],{"class":70,"line":9472},[68,77242,77243],{"class":302},"    \u002F\u002F {n,}大于等于n次\n",[68,77245,77246,77248,77250,77252,77254,77256,77258,77261,77263,77265,77267,77269,77271,77273],{"class":70,"line":9499},[68,77247,75230],{"class":78},[68,77249,59725],{"class":74},[68,77251,1640],{"class":78},[68,77253,2212],{"class":1742},[68,77255,2593],{"class":316},[68,77257,76715],{"class":49461},[68,77259,77260],{"class":316},"{4,}$",[68,77262,2212],{"class":1742},[68,77264,2186],{"class":78},[68,77266,76722],{"class":74},[68,77268,1640],{"class":78},[68,77270,77229],{"class":1742},[68,77272,77232],{"class":78},[68,77274,76733],{"class":302},[68,77276,77277,77279,77281,77283,77285,77287,77289,77291,77293,77295,77297,77299,77302,77304],{"class":70,"line":9504},[68,77278,75230],{"class":78},[68,77280,59725],{"class":74},[68,77282,1640],{"class":78},[68,77284,2212],{"class":1742},[68,77286,2593],{"class":316},[68,77288,76715],{"class":49461},[68,77290,77260],{"class":316},[68,77292,2212],{"class":1742},[68,77294,2186],{"class":78},[68,77296,76722],{"class":74},[68,77298,1640],{"class":78},[68,77300,77301],{"class":1742},"'哈哈哈哈哈'",[68,77303,77232],{"class":78},[68,77305,76733],{"class":302},[68,77307,77308],{"class":70,"line":9510},[68,77309,3890],{"emptyLinePlaceholder":1567},[68,77311,77312],{"class":70,"line":9522},[68,77313,77314],{"class":302},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[68,77316,77317,77319,77321,77323,77325,77327,77329,77332,77334,77336,77338,77340,77342,77344],{"class":70,"line":9534},[68,77318,75230],{"class":78},[68,77320,59725],{"class":74},[68,77322,1640],{"class":78},[68,77324,2212],{"class":1742},[68,77326,2593],{"class":316},[68,77328,76715],{"class":49461},[68,77330,77331],{"class":316},"{4,6}$",[68,77333,2212],{"class":1742},[68,77335,2186],{"class":78},[68,77337,76722],{"class":74},[68,77339,1640],{"class":78},[68,77341,77229],{"class":1742},[68,77343,77232],{"class":78},[68,77345,76733],{"class":302},[68,77347,77348,77350,77352,77354,77356,77358,77360,77362,77364,77366,77368,77370,77372,77374],{"class":70,"line":9546},[68,77349,75230],{"class":78},[68,77351,59725],{"class":74},[68,77353,1640],{"class":78},[68,77355,2212],{"class":1742},[68,77357,2593],{"class":316},[68,77359,76715],{"class":49461},[68,77361,77331],{"class":316},[68,77363,2212],{"class":1742},[68,77365,2186],{"class":78},[68,77367,76722],{"class":74},[68,77369,1640],{"class":78},[68,77371,77301],{"class":1742},[68,77373,77232],{"class":78},[68,77375,76733],{"class":302},[68,77377,77378,77380,77382,77384,77386,77388,77390,77392,77394,77396,77398,77400,77403,77405],{"class":70,"line":11204},[68,77379,75230],{"class":78},[68,77381,59725],{"class":74},[68,77383,1640],{"class":78},[68,77385,2212],{"class":1742},[68,77387,2593],{"class":316},[68,77389,76715],{"class":49461},[68,77391,77331],{"class":316},[68,77393,2212],{"class":1742},[68,77395,2186],{"class":78},[68,77397,76722],{"class":74},[68,77399,1640],{"class":78},[68,77401,77402],{"class":1742},"'哈哈哈哈哈哈哈'",[68,77404,77232],{"class":78},[68,77406,76856],{"class":302},[68,77408,77409],{"class":70,"line":11229},[68,77410,3890],{"emptyLinePlaceholder":1567},[68,77412,77413],{"class":70,"line":11252},[68,77414,77415],{"class":302},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[68,77417,77418,77420,77422,77424,77426,77428,77431,77433,77435,77437,77439,77441,77444,77446],{"class":70,"line":11276},[68,77419,75230],{"class":78},[68,77421,59725],{"class":74},[68,77423,1640],{"class":78},[68,77425,2212],{"class":1742},[68,77427,2593],{"class":316},[68,77429,77430],{"class":85},"[abc]",[68,77432,1931],{"class":316},[68,77434,2212],{"class":1742},[68,77436,2186],{"class":78},[68,77438,76722],{"class":74},[68,77440,1640],{"class":78},[68,77442,77443],{"class":1742},"'a'",[68,77445,76730],{"class":78},[68,77447,76733],{"class":302},[68,77449,77450,77452,77454,77456,77458,77460,77462,77464,77466,77468,77470,77472,77475,77477],{"class":70,"line":11281},[68,77451,75230],{"class":78},[68,77453,59725],{"class":74},[68,77455,1640],{"class":78},[68,77457,2212],{"class":1742},[68,77459,2593],{"class":316},[68,77461,77430],{"class":85},[68,77463,1931],{"class":316},[68,77465,2212],{"class":1742},[68,77467,2186],{"class":78},[68,77469,76722],{"class":74},[68,77471,1640],{"class":78},[68,77473,77474],{"class":1742},"'b'",[68,77476,76730],{"class":78},[68,77478,76733],{"class":302},[68,77480,77481,77483,77485,77487,77489,77491,77493,77495,77497,77499,77501,77503,77506,77508],{"class":70,"line":11286},[68,77482,75230],{"class":78},[68,77484,59725],{"class":74},[68,77486,1640],{"class":78},[68,77488,2212],{"class":1742},[68,77490,2593],{"class":316},[68,77492,77430],{"class":85},[68,77494,1931],{"class":316},[68,77496,2212],{"class":1742},[68,77498,2186],{"class":78},[68,77500,76722],{"class":74},[68,77502,1640],{"class":78},[68,77504,77505],{"class":1742},"'c'",[68,77507,76730],{"class":78},[68,77509,76733],{"class":302},[68,77511,77512,77514,77516,77518,77520,77522,77524,77526,77528,77530,77533,77535],{"class":70,"line":11291},[68,77513,75230],{"class":78},[68,77515,59725],{"class":74},[68,77517,1640],{"class":78},[68,77519,2212],{"class":1742},[68,77521,77430],{"class":85},[68,77523,2212],{"class":1742},[68,77525,2186],{"class":78},[68,77527,76722],{"class":74},[68,77529,1640],{"class":78},[68,77531,77532],{"class":1742},"'ab'",[68,77534,76730],{"class":78},[68,77536,76733],{"class":302},[68,77538,77539,77541,77543,77545,77547,77549,77551,77553,77555,77557,77559,77561,77563,77565],{"class":70,"line":11300},[68,77540,75230],{"class":78},[68,77542,59725],{"class":74},[68,77544,1640],{"class":78},[68,77546,2212],{"class":1742},[68,77548,2593],{"class":316},[68,77550,77430],{"class":85},[68,77552,1931],{"class":316},[68,77554,2212],{"class":1742},[68,77556,2186],{"class":78},[68,77558,76722],{"class":74},[68,77560,1640],{"class":78},[68,77562,77532],{"class":1742},[68,77564,76730],{"class":78},[68,77566,77567],{"class":302},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[68,77569,77570,77572,77574,77576,77578,77580,77582,77585,77587,77589,77591,77593,77595,77597],{"class":70,"line":11305},[68,77571,75230],{"class":78},[68,77573,59725],{"class":74},[68,77575,1640],{"class":78},[68,77577,2212],{"class":1742},[68,77579,2593],{"class":316},[68,77581,77430],{"class":85},[68,77583,77584],{"class":316},"{2}$",[68,77586,2212],{"class":1742},[68,77588,2186],{"class":78},[68,77590,76722],{"class":74},[68,77592,1640],{"class":78},[68,77594,77532],{"class":1742},[68,77596,76730],{"class":78},[68,77598,77599],{"class":302},"\u002F\u002Ftrue   可以选两个\n",[68,77601,77602,77604,77606,77608,77610,77612,77615,77617,77619,77621,77623,77625,77628,77630],{"class":70,"line":11311},[68,77603,75230],{"class":78},[68,77605,59725],{"class":74},[68,77607,1640],{"class":78},[68,77609,2212],{"class":1742},[68,77611,2593],{"class":316},[68,77613,77614],{"class":85},"[a-z]",[68,77616,1931],{"class":316},[68,77618,2212],{"class":1742},[68,77620,2186],{"class":78},[68,77622,76722],{"class":74},[68,77624,1640],{"class":78},[68,77626,77627],{"class":1742},"'p'",[68,77629,76786],{"class":78},[68,77631,77632],{"class":302},"\u002F\u002Ftrue   依然只能选一个\n",[68,77634,77635,77637,77639,77641,77643,77645,77648,77650,77652,77654,77656,77658,77660,77662],{"class":70,"line":11332},[68,77636,75230],{"class":78},[68,77638,59725],{"class":74},[68,77640,1640],{"class":78},[68,77642,2212],{"class":1742},[68,77644,2593],{"class":316},[68,77646,77647],{"class":85},"[A-Z]",[68,77649,1931],{"class":316},[68,77651,2212],{"class":1742},[68,77653,2186],{"class":78},[68,77655,76722],{"class":74},[68,77657,1640],{"class":78},[68,77659,77627],{"class":1742},[68,77661,76786],{"class":78},[68,77663,76856],{"class":302},[68,77665,77666,77668,77670,77672,77674,77676,77678,77680,77682,77684,77686,77688,77691,77693],{"class":70,"line":11338},[68,77667,75230],{"class":78},[68,77669,59725],{"class":74},[68,77671,1640],{"class":78},[68,77673,2212],{"class":1742},[68,77675,2593],{"class":316},[68,77677,77647],{"class":85},[68,77679,1931],{"class":316},[68,77681,2212],{"class":1742},[68,77683,2186],{"class":78},[68,77685,76722],{"class":74},[68,77687,1640],{"class":78},[68,77689,77690],{"class":1742},"'P'",[68,77692,76786],{"class":78},[68,77694,76733],{"class":302},[68,77696,77697,77699,77701,77703,77705,77707,77710,77712,77714,77716,77718,77720,77723,77725],{"class":70,"line":11352},[68,77698,75230],{"class":78},[68,77700,59725],{"class":74},[68,77702,1640],{"class":78},[68,77704,2212],{"class":1742},[68,77706,2593],{"class":316},[68,77708,77709],{"class":85},"[0-9]",[68,77711,1931],{"class":316},[68,77713,2212],{"class":1742},[68,77715,2186],{"class":78},[68,77717,76722],{"class":74},[68,77719,1640],{"class":78},[68,77721,77722],{"class":1742},"'0'",[68,77724,76786],{"class":78},[68,77726,76733],{"class":302},[68,77728,77729,77731,77733,77735,77737,77739,77742,77744,77746,77748,77750,77752,77754,77756],{"class":70,"line":11358},[68,77730,75230],{"class":78},[68,77732,59725],{"class":74},[68,77734,1640],{"class":78},[68,77736,2212],{"class":1742},[68,77738,2593],{"class":316},[68,77740,77741],{"class":85},"[a-zA-Z0-9]",[68,77743,1931],{"class":316},[68,77745,2212],{"class":1742},[68,77747,2186],{"class":78},[68,77749,76722],{"class":74},[68,77751,1640],{"class":78},[68,77753,77627],{"class":1742},[68,77755,76730],{"class":78},[68,77757,76733],{"class":302},[68,77759,77760,77762,77764],{"class":70,"line":11385},[68,77761,53899],{"class":78},[68,77763,53295],{"class":52784},[68,77765,52791],{"class":78},[68,77767,77768,77770,77772],{"class":70,"line":11394},[68,77769,53267],{"class":78},[68,77771,53282],{"class":52784},[68,77773,52791],{"class":78},[68,77775,77776],{"class":70,"line":11400},[68,77777,3890],{"emptyLinePlaceholder":1567},[68,77779,77780,77782,77784],{"class":70,"line":11408},[68,77781,53267],{"class":78},[68,77783,52119],{"class":52784},[68,77785,52791],{"class":78},[245,77787,77789],{"id":77788},"_3624-修饰符","3.6.2.4 修饰符",[170,77791,77792],{},[801,77793],{"alt":63,"src":77794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[170,77796,77797],{},"replace是个方法，使用的时候一定不要忘记括号()",[170,77799,77800],{},[801,77801],{"alt":63,"src":77802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[58,77804,77806],{"className":52117,"code":77805,"language":52119,"meta":63,"style":63},"\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",[65,77807,77808,77818,77832,77840,77854,77874,77886,77894,77902,77910,77942,77973,77978,78010,78021,78054,78063,78071,78079],{"__ignoreMap":63},[68,77809,77810,77812,77814,77816],{"class":70,"line":71},[68,77811,52781],{"class":78},[68,77813,52785],{"class":52784},[68,77815,52788],{"class":74},[68,77817,52791],{"class":78},[68,77819,77820,77822,77824,77826,77828,77830],{"class":70,"line":82},[68,77821,2537],{"class":78},[68,77823,52119],{"class":52784},[68,77825,52800],{"class":74},[68,77827,1685],{"class":78},[68,77829,52805],{"class":1742},[68,77831,52791],{"class":78},[68,77833,77834,77836,77838],{"class":70,"line":98},[68,77835,2537],{"class":78},[68,77837,52818],{"class":52784},[68,77839,52791],{"class":78},[68,77841,77842,77844,77846,77848,77850,77852],{"class":70,"line":104},[68,77843,53626],{"class":78},[68,77845,52828],{"class":52784},[68,77847,52831],{"class":74},[68,77849,1685],{"class":78},[68,77851,52836],{"class":1742},[68,77853,52791],{"class":78},[68,77855,77856,77858,77860,77862,77864,77866,77868,77870,77872],{"class":70,"line":112},[68,77857,53626],{"class":78},[68,77859,52828],{"class":52784},[68,77861,16408],{"class":74},[68,77863,1685],{"class":78},[68,77865,52875],{"class":1742},[68,77867,52855],{"class":74},[68,77869,1685],{"class":78},[68,77871,52882],{"class":1742},[68,77873,52791],{"class":78},[68,77875,77876,77878,77880,77882,77884],{"class":70,"line":124},[68,77877,53626],{"class":78},[68,77879,52891],{"class":52784},[68,77881,52894],{"class":78},[68,77883,52891],{"class":52784},[68,77885,52791],{"class":78},[68,77887,77888,77890,77892],{"class":70,"line":1496},[68,77889,53267],{"class":78},[68,77891,52818],{"class":52784},[68,77893,52791],{"class":78},[68,77895,77896,77898,77900],{"class":70,"line":1502},[68,77897,2537],{"class":78},[68,77899,53282],{"class":52784},[68,77901,52791],{"class":78},[68,77903,77904,77906,77908],{"class":70,"line":1510},[68,77905,53626],{"class":78},[68,77907,53295],{"class":52784},[68,77909,52791],{"class":78},[68,77911,77912,77914,77916,77918,77920,77922,77925,77927,77929,77931,77933,77935,77938,77940],{"class":70,"line":1521},[68,77913,75230],{"class":78},[68,77915,59725],{"class":74},[68,77917,1640],{"class":78},[68,77919,2212],{"class":1742},[68,77921,2593],{"class":316},[68,77923,77924],{"class":49461},"java",[68,77926,1931],{"class":316},[68,77928,2212],{"class":1742},[68,77930,2186],{"class":78},[68,77932,76722],{"class":74},[68,77934,1640],{"class":78},[68,77936,77937],{"class":1742},"'java'",[68,77939,77232],{"class":78},[68,77941,76733],{"class":302},[68,77943,77944,77946,77948,77950,77952,77954,77956,77958,77960,77962,77964,77966,77969,77971],{"class":70,"line":3103},[68,77945,75230],{"class":78},[68,77947,59725],{"class":74},[68,77949,1640],{"class":78},[68,77951,2212],{"class":1742},[68,77953,2593],{"class":316},[68,77955,77924],{"class":49461},[68,77957,1931],{"class":316},[68,77959,2212],{"class":1742},[68,77961,2186],{"class":78},[68,77963,76722],{"class":74},[68,77965,1640],{"class":78},[68,77967,77968],{"class":1742},"'Java'",[68,77970,77232],{"class":78},[68,77972,76856],{"class":302},[68,77974,77975],{"class":70,"line":3108},[68,77976,77977],{"class":302},"    \u002F\u002F 不区分大小写、\n",[68,77979,77980,77982,77984,77986,77988,77990,77992,77994,77996,77998,78000,78002,78004,78006,78008],{"class":70,"line":3114},[68,77981,75230],{"class":78},[68,77983,59725],{"class":74},[68,77985,1640],{"class":78},[68,77987,2212],{"class":1742},[68,77989,2593],{"class":316},[68,77991,77924],{"class":49461},[68,77993,1931],{"class":316},[68,77995,2212],{"class":1742},[68,77997,2070],{"class":316},[68,77999,2186],{"class":78},[68,78001,76722],{"class":74},[68,78003,1640],{"class":78},[68,78005,77968],{"class":1742},[68,78007,77232],{"class":78},[68,78009,76733],{"class":302},[68,78011,78012,78014,78016,78018],{"class":70,"line":3119},[68,78013,12709],{"class":316},[68,78015,75396],{"class":85},[68,78017,15052],{"class":316},[68,78019,78020],{"class":1742}," 'java是一门编程语言，学完java工资很高'\n",[68,78022,78023,78025,78028,78030,78033,78036,78038,78040,78042,78044,78047,78049,78052],{"class":70,"line":3133},[68,78024,12709],{"class":316},[68,78026,78027],{"class":85}," result",[68,78029,15052],{"class":316},[68,78031,78032],{"class":78}," str.",[68,78034,78035],{"class":74},"replace",[68,78037,1640],{"class":78},[68,78039,2212],{"class":1742},[68,78041,77924],{"class":49461},[68,78043,2212],{"class":1742},[68,78045,78046],{"class":316},"ig",[68,78048,13923],{"class":78},[68,78050,78051],{"class":1742},"'前端'",[68,78053,1646],{"class":78},[68,78055,78056,78058,78060],{"class":70,"line":3138},[68,78057,75230],{"class":78},[68,78059,59725],{"class":74},[68,78061,78062],{"class":78},"(result)\n",[68,78064,78065,78067,78069],{"class":70,"line":3144},[68,78066,53899],{"class":78},[68,78068,53295],{"class":52784},[68,78070,52791],{"class":78},[68,78072,78073,78075,78077],{"class":70,"line":3165},[68,78074,53267],{"class":78},[68,78076,53282],{"class":52784},[68,78078,52791],{"class":78},[68,78080,78081,78083,78085],{"class":70,"line":3170},[68,78082,53267],{"class":78},[68,78084,52119],{"class":52784},[68,78086,52791],{"class":78},[1553,78088,78089],{},"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":63,"searchDepth":82,"depth":82,"links":78091},[78092,78102,78114,78131,78138,78146],{"id":54842,"depth":82,"text":54843,"children":78093},[78094,78095,78096,78097,78098,78099,78100,78101],{"id":54846,"depth":98,"text":54847},{"id":54879,"depth":98,"text":54880},{"id":54918,"depth":98,"text":54919},{"id":55076,"depth":98,"text":55077},{"id":55124,"depth":98,"text":55125},{"id":55260,"depth":98,"text":55261},{"id":55582,"depth":98,"text":55583},{"id":58567,"depth":98,"text":58568},{"id":58595,"depth":82,"text":58596,"children":78103},[78104,78105,78106,78107,78108,78109,78110,78111,78112,78113],{"id":58599,"depth":98,"text":58600},{"id":58622,"depth":98,"text":58623},{"id":59537,"depth":98,"text":59538},{"id":60227,"depth":98,"text":60228},{"id":60509,"depth":98,"text":60510},{"id":64670,"depth":98,"text":64671},{"id":64840,"depth":98,"text":64841},{"id":64968,"depth":98,"text":64969},{"id":64993,"depth":98,"text":64994},{"id":66382,"depth":98,"text":66383},{"id":67535,"depth":82,"text":67536,"children":78115},[78116,78117,78118,78119,78120,78121,78122,78123,78124,78125,78126,78127,78128,78129,78130],{"id":67539,"depth":98,"text":67540},{"id":68193,"depth":98,"text":68194},{"id":69888,"depth":98,"text":69889},{"id":69929,"depth":98,"text":69930},{"id":69971,"depth":98,"text":69972},{"id":69985,"depth":98,"text":69986},{"id":70034,"depth":98,"text":70035},{"id":70046,"depth":98,"text":70047},{"id":70061,"depth":98,"text":70062},{"id":70097,"depth":98,"text":70098},{"id":70178,"depth":98,"text":70179},{"id":70306,"depth":98,"text":70307},{"id":70318,"depth":98,"text":70319},{"id":70337,"depth":98,"text":70338},{"id":72448,"depth":98,"text":72449},{"id":72467,"depth":82,"text":72468,"children":78132},[78133,78134,78135,78136,78137],{"id":72488,"depth":98,"text":72489},{"id":72508,"depth":98,"text":72509},{"id":72557,"depth":98,"text":72558},{"id":72682,"depth":98,"text":72683},{"id":72863,"depth":98,"text":72864},{"id":72881,"depth":82,"text":72882,"children":78139},[78140,78141,78142,78143,78144,78145],{"id":72896,"depth":98,"text":72897},{"id":72955,"depth":98,"text":72956},{"id":72979,"depth":98,"text":72980},{"id":73299,"depth":98,"text":73300},{"id":73331,"depth":98,"text":73332},{"id":73354,"depth":98,"text":73355},{"id":76421,"depth":82,"text":76422,"children":78147},[78148,78149],{"id":76455,"depth":98,"text":76456},{"id":76494,"depth":98,"text":76495},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54814,"description":1564},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78156,"title":78157,"body":78158,"description":1564,"extension":1565,"meta":94293,"navigation":1567,"path":94294,"seo":94295,"stem":94296,"__hash__":94297},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78159,"toc":94229},[78160,78163,78166,78170,78174,78179,78184,78195,78199,78204,78207,78211,78214,78219,78223,78227,78230,78235,78238,78242,78245,78253,78256,78260,78265,78270,78273,78277,78282,78287,78290,78294,78299,78302,78307,78310,78315,78318,78323,78328,78331,78334,78338,78343,78348,78351,78355,78359,78362,78365,78368,78372,78376,78381,78386,78389,78393,78398,78403,78406,78409,78412,78415,78418,78421,78424,78427,78430,78435,78439,78444,78449,78452,78455,78458,78461,78464,78467,78470,78473,78477,78481,78484,78487,78490,78495,78497,78500,78503,78506,78509,78512,78515,78518,78521,78524,78527,78530,78533,78536,78541,78546,78551,78554,78558,78561,78566,78570,78572,78583,78588,78689,78692,78695,78698,78701,78704,78707,78710,78713,78715,78718,78721,78724,78727,78730,78732,78735,78738,78741,78744,78747,78750,78752,78755,78757,78759,78762,78766,78770,78773,78776,78779,78782,78785,78788,78791,78794,78797,78802,78922,78925,78928,78933,78936,78939,78942,78945,78950,78953,78956,78959,78962,78967,78970,79070,79135,79209,79213,79216,79219,79223,79226,79240,79269,79272,79275,79278,79281,79284,79287,79290,79292,79295,79298,79301,79304,79308,79313,79317,79322,79397,79400,79583,79586,79589,79592,79595,79598,79600,79603,79606,79609,79612,79615,79618,79620,79624,79627,79632,79635,79638,79641,79644,79646,79651,79654,79657,79660,79663,79665,79670,79673,79676,79678,79680,79683,79687,79690,79693,79698,79701,79704,79707,79757,79762,79766,79771,79774,79843,79846,79855,79859,79864,79867,79870,79878,79881,79898,81700,81704,81708,81713,81716,81720,81726,81732,81884,81889,81894,81897,81900,81903,81906,81909,81912,81915,81918,81921,81924,81927,81930,81935,81939,81942,81953,81957,81962,81965,81968,81971,81974,81977,81979,81982,81985,81988,81991,81993,82010,82013,82017,82020,82025,82030,82033,82036,82040,82043,82046,82055,82058,82062,82065,82070,82075,82142,82146,82149,82152,82157,82162,82248,82253,82257,82260,82263,82278,82281,82286,82290,82295,82404,82407,82418,82568,82572,82577,82686,82690,82695,82700,82705,82708,82715,82735,82771,82935,82940,82943,82948,82955,82958,82961,82964,83023,83079,83135,83139,83144,83459,83462,83466,83469,83474,83583,83588,83592,83597,83601,83672,83676,83678,83681,83684,83722,83998,84002,84018,84084,84118,84122,84125,84130,84159,84166,84175,84180,84195,84200,84209,84212,84349,84353,84415,84419,84424,84669,84673,84678,84681,84684,84687,84690,84694,84699,86280,86284,86288,86294,86297,86302,86306,86309,86314,86317,86328,86332,86337,86341,86346,86351,86354,86359,86363,86367,86370,86375,86380,86383,86386,86389,86511,86516,86618,86621,86624,86628,86633,86805,86810,86814,86817,86822,86888,86893,86896,87027,87030,87035,87038,87041,87132,87137,87140,87143,87146,87149,87154,87159,87162,87167,87172,87177,87181,87184,87187,87192,87197,87202,87207,87261,87264,87267,87272,87275,87278,87283,87288,87293,87297,87302,87316,87321,87324,87329,87333,87338,87343,87348,87353,87358,87363,87368,87373,87376,87380,87385,87388,87391,87394,87399,87404,87407,87410,87414,87417,87420,87425,87430,87435,87440,87443,87448,87453,87514,87519,87522,87527,88767,88772,88776,88780,88785,88788,88793,88798,88801,88806,88808,88813,88817,88820,88823,88834,88838,88843,88848,88903,88908,88913,88918,89129,89134,89138,89143,89146,89148,89151,89154,89601,89606,89613,89619,89622,89625,89889,89894,89898,90163,90168,90172,90177,90182,90187,90192,90523,90526,90531,90536,90539,90543,90547,90552,90557,90562,90567,90572,90577,90581,90584,90589,90594,90597,90671,90676,90681,90686,90688,90691,91061,91066,91071,91076,91079,91082,91184,91189,91194,91297,91301,91306,91310,91314,91319,91324,91327,91332,91335,91338,91731,91736,91739,91742,91745,91748,92268,92272,92277,92282,92287,92290,92295,92298,92301,92683,92688,92690,92692,92695,92698,93210,93214,93275,93278,93281,93284,93288,93291,93296,93301,94226],[10,78161,78157],{"id":78162},"_4js进阶",[170,78164,78165],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78167,78169],{"id":78168},"_41-作用域","4.1 作用域",[19,78171,78173],{"id":78172},"_411-局部作用域","4.1.1 局部作用域",[170,78175,78176],{},[801,78177],{"alt":63,"src":78178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[170,78180,78181],{},[801,78182],{"alt":63,"src":78183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[24,78185,78186,78189,78192],{},[27,78187,78188],{},"函数作用域在函数内部",[27,78190,78191],{},"块级作用域在{}",[27,78193,78194],{},"对象的那个{}不是作用域，不是块作用域",[19,78196,78198],{"id":78197},"_412-全局作用域","4.1.2 全局作用域",[170,78200,78201],{},[801,78202],{"alt":63,"src":78203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[170,78205,78206],{},"window.a=10不要这样写",[19,78208,78210],{"id":78209},"_413-作用域链","4.1.3 作用域链",[170,78212,78213],{},"变量查找机制",[170,78215,78216],{},[801,78217],{"alt":63,"src":78218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78220,78222],{"id":78221},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,78224,78226],{"id":78225},"_421-大体介绍","4.2.1 大体介绍",[170,78228,78229],{},"垃圾回收机制(Garbage Collection) 简称 GC",[170,78231,78232],{},[801,78233],{"alt":63,"src":78234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[170,78236,78237],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,78239,78241],{"id":78240},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[170,78243,78244],{},"堆栈空间分配区别：",[263,78246,78247,78250],{},[27,78248,78249],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[27,78251,78252],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[170,78254,78255],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[245,78257,78259],{"id":78258},"_4221-引用计数","4.2.2.1 引用计数",[170,78261,78262],{},[801,78263],{"alt":63,"src":78264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[170,78266,78267],{},[801,78268],{"alt":63,"src":78269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[170,78271,78272],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[245,78274,78276],{"id":78275},"_4222-标记清除法","4.2.2.2 标记清除法",[170,78278,78279],{},[801,78280],{"alt":63,"src":78281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[170,78283,78284],{},[801,78285],{"alt":63,"src":78286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[170,78288,78289],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78291,78293],{"id":78292},"_43-闭包","4.3 闭包",[170,78295,78296],{},[801,78297],{"alt":63,"src":78298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[170,78300,78301],{},"闭包：内层函数+外层函数的变量",[170,78303,78304],{},[801,78305],{"alt":63,"src":78306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[170,78308,78309],{},"closure就是闭包",[170,78311,78312],{},[801,78313],{"alt":63,"src":78314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[170,78316,78317],{},"内层函数必须包含外层函数的变量才是闭包",[170,78319,78320],{},[801,78321],{"alt":63,"src":78322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[170,78324,78325],{},[801,78326],{"alt":63,"src":78327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[170,78329,78330],{},"闭包可能会引起内存泄漏",[170,78332,78333],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78335,78337],{"id":78336},"_44-变量提升","4.4 变量提升",[170,78339,78340],{},[801,78341],{"alt":63,"src":78342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[170,78344,78345],{},[801,78346],{"alt":63,"src":78347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[170,78349,78350],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78352,78354],{"id":78353},"_45-函数进阶","4.5 函数进阶",[19,78356,78358],{"id":78357},"_451-函数提升","4.5.1 函数提升",[170,78360,78361],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[170,78363,78364],{},"只提升函数声明，不提升函数调用",[53295,78366,78367],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[19,78369,78371],{"id":78370},"_452-函数参数","4.5.2 函数参数",[245,78373,78375],{"id":78374},"_4521-动态参数","4.5.2.1 动态参数",[170,78377,78378],{},[801,78379],{"alt":63,"src":78380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[170,78382,78383],{},[801,78384],{"alt":63,"src":78385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[170,78387,78388],{},"箭头函数里边没有arguments",[245,78390,78392],{"id":78391},"_4522-剩余参数","4.5.2.2 剩余参数",[170,78394,78395],{},[801,78396],{"alt":63,"src":78397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[170,78399,78400],{},[801,78401],{"alt":63,"src":78402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[170,78404,78405],{},"剩余参数使用的时候不需要写...",[170,78407,78408],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[170,78410,78411],{},"  function getSum(a,b,...arr) {",[170,78413,78414],{},"  console.log(11)",[170,78416,78417],{},"  }",[170,78419,78420],{},"  getSum(1,2,3,4)",[170,78422,78423],{},"  将1传给a，2传给b，剩下的传给剩余参数",[170,78425,78426],{},"  getSum(1,2)",[170,78428,78429],{},"  将1传给a，2传给b，剩余参数为一个空数组",[170,78431,78432],{},[801,78433],{"alt":63,"src":78434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[245,78436,78438],{"id":78437},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[170,78440,78441],{},[801,78442],{"alt":63,"src":78443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[170,78445,78446],{},[801,78447],{"alt":63,"src":78448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[170,78450,78451],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[170,78453,78454],{},"展开运算符可以用于数组之间的合并：",[170,78456,78457],{},"const arr1 = [1, 2, 3]",[170,78459,78460],{},"const arr2 = [3, 4, 5]",[170,78462,78463],{},"const arr = [...arr1, ...arr2]",[170,78465,78466],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[170,78468,78469],{},"剩余参数：函数参数使用，得到真数组",[170,78471,78472],{},"展开运算符：数组中使用，数组展开",[19,78474,78476],{"id":78475},"_453-箭头函数","4.5.3 箭头函数",[245,78478,78480],{"id":78479},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[170,78482,78483],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[170,78485,78486],{},"它不是万能的！！！",[170,78488,78489],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[170,78491,78492],{},[801,78493],{"alt":63,"src":78494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[170,78496,1669],{},[170,78498,78499],{},"① 只有一个形参的时候，可以省略小括号：",[170,78501,78502],{},"const fn=x=>{console.log(x)}",[170,78504,78505],{},"② 只有一行代码时可以省略大括号：",[170,78507,78508],{},"const fn=x=>console.log(11)",[170,78510,78511],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[170,78513,78514],{},"const fn=x=>x+x",[170,78516,78517],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[170,78519,78520],{},"⑤ 阻止表单默认提交：",[170,78522,78523],{},"const form = document.querySelector('form')",[170,78525,78526],{},"form.addEventListener('click', ev => ev.preventDefault())",[170,78528,78529],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[170,78531,78532],{},"const fn=uname=>({uname:uname})",[170,78534,78535],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[170,78537,78538],{},[801,78539],{"alt":63,"src":78540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[170,78542,78543],{},[801,78544],{"alt":63,"src":78545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[170,78547,78548],{},[801,78549],{"alt":63,"src":78550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[170,78552,78553],{},"一定不要忘记用()，有()就理解为自带return",[245,78555,78557],{"id":78556},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[170,78559,78560],{},"箭头函数是没有动态参数的arguments",[170,78562,78563],{},[801,78564],{"alt":63,"src":78565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[245,78567,78569],{"id":78568},"_4533-箭头函数this","4.5.3.3 箭头函数this",[170,78571,12820],{},[263,78573,78574,78577,78580],{},[27,78575,78576],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[27,78578,78579],{},"事件回调函数使用箭头函数时，this 为全局的 window",[27,78581,78582],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[170,78584,78585],{},[801,78586],{"alt":63,"src":78587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[58,78589,78591],{"className":54549,"code":78590,"language":54551,"meta":63,"style":63},"  \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",[65,78592,78593,78601,78606,78611,78616,78621,78626,78630,78635,78639,78643,78648,78653,78658,78662,78666,78671,78676,78681],{"__ignoreMap":63},[68,78594,78595,78597,78599],{"class":70,"line":71},[68,78596,53626],{"class":78},[68,78598,53295],{"class":52784},[68,78600,52791],{"class":78},[68,78602,78603],{"class":70,"line":82},[68,78604,78605],{"class":78},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[68,78607,78608],{"class":70,"line":98},[68,78609,78610],{"class":78},"    console.log(this) \u002F\u002F指向window\n",[68,78612,78613],{"class":70,"line":104},[68,78614,78615],{"class":78},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[68,78617,78618],{"class":70,"line":112},[68,78619,78620],{"class":78},"    function fn() {\n",[68,78622,78623],{"class":70,"line":124},[68,78624,78625],{"class":78},"      console.log(this)  \u002F\u002F指向window\n",[68,78627,78628],{"class":70,"line":1496},[68,78629,3677],{"class":78},[68,78631,78632],{"class":70,"line":1502},[68,78633,78634],{"class":78},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[68,78636,78637],{"class":70,"line":1510},[68,78638,3890],{"emptyLinePlaceholder":1567},[68,78640,78641],{"class":70,"line":1521},[68,78642,73001],{"class":78},[68,78644,78645],{"class":70,"line":3103},[68,78646,78647],{"class":78},"      name: 'andy',\n",[68,78649,78650],{"class":70,"line":3108},[68,78651,78652],{"class":78},"      sayHai: function () {\n",[68,78654,78655],{"class":70,"line":3114},[68,78656,78657],{"class":78},"        console.log(this)\n",[68,78659,78660],{"class":70,"line":3119},[68,78661,53880],{"class":78},[68,78663,78664],{"class":70,"line":3133},[68,78665,3677],{"class":78},[68,78667,78668],{"class":70,"line":3138},[68,78669,78670],{"class":78},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[68,78672,78673],{"class":70,"line":3144},[68,78674,78675],{"class":78},"    \u002F\u002F 2.箭头函数的this\n",[68,78677,78678],{"class":70,"line":3165},[68,78679,78680],{"class":78},"    const fn = () => console.log(this)\n",[68,78682,78683,78685,78687],{"class":70,"line":3170},[68,78684,53899],{"class":78},[68,78686,53295],{"class":52784},[68,78688,52791],{"class":78},[170,78690,78691],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[170,78693,78694],{},"const fn = () => console.log(this)",[170,78696,78697],{},"fn() \u002F\u002F指向window",[170,78699,78700],{},"\u002F\u002F 3.对象方法箭头函数 this",[170,78702,78703],{},"①",[170,78705,78706],{},"const obj = {",[170,78708,78709],{},"uname: 'pink老师',",[170,78711,78712],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[170,78714,2573],{},[170,78716,78717],{},"调用对象里边的函数",[170,78719,78720],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[170,78722,78723],{},"obj.sayHai()",[170,78725,78726],{},"②",[170,78728,78729],{},"const obj1 = {",[170,78731,78709],{},[170,78733,78734],{},"sayHai: function () {",[170,78736,78737],{},"let i = 10",[170,78739,78740],{},"const count = () => {",[170,78742,78743],{},"console.log(this)",[170,78745,78746],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[170,78748,78749],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[170,78751,2573],{},[170,78753,78754],{},"count()",[170,78756,2573],{},[170,78758,2573],{},[170,78760,78761],{},"obj1.sayHai()",[14,78763,78765],{"id":78764},"_46-解构赋值","4.6 解构赋值",[19,78767,78769],{"id":78768},"_461-数组解构","4.6.1 数组解构",[170,78771,78772],{},"以前要是使用数组中的值的话：",[170,78774,78775],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[170,78777,78778],{},"const arr=[100,60,80]",[170,78780,78781],{},"const max=arr[0]",[170,78783,78784],{},"const min=arr[1]",[170,78786,78787],{},"const avg=arr[2]",[170,78789,78790],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[170,78792,78793],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[170,78795,78796],{},"这个写法就类似于上边的那种用很多const的方法",[170,78798,78799],{},[801,78800],{"alt":63,"src":78801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[58,78803,78805],{"className":52117,"code":78804,"language":52119,"meta":63,"style":63},"①变量之间交换值:\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",[65,78806,78807,78812,78817,78822,78827,78832,78836,78840,78845,78849,78854,78859,78863,78868,78873,78884,78894,78899,78904,78909,78913,78917],{"__ignoreMap":63},[68,78808,78809],{"class":70,"line":71},[68,78810,78811],{"class":78},"①变量之间交换值:\n",[68,78813,78814],{"class":70,"line":82},[68,78815,78816],{"class":78},"let a=1\n",[68,78818,78819],{"class":70,"line":98},[68,78820,78821],{"class":78},"let b=2;\n",[68,78823,78824],{"class":70,"line":104},[68,78825,78826],{"class":78},"必须加这行代码，不然就会报错\n",[68,78828,78829],{"class":70,"line":112},[68,78830,78831],{"class":78},"[b,a]=[a,b]\n",[68,78833,78834],{"class":70,"line":124},[68,78835,3890],{"emptyLinePlaceholder":1567},[68,78837,78838],{"class":70,"line":1496},[68,78839,3890],{"emptyLinePlaceholder":1567},[68,78841,78842],{"class":70,"line":1502},[68,78843,78844],{"class":78},"可以写成下面的方式：\n",[68,78846,78847],{"class":70,"line":1510},[68,78848,78816],{"class":78},[68,78850,78851],{"class":70,"line":1521},[68,78852,78853],{"class":78},"let b=2\n",[68,78855,78856],{"class":70,"line":3103},[68,78857,78858],{"class":78},";[b,a]=[a,b]\n",[68,78860,78861],{"class":70,"line":3108},[68,78862,3890],{"emptyLinePlaceholder":1567},[68,78864,78865],{"class":70,"line":3114},[68,78866,78867],{"class":78},"②排序\n",[68,78869,78870],{"class":70,"line":3119},[68,78871,78872],{"class":78},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[68,78874,78875,78878,78881],{"class":70,"line":3133},[68,78876,78877],{"class":78},"for (let i = 0; i ",[68,78879,2537],{"class":78880},"s7hpK",[68,78882,78883],{"class":78}," arr1.length; i++) {\n",[68,78885,78886,78889,78891],{"class":70,"line":3138},[68,78887,78888],{"class":78},"   for (let j = 0; j ",[68,78890,2537],{"class":78880},[68,78892,78893],{"class":78}," arr1.length - 1; j++) {\n",[68,78895,78896],{"class":70,"line":3144},[68,78897,78898],{"class":78},"      if (arr1[j] > arr1[j + 1]) {\n",[68,78900,78901],{"class":70,"line":3165},[68,78902,78903],{"class":78},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[68,78905,78906],{"class":70,"line":3170},[68,78907,78908],{"class":78},"       }\n",[68,78910,78911],{"class":70,"line":3184},[68,78912,5799],{"class":78},[68,78914,78915],{"class":70,"line":3189},[68,78916,101],{"class":78},[68,78918,78919],{"class":70,"line":3218},[68,78920,78921],{"class":78},"console.log(arr1)\n",[170,78923,78924],{},"数组解构的细节：",[170,78926,78927],{},"①变量多，单元值少",[170,78929,78930],{},[801,78931],{"alt":63,"src":78932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[170,78934,78935],{},"防止出现undefined的方法：",[170,78937,78938],{},"const [a=0,b=0] =[1]",[170,78940,78941],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[170,78943,78944],{},"②变量少，单元值多",[170,78946,78947],{},[801,78948],{"alt":63,"src":78949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[170,78951,78952],{},"此时可以使用剩余参数来接收多余的值",[170,78954,78955],{},"const [a,b,...c]=[1,2,3,4]",[170,78957,78958],{},"console.log(c) 输出[3,4]",[170,78960,78961],{},"③可以按需导入，忽略某些返回值",[170,78963,78964],{},[801,78965],{"alt":63,"src":78966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[170,78968,78969],{},"④支持多维数组的结构",[58,78971,78975],{"className":78972,"code":78973,"language":78974,"meta":63,"style":63},"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",[65,78976,78977,79005,79021,79036,79051],{"__ignoreMap":63},[68,78978,78979,78981,78983,78985,78987,78989,78991,78993,78996,78998,79000,79002],{"class":70,"line":71},[68,78980,8281],{"class":316},[68,78982,53315],{"class":78},[68,78984,1685],{"class":316},[68,78986,53708],{"class":78},[68,78988,1846],{"class":85},[68,78990,13923],{"class":78},[68,78992,1715],{"class":85},[68,78994,78995],{"class":78},", [",[68,78997,1709],{"class":85},[68,78999,13923],{"class":78},[68,79001,1922],{"class":85},[68,79003,79004],{"class":78},"]]\n",[68,79006,79007,79010,79012,79014,79016,79018],{"class":70,"line":82},[68,79008,79009],{"class":78},"console.",[68,79011,59725],{"class":74},[68,79013,5341],{"class":78},[68,79015,1248],{"class":85},[68,79017,5706],{"class":78},[68,79019,79020],{"class":302},"  \u002F\u002F1\n",[68,79022,79023,79025,79027,79029,79031,79033],{"class":70,"line":98},[68,79024,79009],{"class":78},[68,79026,59725],{"class":74},[68,79028,5341],{"class":78},[68,79030,1846],{"class":85},[68,79032,5706],{"class":78},[68,79034,79035],{"class":302},"  \u002F\u002F2\n",[68,79037,79038,79040,79042,79044,79046,79048],{"class":70,"line":104},[68,79039,79009],{"class":78},[68,79041,59725],{"class":74},[68,79043,5341],{"class":78},[68,79045,1715],{"class":85},[68,79047,5706],{"class":78},[68,79049,79050],{"class":302},"  \u002F\u002F[3,4]\n",[68,79052,79053,79055,79057,79059,79061,79063,79065,79067],{"class":70,"line":112},[68,79054,79009],{"class":78},[68,79056,59725],{"class":74},[68,79058,5341],{"class":78},[68,79060,1715],{"class":85},[68,79062,6391],{"class":78},[68,79064,1248],{"class":85},[68,79066,5706],{"class":78},[68,79068,79069],{"class":302},"  \u002F\u002F3\n",[58,79071,79073],{"className":78972,"code":79072,"language":78974,"meta":63,"style":63},"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",[65,79074,79075,79102,79113,79124],{"__ignoreMap":63},[68,79076,79077,79079,79082,79084,79086,79088,79090,79092,79094,79096,79098,79100],{"class":70,"line":71},[68,79078,8281],{"class":316},[68,79080,79081],{"class":78}," [a, b, c] ",[68,79083,1685],{"class":316},[68,79085,53708],{"class":78},[68,79087,1846],{"class":85},[68,79089,13923],{"class":78},[68,79091,1715],{"class":85},[68,79093,78995],{"class":78},[68,79095,1709],{"class":85},[68,79097,13923],{"class":78},[68,79099,1922],{"class":85},[68,79101,79004],{"class":78},[68,79103,79104,79106,79108,79111],{"class":70,"line":82},[68,79105,79009],{"class":78},[68,79107,59725],{"class":74},[68,79109,79110],{"class":78},"(a)",[68,79112,79020],{"class":302},[68,79114,79115,79117,79119,79122],{"class":70,"line":98},[68,79116,79009],{"class":78},[68,79118,59725],{"class":74},[68,79120,79121],{"class":78},"(b)",[68,79123,79035],{"class":302},[68,79125,79126,79128,79130,79133],{"class":70,"line":104},[68,79127,79009],{"class":78},[68,79129,59725],{"class":74},[68,79131,79132],{"class":78},"(c)",[68,79134,79050],{"class":302},[58,79136,79138],{"className":78972,"code":79137,"language":78974,"meta":63,"style":63},"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",[65,79139,79140,79167,79177,79187,79197],{"__ignoreMap":63},[68,79141,79142,79144,79147,79149,79151,79153,79155,79157,79159,79161,79163,79165],{"class":70,"line":71},[68,79143,8281],{"class":316},[68,79145,79146],{"class":78}," [a, b, [c, d]] ",[68,79148,1685],{"class":316},[68,79150,53708],{"class":78},[68,79152,1846],{"class":85},[68,79154,13923],{"class":78},[68,79156,1715],{"class":85},[68,79158,78995],{"class":78},[68,79160,1709],{"class":85},[68,79162,13923],{"class":78},[68,79164,1922],{"class":85},[68,79166,79004],{"class":78},[68,79168,79169,79171,79173,79175],{"class":70,"line":82},[68,79170,79009],{"class":78},[68,79172,59725],{"class":74},[68,79174,79110],{"class":78},[68,79176,79020],{"class":302},[68,79178,79179,79181,79183,79185],{"class":70,"line":98},[68,79180,79009],{"class":78},[68,79182,59725],{"class":74},[68,79184,79121],{"class":78},[68,79186,79035],{"class":302},[68,79188,79189,79191,79193,79195],{"class":70,"line":104},[68,79190,79009],{"class":78},[68,79192,59725],{"class":74},[68,79194,79132],{"class":78},[68,79196,79069],{"class":302},[68,79198,79199,79201,79203,79206],{"class":70,"line":112},[68,79200,79009],{"class":78},[68,79202,59725],{"class":74},[68,79204,79205],{"class":78},"(d)",[68,79207,79208],{"class":302},"  \u002F\u002F4\n",[19,79210,79212],{"id":79211},"_462-对象解构","4.6.2 对象解构",[170,79214,79215],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[170,79217,79218],{},"用的非常非常多！！！！！！",[245,79220,79222],{"id":79221},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[170,79224,79225],{},"基本语法：",[263,79227,79228,79231,79234,79237],{},[27,79229,79230],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[27,79232,79233],{},"对象属性的值将被赋值给与属性名相同的变量",[27,79235,79236],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[27,79238,79239],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[58,79241,79243],{"className":52117,"code":79242,"language":52119,"meta":63,"style":63},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[65,79244,79245,79250,79255,79260,79264],{"__ignoreMap":63},[68,79246,79247],{"class":70,"line":71},[68,79248,79249],{"class":78},"const obj = {\n",[68,79251,79252],{"class":70,"line":82},[68,79253,79254],{"class":78},"   uname: 'pink老师',\n",[68,79256,79257],{"class":70,"line":98},[68,79258,79259],{"class":78},"   age: 18,\n",[68,79261,79262],{"class":70,"line":104},[68,79263,101],{"class":78},[68,79265,79266],{"class":70,"line":112},[68,79267,79268],{"class":78},"const { uname, age } = obj\n",[170,79270,79271],{},"上方代码这样写等价于：",[170,79273,79274],{},"const uname等价于obj.uname",[170,79276,79277],{},"变量名可以重新改名：",[170,79279,79280],{},"const uname='red老师'",[170,79282,79283],{},"const user={",[170,79285,79286],{},"  uname:'pink老师',",[170,79288,79289],{},"  age:18",[170,79291,2573],{},[170,79293,79294],{},"const {uname,age}=user",[170,79296,79297],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[170,79299,79300],{},"const {旧变量名：新变量名}=对象",[170,79302,79303],{},"const {uname:username,age}=user",[245,79305,79307],{"id":79306},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[170,79309,79310],{},[801,79311],{"alt":63,"src":79312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[245,79314,79316],{"id":79315},"_4623-多级对象解构","4.6.2.3 多级对象解构",[170,79318,79319],{},[801,79320],{"alt":63,"src":79321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[58,79323,79325],{"className":54549,"code":79324,"language":54551,"meta":63,"style":63},"  \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",[65,79326,79327,79335,79340,79345,79350,79355,79360,79365,79370,79375,79379,79384,79389],{"__ignoreMap":63},[68,79328,79329,79331,79333],{"class":70,"line":71},[68,79330,53626],{"class":78},[68,79332,53295],{"class":52784},[68,79334,52791],{"class":78},[68,79336,79337],{"class":70,"line":82},[68,79338,79339],{"class":78},"    const pig = {\n",[68,79341,79342],{"class":70,"line":98},[68,79343,79344],{"class":78},"      name: '佩奇',\n",[68,79346,79347],{"class":70,"line":104},[68,79348,79349],{"class":78},"      family: {\n",[68,79351,79352],{"class":70,"line":112},[68,79353,79354],{"class":78},"        mother: '猪妈妈',\n",[68,79356,79357],{"class":70,"line":124},[68,79358,79359],{"class":78},"        father: '猪爸爸',\n",[68,79361,79362],{"class":70,"line":1496},[68,79363,79364],{"class":78},"        sister: '乔治'\n",[68,79366,79367],{"class":70,"line":1502},[68,79368,79369],{"class":78},"      },\n",[68,79371,79372],{"class":70,"line":1510},[68,79373,79374],{"class":78},"      age: 6\n",[68,79376,79377],{"class":70,"line":1521},[68,79378,3677],{"class":78},[68,79380,79381],{"class":70,"line":3103},[68,79382,79383],{"class":78},"    \u002F\u002F 多级对象解构\n",[68,79385,79386],{"class":70,"line":3108},[68,79387,79388],{"class":78},"    const { name, family: { mother, father, sister }, age } = pig\n",[68,79390,79391,79393,79395],{"class":70,"line":3114},[68,79392,53899],{"class":78},[68,79394,53295],{"class":52784},[68,79396,52791],{"class":78},[170,79398,79399],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[58,79401,79404],{"className":79402,"code":79403,"language":77924,"meta":63,"style":63},"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",[65,79405,79406,79411,79422,79434,79446,79455,79459,79470,79482,79492,79497,79501,79511,79522,79531,79535,79539,79550,79561,79570,79574,79579],{"__ignoreMap":63},[68,79407,79408],{"class":70,"line":71},[68,79409,79410],{"class":302},"    \u002F\u002F 这是后台传递过来的数据\n",[68,79412,79413,79415,79418,79420],{"class":70,"line":82},[68,79414,12709],{"class":316},[68,79416,79417],{"class":78}," msg ",[68,79419,1685],{"class":316},[68,79421,79],{"class":78},[68,79423,79424,79427,79429,79432],{"class":70,"line":98},[68,79425,79426],{"class":1742},"      \"code\"",[68,79428,2486],{"class":316},[68,79430,79431],{"class":85}," 200",[68,79433,32950],{"class":78},[68,79435,79436,79439,79441,79444],{"class":70,"line":104},[68,79437,79438],{"class":1742},"      \"msg\"",[68,79440,2486],{"class":316},[68,79442,79443],{"class":1742}," \"获取新闻列表成功\"",[68,79445,32950],{"class":78},[68,79447,79448,79451,79453],{"class":70,"line":112},[68,79449,79450],{"class":1742},"      \"data\"",[68,79452,2486],{"class":316},[68,79454,56925],{"class":78},[68,79456,79457],{"class":70,"line":124},[68,79458,4000],{"class":78},[68,79460,79461,79464,79466,79468],{"class":70,"line":1496},[68,79462,79463],{"class":1742},"          \"id\"",[68,79465,2486],{"class":316},[68,79467,26604],{"class":85},[68,79469,32950],{"class":78},[68,79471,79472,79475,79477,79480],{"class":70,"line":1502},[68,79473,79474],{"class":1742},"          \"title\"",[68,79476,2486],{"class":316},[68,79478,79479],{"class":1742}," \"5G商用自己，三大运用商收入下降\"",[68,79481,32950],{"class":78},[68,79483,79484,79487,79489],{"class":70,"line":1510},[68,79485,79486],{"class":1742},"          \"count\"",[68,79488,2486],{"class":316},[68,79490,79491],{"class":85}," 58\n",[68,79493,79494],{"class":70,"line":1521},[68,79495,79496],{"class":78},"        },\n",[68,79498,79499],{"class":70,"line":3103},[68,79500,4000],{"class":78},[68,79502,79503,79505,79507,79509],{"class":70,"line":3108},[68,79504,79463],{"class":1742},[68,79506,2486],{"class":316},[68,79508,16243],{"class":85},[68,79510,32950],{"class":78},[68,79512,79513,79515,79517,79520],{"class":70,"line":3114},[68,79514,79474],{"class":1742},[68,79516,2486],{"class":316},[68,79518,79519],{"class":1742}," \"国际媒体头条速览\"",[68,79521,32950],{"class":78},[68,79523,79524,79526,79528],{"class":70,"line":3119},[68,79525,79486],{"class":1742},[68,79527,2486],{"class":316},[68,79529,79530],{"class":85}," 56\n",[68,79532,79533],{"class":70,"line":3133},[68,79534,79496],{"class":78},[68,79536,79537],{"class":70,"line":3138},[68,79538,4000],{"class":78},[68,79540,79541,79543,79545,79548],{"class":70,"line":3144},[68,79542,79463],{"class":1742},[68,79544,2486],{"class":316},[68,79546,79547],{"class":85}," 3",[68,79549,32950],{"class":78},[68,79551,79552,79554,79556,79559],{"class":70,"line":3165},[68,79553,79474],{"class":1742},[68,79555,2486],{"class":316},[68,79557,79558],{"class":1742}," \"乌克兰和俄罗斯持续冲突\"",[68,79560,32950],{"class":78},[68,79562,79563,79565,79567],{"class":70,"line":3170},[68,79564,79486],{"class":1742},[68,79566,2486],{"class":316},[68,79568,79569],{"class":85}," 1669\n",[68,79571,79572],{"class":70,"line":3184},[68,79573,79496],{"class":78},[68,79575,79576],{"class":70,"line":3189},[68,79577,79578],{"class":78},"      ]\n",[68,79580,79581],{"class":70,"line":3218},[68,79582,3677],{"class":78},[170,79584,79585],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[170,79587,79588],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[170,79590,79591],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[170,79593,79594],{},"function({data}) {",[170,79596,79597],{},"console.log(data)",[170,79599,2573],{},[170,79601,79602],{},"render(msg)",[170,79604,79605],{},"实参传递给形参的时候解构了",[170,79607,79608],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[170,79610,79611],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[170,79613,79614],{},"function render({data:mydata}) {",[170,79616,79617],{},"  console.log(data)",[170,79619,2573],{},[19,79621,79623],{"id":79622},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[170,79625,79626],{},"有两种情况：一个是数组结构，一个是立即执行函数",[263,79628,79629],{},[27,79630,79631],{},"如果对一个数组进行遍历，有两种方式：",[170,79633,79634],{},"①法1",[170,79636,79637],{},"const arr=[1,2,3]",[170,79639,79640],{},"arr.map(function(item,index) {",[170,79642,79643],{},"  console.log(item)",[170,79645,53946],{},[170,79647,79648],{},[801,79649],{"alt":63,"src":79650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[170,79652,79653],{},"②法2",[170,79655,79656],{},"const str='pink'",[170,79658,79659],{},"[1,2,3].map(function(item,index) {",[170,79661,79662],{},"console.log(item)",[170,79664,53946],{},[170,79666,79667],{},[801,79668],{"alt":63,"src":79669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[170,79671,79672],{},"此时会报错",[170,79674,79675],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[170,79677,79662],{},[170,79679,53946],{},[170,79681,79682],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79684,79686],{"id":79685},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[170,79688,79689],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[170,79691,79692],{},"可以理解为加强版的for循环",[170,79694,79695],{},[801,79696],{"alt":63,"src":79697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[170,79699,79700],{},"里边不写return，不返回数组，只遍历不返回",[170,79702,79703],{},"map是返回数组",[170,79705,79706],{},"forEach主要用于遍历数组对象",[58,79708,79710],{"className":54549,"code":79709,"language":54551,"meta":63,"style":63},"  \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",[65,79711,79712,79720,79725,79730,79735,79740,79744,79749],{"__ignoreMap":63},[68,79713,79714,79716,79718],{"class":70,"line":71},[68,79715,53626],{"class":78},[68,79717,53295],{"class":52784},[68,79719,52791],{"class":78},[68,79721,79722],{"class":70,"line":82},[68,79723,79724],{"class":78},"    const arr = ['red', 'green', 'pink']\n",[68,79726,79727],{"class":70,"line":98},[68,79728,79729],{"class":78},"    const result = arr.forEach(function (item, index) {\n",[68,79731,79732],{"class":70,"line":104},[68,79733,79734],{"class":78},"      console.log(item)\n",[68,79736,79737],{"class":70,"line":112},[68,79738,79739],{"class":78},"      console.log(index)\n",[68,79741,79742],{"class":70,"line":124},[68,79743,34945],{"class":78},[68,79745,79746],{"class":70,"line":1496},[68,79747,79748],{"class":78},"    console.log(result)\n",[68,79750,79751,79753,79755],{"class":70,"line":1502},[68,79752,53899],{"class":78},[68,79754,53295],{"class":52784},[68,79756,52791],{"class":78},[170,79758,79759],{},[801,79760],{"alt":63,"src":79761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79763,79765],{"id":79764},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[170,79767,79768],{},[801,79769],{"alt":63,"src":79770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[170,79772,79773],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[58,79775,79777],{"className":54549,"code":79776,"language":54551,"meta":63,"style":63},"\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",[65,79778,79779,79787,79795,79800,79805,79809,79813,79818,79822,79827,79835],{"__ignoreMap":63},[68,79780,79781,79783,79785],{"class":70,"line":71},[68,79782,2537],{"class":78},[68,79784,53282],{"class":52784},[68,79786,52791],{"class":78},[68,79788,79789,79791,79793],{"class":70,"line":82},[68,79790,53626],{"class":78},[68,79792,53295],{"class":52784},[68,79794,52791],{"class":78},[68,79796,79797],{"class":70,"line":98},[68,79798,79799],{"class":78},"    const arr = [10, 20, 30]\n",[68,79801,79802],{"class":70,"line":104},[68,79803,79804],{"class":78},"    const newArr = arr.filter(function (item, index) {\n",[68,79806,79807],{"class":70,"line":112},[68,79808,79734],{"class":78},[68,79810,79811],{"class":70,"line":124},[68,79812,79739],{"class":78},[68,79814,79815],{"class":70,"line":1496},[68,79816,79817],{"class":78},"      return item >= 20\n",[68,79819,79820],{"class":70,"line":1502},[68,79821,34945],{"class":78},[68,79823,79824],{"class":70,"line":1510},[68,79825,79826],{"class":78},"    console.log(newArr)\n",[68,79828,79829,79831,79833],{"class":70,"line":1521},[68,79830,53899],{"class":78},[68,79832,53295],{"class":52784},[68,79834,52791],{"class":78},[68,79836,79837,79839,79841],{"class":70,"line":3103},[68,79838,53267],{"class":78},[68,79840,53282],{"class":52784},[68,79842,52791],{"class":78},[170,79844,79845],{},"这个也可以写成箭头函数：",[58,79847,79849],{"className":52117,"code":79848,"language":52119,"meta":63,"style":63},"const newArr = arr.filter(item => item >= 20)\n",[65,79850,79851],{"__ignoreMap":63},[68,79852,79853],{"class":70,"line":71},[68,79854,79848],{"class":78},[14,79856,79858],{"id":79857},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[170,79860,79861],{},[801,79862],{"alt":63,"src":79863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[170,79865,79866],{},"步骤：",[170,79868,79869],{},"①：渲染页面模块",[24,79871,79872,79875],{},[27,79873,79874],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[27,79876,79877],{},"用forEach+字符串的形式",[170,79879,79880],{},"②：点击不同需求，显示不同页面内容",[24,79882,79883,79886,79889,79892,79895],{},[27,79884,79885],{},"点击采取事件委托方式 .filter",[27,79887,79888],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[27,79890,79891],{},"筛选条件是根据点击的 data-index 来判断",[27,79893,79894],{},"可以使用对象解构，把事件对象解构",[27,79896,79897],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[58,79899,79901],{"className":52117,"code":79900,"language":52119,"meta":63,"style":63},"\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",[65,79902,79903,79913,79927,79931,79939,79953,79973,79985,79993,79999,80009,80019,80029,80033,80037,80043,80056,80068,80078,80090,80094,80098,80105,80118,80130,80147,80165,80178,80182,80186,80198,80208,80212,80216,80223,80264,80291,80301,80305,80309,80317,80329,80333,80337,80345,80357,80369,80380,80384,80388,80397,80409,80420,80424,80428,80437,80449,80461,80465,80469,80476,80486,80498,80510,80525,80529,80533,80541,80557,80567,80577,80587,80599,80603,80607,80617,80628,80638,80642,80650,80658,80662,80670,80685,80711,80736,80761,80780,80788,80802,80807,80812,80817,80822,80827,80835,80843,80848,80859,80864,80874,80884,80894,80904,80908,80912,80921,80930,80939,80948,80952,80956,80965,80974,80983,80992,80996,81000,81009,81018,81027,81036,81040,81044,81053,81062,81071,81080,81084,81088,81097,81106,81115,81124,81128,81132,81141,81150,81159,81168,81172,81176,81185,81194,81202,81211,81215,81219,81223,81228,81240,81245,81257,81261,81278,81306,81315,81320,81330,81340,81349,81354,81359,81363,81368,81385,81389,81394,81402,81407,81434,81439,81459,81464,81476,81481,81486,81491,81502,81516,81553,81571,81604,81621,81645,81649,81654,81660,81664,81668,81672,81680,81688,81692],{"__ignoreMap":63},[68,79904,79905,79907,79909,79911],{"class":70,"line":71},[68,79906,52781],{"class":78},[68,79908,52785],{"class":52784},[68,79910,52788],{"class":74},[68,79912,52791],{"class":78},[68,79914,79915,79917,79919,79921,79923,79925],{"class":70,"line":82},[68,79916,2537],{"class":78},[68,79918,52119],{"class":52784},[68,79920,52800],{"class":74},[68,79922,1685],{"class":78},[68,79924,52805],{"class":1742},[68,79926,52791],{"class":78},[68,79928,79929],{"class":70,"line":98},[68,79930,3890],{"emptyLinePlaceholder":1567},[68,79932,79933,79935,79937],{"class":70,"line":104},[68,79934,2537],{"class":78},[68,79936,52818],{"class":52784},[68,79938,52791],{"class":78},[68,79940,79941,79943,79945,79947,79949,79951],{"class":70,"line":112},[68,79942,53626],{"class":78},[68,79944,52828],{"class":52784},[68,79946,52831],{"class":74},[68,79948,1685],{"class":78},[68,79950,52836],{"class":1742},[68,79952,52791],{"class":78},[68,79954,79955,79957,79959,79961,79963,79965,79967,79969,79971],{"class":70,"line":124},[68,79956,53626],{"class":78},[68,79958,52828],{"class":52784},[68,79960,16408],{"class":74},[68,79962,1685],{"class":78},[68,79964,52875],{"class":1742},[68,79966,52855],{"class":74},[68,79968,1685],{"class":78},[68,79970,52882],{"class":1742},[68,79972,52791],{"class":78},[68,79974,79975,79977,79979,79981,79983],{"class":70,"line":1496},[68,79976,53626],{"class":78},[68,79978,52891],{"class":52784},[68,79980,52894],{"class":78},[68,79982,52891],{"class":52784},[68,79984,52791],{"class":78},[68,79986,79987,79989,79991],{"class":70,"line":1502},[68,79988,53626],{"class":78},[68,79990,1553],{"class":52784},[68,79992,52791],{"class":78},[68,79994,79995,79997],{"class":70,"line":1510},[68,79996,7892],{"class":52784},[68,79998,79],{"class":78},[68,80000,80001,80003,80005,80007],{"class":70,"line":1521},[68,80002,56176],{"class":85},[68,80004,89],{"class":78},[68,80006,1248],{"class":85},[68,80008,95],{"class":78},[68,80010,80011,80013,80015,80017],{"class":70,"line":3103},[68,80012,56187],{"class":85},[68,80014,89],{"class":78},[68,80016,1248],{"class":85},[68,80018,95],{"class":78},[68,80020,80021,80023,80025,80027],{"class":70,"line":3108},[68,80022,74073],{"class":85},[68,80024,89],{"class":78},[68,80026,61983],{"class":85},[68,80028,95],{"class":78},[68,80030,80031],{"class":70,"line":3114},[68,80032,3677],{"class":78},[68,80034,80035],{"class":70,"line":3119},[68,80036,3890],{"emptyLinePlaceholder":1567},[68,80038,80039,80041],{"class":70,"line":3133},[68,80040,63601],{"class":74},[68,80042,79],{"class":78},[68,80044,80045,80047,80049,80052,80054],{"class":70,"line":3138},[68,80046,56250],{"class":85},[68,80048,89],{"class":78},[68,80050,80051],{"class":85},"990",[68,80053,317],{"class":316},[68,80055,95],{"class":78},[68,80057,80058,80060,80062,80064,80066],{"class":70,"line":3144},[68,80059,56187],{"class":85},[68,80061,89],{"class":78},[68,80063,1248],{"class":85},[68,80065,53038],{"class":85},[68,80067,95],{"class":78},[68,80069,80070,80072,80074,80076],{"class":70,"line":3165},[68,80071,56487],{"class":85},[68,80073,89],{"class":78},[68,80075,52960],{"class":85},[68,80077,95],{"class":78},[68,80079,80080,80083,80085,80088],{"class":70,"line":3170},[68,80081,80082],{"class":85},"      flex-wrap",[68,80084,89],{"class":78},[68,80086,80087],{"class":85},"wrap",[68,80089,95],{"class":78},[68,80091,80092],{"class":70,"line":3184},[68,80093,3677],{"class":78},[68,80095,80096],{"class":70,"line":3189},[68,80097,3890],{"emptyLinePlaceholder":1567},[68,80099,80100,80103],{"class":70,"line":3218},[68,80101,80102],{"class":74},"    .item",[68,80104,79],{"class":78},[68,80106,80107,80109,80111,80114,80116],{"class":70,"line":3223},[68,80108,56250],{"class":85},[68,80110,89],{"class":78},[68,80112,80113],{"class":85},"240",[68,80115,317],{"class":316},[68,80117,95],{"class":78},[68,80119,80120,80122,80124,80126,80128],{"class":70,"line":3240},[68,80121,63478],{"class":85},[68,80123,89],{"class":78},[68,80125,313],{"class":85},[68,80127,317],{"class":316},[68,80129,95],{"class":78},[68,80131,80132,80134,80136,80138,80140,80143,80145],{"class":70,"line":3245},[68,80133,56176],{"class":85},[68,80135,89],{"class":78},[68,80137,333],{"class":85},[68,80139,317],{"class":316},[68,80141,80142],{"class":85}," 30",[68,80144,317],{"class":316},[68,80146,95],{"class":78},[68,80148,80149,80151,80153,80155,80158,80161,80163],{"class":70,"line":3250},[68,80150,63338],{"class":85},[68,80152,89],{"class":78},[68,80154,29605],{"class":85},[68,80156,80157],{"class":85}," ease",[68,80159,80160],{"class":85}," .5",[68,80162,2323],{"class":316},[68,80164,95],{"class":78},[68,80166,80167,80170,80172,80174,80176],{"class":70,"line":3255},[68,80168,80169],{"class":85},"      margin-bottom",[68,80171,89],{"class":78},[68,80173,333],{"class":85},[68,80175,317],{"class":316},[68,80177,95],{"class":78},[68,80179,80180],{"class":70,"line":3269},[68,80181,3677],{"class":78},[68,80183,80184],{"class":70,"line":3274},[68,80185,3890],{"emptyLinePlaceholder":1567},[68,80187,80188,80191,80193,80196],{"class":70,"line":4067},[68,80189,80190],{"class":74},"    .item:nth-child",[68,80192,1640],{"class":78},[68,80194,80195],{"class":85},"4n",[68,80197,13930],{"class":78},[68,80199,80200,80202,80204,80206],{"class":70,"line":4081},[68,80201,63478],{"class":85},[68,80203,89],{"class":78},[68,80205,1248],{"class":85},[68,80207,95],{"class":78},[68,80209,80210],{"class":70,"line":4089},[68,80211,3677],{"class":78},[68,80213,80214],{"class":70,"line":4094},[68,80215,3890],{"emptyLinePlaceholder":1567},[68,80217,80218,80221],{"class":70,"line":4100},[68,80219,80220],{"class":74},"    .item:hover",[68,80222,79],{"class":78},[68,80224,80225,80228,80230,80232,80234,80236,80238,80240,80242,80245,80247,80249,80251,80253,80255,80257,80259,80262],{"class":70,"line":4106},[68,80226,80227],{"class":85},"      box-shadow",[68,80229,89],{"class":78},[68,80231,1248],{"class":85},[68,80233,317],{"class":316},[68,80235,5583],{"class":85},[68,80237,317],{"class":316},[68,80239,3638],{"class":85},[68,80241,317],{"class":316},[68,80243,80244],{"class":85}," rgba",[68,80246,1640],{"class":78},[68,80248,1248],{"class":85},[68,80250,13923],{"class":78},[68,80252,1248],{"class":85},[68,80254,13923],{"class":78},[68,80256,1248],{"class":85},[68,80258,13923],{"class":78},[68,80260,80261],{"class":85},".2",[68,80263,4209],{"class":78},[68,80265,80266,80269,80271,80274,80276,80278,80280,80283,80285,80287,80289],{"class":70,"line":4111},[68,80267,80268],{"class":85},"      transform",[68,80270,89],{"class":78},[68,80272,80273],{"class":85},"translate3d",[68,80275,1640],{"class":78},[68,80277,1248],{"class":85},[68,80279,13923],{"class":78},[68,80281,80282],{"class":85},"-4",[68,80284,317],{"class":316},[68,80286,13923],{"class":78},[68,80288,1248],{"class":85},[68,80290,4209],{"class":78},[68,80292,80293,80295,80297,80299],{"class":70,"line":9437},[68,80294,63503],{"class":85},[68,80296,89],{"class":78},[68,80298,63508],{"class":85},[68,80300,95],{"class":78},[68,80302,80303],{"class":70,"line":9461},[68,80304,3677],{"class":78},[68,80306,80307],{"class":70,"line":9466},[68,80308,3890],{"emptyLinePlaceholder":1567},[68,80310,80311,80313,80315],{"class":70,"line":9472},[68,80312,80102],{"class":74},[68,80314,57093],{"class":52784},[68,80316,79],{"class":78},[68,80318,80319,80321,80323,80325,80327],{"class":70,"line":9499},[68,80320,56250],{"class":85},[68,80322,89],{"class":78},[68,80324,1940],{"class":85},[68,80326,1957],{"class":316},[68,80328,95],{"class":78},[68,80330,80331],{"class":70,"line":9504},[68,80332,3677],{"class":78},[68,80334,80335],{"class":70,"line":9510},[68,80336,3890],{"emptyLinePlaceholder":1567},[68,80338,80339,80341,80343],{"class":70,"line":9522},[68,80340,80102],{"class":74},[68,80342,63782],{"class":74},[68,80344,79],{"class":78},[68,80346,80347,80349,80351,80353,80355],{"class":70,"line":9534},[68,80348,56400],{"class":85},[68,80350,89],{"class":78},[68,80352,2278],{"class":85},[68,80354,317],{"class":316},[68,80356,95],{"class":78},[68,80358,80359,80361,80363,80365,80367],{"class":70,"line":9546},[68,80360,80169],{"class":85},[68,80362,89],{"class":78},[68,80364,313],{"class":85},[68,80366,317],{"class":316},[68,80368,95],{"class":78},[68,80370,80371,80373,80375,80378],{"class":70,"line":11204},[68,80372,58894],{"class":85},[68,80374,89],{"class":78},[68,80376,80377],{"class":85},"#666",[68,80379,95],{"class":78},[68,80381,80382],{"class":70,"line":11229},[68,80383,3677],{"class":78},[68,80385,80386],{"class":70,"line":11252},[68,80387,3890],{"emptyLinePlaceholder":1567},[68,80389,80390,80392,80395],{"class":70,"line":11276},[68,80391,80102],{"class":74},[68,80393,80394],{"class":74}," .price",[68,80396,79],{"class":78},[68,80398,80399,80401,80403,80405,80407],{"class":70,"line":11281},[68,80400,56400],{"class":85},[68,80402,89],{"class":78},[68,80404,2377],{"class":85},[68,80406,317],{"class":316},[68,80408,95],{"class":78},[68,80410,80411,80413,80415,80418],{"class":70,"line":11286},[68,80412,58894],{"class":85},[68,80414,89],{"class":78},[68,80416,80417],{"class":85},"firebrick",[68,80419,95],{"class":78},[68,80421,80422],{"class":70,"line":11291},[68,80423,3677],{"class":78},[68,80425,80426],{"class":70,"line":11300},[68,80427,3890],{"emptyLinePlaceholder":1567},[68,80429,80430,80432,80435],{"class":70,"line":11305},[68,80431,80102],{"class":74},[68,80433,80434],{"class":74}," .price::before",[68,80436,79],{"class":78},[68,80438,80439,80442,80444,80447],{"class":70,"line":11311},[68,80440,80441],{"class":85},"      content",[68,80443,89],{"class":78},[68,80445,80446],{"class":1742},"'￥'",[68,80448,95],{"class":78},[68,80450,80451,80453,80455,80457,80459],{"class":70,"line":11332},[68,80452,56400],{"class":85},[68,80454,89],{"class":78},[68,80456,2177],{"class":85},[68,80458,317],{"class":316},[68,80460,95],{"class":78},[68,80462,80463],{"class":70,"line":11338},[68,80464,3677],{"class":78},[68,80466,80467],{"class":70,"line":11352},[68,80468,3890],{"emptyLinePlaceholder":1567},[68,80470,80471,80474],{"class":70,"line":11358},[68,80472,80473],{"class":74},"    .filter",[68,80475,79],{"class":78},[68,80477,80478,80480,80482,80484],{"class":70,"line":11385},[68,80479,56487],{"class":85},[68,80481,89],{"class":78},[68,80483,52960],{"class":85},[68,80485,95],{"class":78},[68,80487,80488,80490,80492,80494,80496],{"class":70,"line":11394},[68,80489,56250],{"class":85},[68,80491,89],{"class":78},[68,80493,80051],{"class":85},[68,80495,317],{"class":316},[68,80497,95],{"class":78},[68,80499,80500,80502,80504,80506,80508],{"class":70,"line":11400},[68,80501,56187],{"class":85},[68,80503,89],{"class":78},[68,80505,1248],{"class":85},[68,80507,53038],{"class":85},[68,80509,95],{"class":78},[68,80511,80512,80514,80516,80518,80520,80522],{"class":70,"line":11408},[68,80513,56176],{"class":85},[68,80515,89],{"class":78},[68,80517,2284],{"class":85},[68,80519,317],{"class":316},[68,80521,80142],{"class":85},[68,80523,80524],{"class":316},"px\n",[68,80526,80527],{"class":70,"line":11413},[68,80528,3677],{"class":78},[68,80530,80531],{"class":70,"line":18091},[68,80532,3890],{"emptyLinePlaceholder":1567},[68,80534,80535,80537,80539],{"class":70,"line":18097},[68,80536,80473],{"class":74},[68,80538,2891],{"class":52784},[68,80540,79],{"class":78},[68,80542,80543,80545,80547,80549,80551,80553,80555],{"class":70,"line":18120},[68,80544,56176],{"class":85},[68,80546,89],{"class":78},[68,80548,313],{"class":85},[68,80550,317],{"class":316},[68,80552,10439],{"class":85},[68,80554,317],{"class":316},[68,80556,95],{"class":78},[68,80558,80559,80561,80563,80565],{"class":70,"line":18126},[68,80560,63199],{"class":85},[68,80562,89],{"class":78},[68,80564,63296],{"class":85},[68,80566,95],{"class":78},[68,80568,80569,80571,80573,80575],{"class":70,"line":18149},[68,80570,58894],{"class":85},[68,80572,89],{"class":78},[68,80574,80377],{"class":85},[68,80576,95],{"class":78},[68,80578,80579,80581,80583,80585],{"class":70,"line":18163},[68,80580,65448],{"class":85},[68,80582,89],{"class":78},[68,80584,151],{"class":85},[68,80586,95],{"class":78},[68,80588,80589,80591,80593,80595,80597],{"class":70,"line":18183},[68,80590,63228],{"class":85},[68,80592,89],{"class":78},[68,80594,333],{"class":85},[68,80596,317],{"class":316},[68,80598,95],{"class":78},[68,80600,80601],{"class":70,"line":18189},[68,80602,3677],{"class":78},[68,80604,80605],{"class":70,"line":18200},[68,80606,3890],{"emptyLinePlaceholder":1567},[68,80608,80609,80611,80613,80615],{"class":70,"line":18223},[68,80610,80473],{"class":74},[68,80612,2891],{"class":52784},[68,80614,63378],{"class":74},[68,80616,79],{"class":78},[68,80618,80619,80621,80623,80626],{"class":70,"line":18245},[68,80620,56362],{"class":85},[68,80622,89],{"class":78},[68,80624,80625],{"class":85},"#05943c",[68,80627,95],{"class":78},[68,80629,80630,80632,80634,80636],{"class":70,"line":18250},[68,80631,58894],{"class":85},[68,80633,89],{"class":78},[68,80635,62320],{"class":85},[68,80637,95],{"class":78},[68,80639,80640],{"class":70,"line":18256},[68,80641,3677],{"class":78},[68,80643,80644,80646,80648],{"class":70,"line":18270},[68,80645,53899],{"class":78},[68,80647,1553],{"class":52784},[68,80649,52791],{"class":78},[68,80651,80652,80654,80656],{"class":70,"line":18283},[68,80653,53267],{"class":78},[68,80655,52818],{"class":52784},[68,80657,52791],{"class":78},[68,80659,80660],{"class":70,"line":18288},[68,80661,3890],{"emptyLinePlaceholder":1567},[68,80663,80664,80666,80668],{"class":70,"line":18302},[68,80665,2537],{"class":78},[68,80667,53282],{"class":52784},[68,80669,52791],{"class":78},[68,80671,80672,80674,80676,80678,80680,80683],{"class":70,"line":18307},[68,80673,53626],{"class":78},[68,80675,53093],{"class":52784},[68,80677,54968],{"class":74},[68,80679,1685],{"class":78},[68,80681,80682],{"class":1742},"\"filter\"",[68,80684,52791],{"class":78},[68,80686,80687,80689,80691,80693,80695,80697,80700,80702,80704,80707,80709],{"class":70,"line":18313},[68,80688,52825],{"class":78},[68,80690,1867],{"class":52784},[68,80692,62535],{"class":74},[68,80694,1685],{"class":78},[68,80696,62540],{"class":1742},[68,80698,80699],{"class":74}," data-index",[68,80701,1685],{"class":78},[68,80703,5168],{"class":1742},[68,80705,80706],{"class":78},">0-100元\u003C\u002F",[68,80708,1867],{"class":52784},[68,80710,52791],{"class":78},[68,80712,80713,80715,80717,80719,80721,80723,80725,80727,80729,80732,80734],{"class":70,"line":18318},[68,80714,52825],{"class":78},[68,80716,1867],{"class":52784},[68,80718,62535],{"class":74},[68,80720,1685],{"class":78},[68,80722,62540],{"class":1742},[68,80724,80699],{"class":74},[68,80726,1685],{"class":78},[68,80728,5191],{"class":1742},[68,80730,80731],{"class":78},">100-300元\u003C\u002F",[68,80733,1867],{"class":52784},[68,80735,52791],{"class":78},[68,80737,80738,80740,80742,80744,80746,80748,80750,80752,80754,80757,80759],{"class":70,"line":18332},[68,80739,52825],{"class":78},[68,80741,1867],{"class":52784},[68,80743,62535],{"class":74},[68,80745,1685],{"class":78},[68,80747,62540],{"class":1742},[68,80749,80699],{"class":74},[68,80751,1685],{"class":78},[68,80753,5204],{"class":1742},[68,80755,80756],{"class":78},">300元以上\u003C\u002F",[68,80758,1867],{"class":52784},[68,80760,52791],{"class":78},[68,80762,80763,80765,80767,80769,80771,80773,80776,80778],{"class":70,"line":18337},[68,80764,52825],{"class":78},[68,80766,1867],{"class":52784},[68,80768,62535],{"class":74},[68,80770,1685],{"class":78},[68,80772,62540],{"class":1742},[68,80774,80775],{"class":78},">全部区间\u003C\u002F",[68,80777,1867],{"class":52784},[68,80779,52791],{"class":78},[68,80781,80782,80784,80786],{"class":70,"line":18342},[68,80783,53899],{"class":78},[68,80785,53093],{"class":52784},[68,80787,52791],{"class":78},[68,80789,80790,80792,80794,80796,80798,80800],{"class":70,"line":18356},[68,80791,53626],{"class":78},[68,80793,53093],{"class":52784},[68,80795,54968],{"class":74},[68,80797,1685],{"class":78},[68,80799,64086],{"class":1742},[68,80801,52791],{"class":78},[68,80803,80804],{"class":70,"line":18368},[68,80805,80806],{"class":302},"    \u003C!-- \u003Cdiv class=\"item\">\n",[68,80808,80809],{"class":70,"line":18373},[68,80810,80811],{"class":302},"      \u003Cimg src=\"\" alt=\"\">\n",[68,80813,80814],{"class":70,"line":18386},[68,80815,80816],{"class":302},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[68,80818,80819],{"class":70,"line":18391},[68,80820,80821],{"class":302},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[68,80823,80824],{"class":70,"line":18396},[68,80825,80826],{"class":302},"    \u003C\u002Fdiv> -->\n",[68,80828,80829,80831,80833],{"class":70,"line":18401},[68,80830,53899],{"class":78},[68,80832,53093],{"class":52784},[68,80834,52791],{"class":78},[68,80836,80837,80839,80841],{"class":70,"line":18414},[68,80838,53626],{"class":78},[68,80840,53295],{"class":52784},[68,80842,52791],{"class":78},[68,80844,80845],{"class":70,"line":18419},[68,80846,80847],{"class":302},"    \u002F\u002F 2. 初始化数据\n",[68,80849,80850,80852,80855,80857],{"class":70,"line":34117},[68,80851,12709],{"class":316},[68,80853,80854],{"class":85}," goodsList",[68,80856,15052],{"class":316},[68,80858,56925],{"class":78},[68,80860,80861],{"class":70,"line":34123},[68,80862,80863],{"class":78},"      {\n",[68,80865,80866,80869,80872],{"class":70,"line":34129},[68,80867,80868],{"class":78},"        id: ",[68,80870,80871],{"class":1742},"'4001172'",[68,80873,32950],{"class":78},[68,80875,80876,80879,80882],{"class":70,"line":34135},[68,80877,80878],{"class":78},"        name: ",[68,80880,80881],{"class":1742},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[68,80883,32950],{"class":78},[68,80885,80886,80889,80892],{"class":70,"line":34141},[68,80887,80888],{"class":78},"        price: ",[68,80890,80891],{"class":1742},"'289.00'",[68,80893,32950],{"class":78},[68,80895,80896,80899,80902],{"class":70,"line":34152},[68,80897,80898],{"class":78},"        picture: ",[68,80900,80901],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[68,80903,32950],{"class":78},[68,80905,80906],{"class":70,"line":34158},[68,80907,79369],{"class":78},[68,80909,80910],{"class":70,"line":34178},[68,80911,80863],{"class":78},[68,80913,80914,80916,80919],{"class":70,"line":34184},[68,80915,80868],{"class":78},[68,80917,80918],{"class":1742},"'4001594'",[68,80920,32950],{"class":78},[68,80922,80923,80925,80928],{"class":70,"line":34195},[68,80924,80878],{"class":78},[68,80926,80927],{"class":1742},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[68,80929,32950],{"class":78},[68,80931,80932,80934,80937],{"class":70,"line":34201},[68,80933,80888],{"class":78},[68,80935,80936],{"class":1742},"'288.00'",[68,80938,32950],{"class":78},[68,80940,80941,80943,80946],{"class":70,"line":34207},[68,80942,80898],{"class":78},[68,80944,80945],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[68,80947,32950],{"class":78},[68,80949,80950],{"class":70,"line":34213},[68,80951,79369],{"class":78},[68,80953,80954],{"class":70,"line":34219},[68,80955,80863],{"class":78},[68,80957,80958,80960,80963],{"class":70,"line":34225},[68,80959,80868],{"class":78},[68,80961,80962],{"class":1742},"'4001009'",[68,80964,32950],{"class":78},[68,80966,80967,80969,80972],{"class":70,"line":34231},[68,80968,80878],{"class":78},[68,80970,80971],{"class":1742},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[68,80973,32950],{"class":78},[68,80975,80976,80978,80981],{"class":70,"line":34237},[68,80977,80888],{"class":78},[68,80979,80980],{"class":1742},"'109.00'",[68,80982,32950],{"class":78},[68,80984,80985,80987,80990],{"class":70,"line":34257},[68,80986,80898],{"class":78},[68,80988,80989],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[68,80991,32950],{"class":78},[68,80993,80994],{"class":70,"line":34263},[68,80995,79369],{"class":78},[68,80997,80998],{"class":70,"line":34279},[68,80999,80863],{"class":78},[68,81001,81002,81004,81007],{"class":70,"line":34285},[68,81003,80868],{"class":78},[68,81005,81006],{"class":1742},"'4001874'",[68,81008,32950],{"class":78},[68,81010,81011,81013,81016],{"class":70,"line":34299},[68,81012,80878],{"class":78},[68,81014,81015],{"class":1742},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[68,81017,32950],{"class":78},[68,81019,81020,81022,81025],{"class":70,"line":34305},[68,81021,80888],{"class":78},[68,81023,81024],{"class":1742},"'488.00'",[68,81026,32950],{"class":78},[68,81028,81029,81031,81034],{"class":70,"line":34320},[68,81030,80898],{"class":78},[68,81032,81033],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[68,81035,32950],{"class":78},[68,81037,81038],{"class":70,"line":34326},[68,81039,79369],{"class":78},[68,81041,81042],{"class":70,"line":34335},[68,81043,80863],{"class":78},[68,81045,81046,81048,81051],{"class":70,"line":34341},[68,81047,80868],{"class":78},[68,81049,81050],{"class":1742},"'4001649'",[68,81052,32950],{"class":78},[68,81054,81055,81057,81060],{"class":70,"line":34350},[68,81056,80878],{"class":78},[68,81058,81059],{"class":1742},"'大师监制龙泉青瓷茶叶罐'",[68,81061,32950],{"class":78},[68,81063,81064,81066,81069],{"class":70,"line":34356},[68,81065,80888],{"class":78},[68,81067,81068],{"class":1742},"'139.00'",[68,81070,32950],{"class":78},[68,81072,81073,81075,81078],{"class":70,"line":34362},[68,81074,80898],{"class":78},[68,81076,81077],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[68,81079,32950],{"class":78},[68,81081,81082],{"class":70,"line":34371},[68,81083,79369],{"class":78},[68,81085,81086],{"class":70,"line":34377},[68,81087,80863],{"class":78},[68,81089,81090,81092,81095],{"class":70,"line":34388},[68,81091,80868],{"class":78},[68,81093,81094],{"class":1742},"'3997185'",[68,81096,32950],{"class":78},[68,81098,81099,81101,81104],{"class":70,"line":34394},[68,81100,80878],{"class":78},[68,81102,81103],{"class":1742},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[68,81105,32950],{"class":78},[68,81107,81108,81110,81113],{"class":70,"line":34413},[68,81109,80888],{"class":78},[68,81111,81112],{"class":1742},"'108.00'",[68,81114,32950],{"class":78},[68,81116,81117,81119,81122],{"class":70,"line":34419},[68,81118,80898],{"class":78},[68,81120,81121],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[68,81123,32950],{"class":78},[68,81125,81126],{"class":70,"line":34430},[68,81127,79369],{"class":78},[68,81129,81130],{"class":70,"line":34436},[68,81131,80863],{"class":78},[68,81133,81134,81136,81139],{"class":70,"line":34456},[68,81135,80868],{"class":78},[68,81137,81138],{"class":1742},"'3997403'",[68,81140,32950],{"class":78},[68,81142,81143,81145,81148],{"class":70,"line":34472},[68,81144,80878],{"class":78},[68,81146,81147],{"class":1742},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[68,81149,32950],{"class":78},[68,81151,81152,81154,81157],{"class":70,"line":34478},[68,81153,80888],{"class":78},[68,81155,81156],{"class":1742},"'100.00'",[68,81158,32950],{"class":78},[68,81160,81161,81163,81166],{"class":70,"line":34492},[68,81162,80898],{"class":78},[68,81164,81165],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[68,81167,32950],{"class":78},[68,81169,81170],{"class":70,"line":34498},[68,81171,79369],{"class":78},[68,81173,81174],{"class":70,"line":34504},[68,81175,80863],{"class":78},[68,81177,81178,81180,81183],{"class":70,"line":34515},[68,81179,80868],{"class":78},[68,81181,81182],{"class":1742},"'3998274'",[68,81184,32950],{"class":78},[68,81186,81187,81189,81192],{"class":70,"line":34521},[68,81188,80878],{"class":78},[68,81190,81191],{"class":1742},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[68,81193,32950],{"class":78},[68,81195,81196,81198,81200],{"class":70,"line":34527},[68,81197,80888],{"class":78},[68,81199,81068],{"class":1742},[68,81201,32950],{"class":78},[68,81203,81204,81206,81209],{"class":70,"line":34537},[68,81205,80898],{"class":78},[68,81207,81208],{"class":1742},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[68,81210,32950],{"class":78},[68,81212,81213],{"class":70,"line":34543},[68,81214,79369],{"class":78},[68,81216,81217],{"class":70,"line":34554},[68,81218,54591],{"class":78},[68,81220,81221],{"class":70,"line":34560},[68,81222,3890],{"emptyLinePlaceholder":1567},[68,81224,81225],{"class":70,"line":34570},[68,81226,81227],{"class":302},"    \u002F\u002F 1.渲染函数\n",[68,81229,81230,81232,81234,81236,81238],{"class":70,"line":34575},[68,81231,71562],{"class":316},[68,81233,71565],{"class":74},[68,81235,1640],{"class":78},[68,81237,5370],{"class":6705},[68,81239,13930],{"class":78},[68,81241,81242],{"class":70,"line":34581},[68,81243,81244],{"class":302},"      \u002F\u002F 声明空字符串\n",[68,81246,81247,81250,81253,81255],{"class":70,"line":34630},[68,81248,81249],{"class":316},"      let",[68,81251,81252],{"class":78}," str ",[68,81254,1685],{"class":316},[68,81256,71582],{"class":1742},[68,81258,81259],{"class":70,"line":34677},[68,81260,71587],{"class":302},[68,81262,81263,81265,81268,81270,81273,81276],{"class":70,"line":34682},[68,81264,59485],{"class":78},[68,81266,81267],{"class":74},"forEach",[68,81269,1640],{"class":78},[68,81271,81272],{"class":6705},"item",[68,81274,81275],{"class":316}," =>",[68,81277,79],{"class":78},[68,81279,81280,81282,81285,81288,81290,81293,81295,81298,81301,81303],{"class":70,"line":34688},[68,81281,62748],{"class":316},[68,81283,81284],{"class":78}," { ",[68,81286,81287],{"class":85},"name",[68,81289,13923],{"class":78},[68,81291,81292],{"class":85},"price",[68,81294,13923],{"class":78},[68,81296,81297],{"class":85},"picture",[68,81299,81300],{"class":78}," } ",[68,81302,1685],{"class":316},[68,81304,81305],{"class":78}," item\n",[68,81307,81308,81311,81313],{"class":70,"line":34707},[68,81309,81310],{"class":78},"        str ",[68,81312,10965],{"class":316},[68,81314,71646],{"class":1742},[68,81316,81317],{"class":70,"line":34713},[68,81318,81319],{"class":1742},"          \u003Cdiv class=\"item\">\n",[68,81321,81322,81325,81327],{"class":70,"line":34733},[68,81323,81324],{"class":1742},"            \u003Cimg src=\"${",[68,81326,81297],{"class":78},[68,81328,81329],{"class":1742},"}\" alt=\"\">\n",[68,81331,81332,81335,81337],{"class":70,"line":34739},[68,81333,81334],{"class":1742},"            \u003Cp class=\"name\">${",[68,81336,81287],{"class":78},[68,81338,81339],{"class":1742},"}\u003C\u002Fp>\n",[68,81341,81342,81345,81347],{"class":70,"line":34745},[68,81343,81344],{"class":1742},"            \u003Cp class=\"price\">${",[68,81346,81292],{"class":78},[68,81348,81339],{"class":1742},[68,81350,81351],{"class":70,"line":34755},[68,81352,81353],{"class":1742},"          \u003C\u002Fdiv>\n",[68,81355,81356],{"class":70,"line":34760},[68,81357,81358],{"class":1742},"        `\n",[68,81360,81361],{"class":70,"line":34766},[68,81362,66293],{"class":78},[68,81364,81365],{"class":70,"line":34782},[68,81366,81367],{"class":302},"      \u002F\u002F 追加给List\n",[68,81369,81370,81372,81374,81376,81379,81381,81383],{"class":70,"line":34827},[68,81371,57249],{"class":78},[68,81373,55880],{"class":74},[68,81375,1640],{"class":78},[68,81377,81378],{"class":1742},"'.list'",[68,81380,75726],{"class":78},[68,81382,1685],{"class":316},[68,81384,75462],{"class":78},[68,81386,81387],{"class":70,"line":34833},[68,81388,3677],{"class":78},[68,81390,81391],{"class":70,"line":34839},[68,81392,81393],{"class":302},"    \u002F\u002F 页面一打开就需要渲染\n",[68,81395,81396,81399],{"class":70,"line":34845},[68,81397,81398],{"class":74},"    render",[68,81400,81401],{"class":78},"(goodsList)\n",[68,81403,81404],{"class":70,"line":34856},[68,81405,81406],{"class":302},"    \u002F\u002F 2.过滤筛选\n",[68,81408,81409,81411,81413,81415,81418,81420,81422,81424,81426,81428,81430,81432],{"class":70,"line":34862},[68,81410,53889],{"class":78},[68,81412,55880],{"class":74},[68,81414,1640],{"class":78},[68,81416,81417],{"class":1742},"'.filter'",[68,81419,32310],{"class":78},[68,81421,59291],{"class":74},[68,81423,1640],{"class":78},[68,81425,59296],{"class":1742},[68,81427,13923],{"class":78},[68,81429,1712],{"class":6705},[68,81431,81275],{"class":316},[68,81433,79],{"class":78},[68,81435,81436],{"class":70,"line":34868},[68,81437,81438],{"class":302},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[68,81440,81441,81443,81445,81448,81450,81452,81454,81456],{"class":70,"line":34874},[68,81442,59706],{"class":316},[68,81444,81284],{"class":78},[68,81446,81447],{"class":85},"tagName",[68,81449,13923],{"class":78},[68,81451,33021],{"class":85},[68,81453,81300],{"class":78},[68,81455,1685],{"class":316},[68,81457,81458],{"class":78}," e.target\n",[68,81460,81461],{"class":70,"line":34892},[68,81462,81463],{"class":302},"      \u002F\u002F 判断\n",[68,81465,81466,81468,81470,81472,81474],{"class":70,"line":34906},[68,81467,55961],{"class":316},[68,81469,68512],{"class":78},[68,81471,55967],{"class":316},[68,81473,69734],{"class":1742},[68,81475,13930],{"class":78},[68,81477,81478],{"class":70,"line":34915},[68,81479,81480],{"class":302},"        \u002F\u002F console.log(11)\n",[68,81482,81483],{"class":70,"line":34924},[68,81484,81485],{"class":302},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[68,81487,81488],{"class":70,"line":34933},[68,81489,81490],{"class":302},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[68,81492,81493,81495,81497,81499],{"class":70,"line":34942},[68,81494,53312],{"class":316},[68,81496,53315],{"class":78},[68,81498,1685],{"class":316},[68,81500,81501],{"class":78}," goodsList\n",[68,81503,81504,81506,81509,81511,81514],{"class":70,"line":34948},[68,81505,3987],{"class":316},[68,81507,81508],{"class":78}," (dataset.index ",[68,81510,55967],{"class":316},[68,81512,81513],{"class":1742}," '1'",[68,81515,13930],{"class":78},[68,81517,81518,81521,81523,81526,81529,81531,81533,81535,81538,81540,81542,81545,81547,81549,81551],{"class":70,"line":34954},[68,81519,81520],{"class":78},"          arr ",[68,81522,1685],{"class":316},[68,81524,81525],{"class":78}," goodsList.",[68,81527,81528],{"class":74},"filter",[68,81530,1640],{"class":78},[68,81532,81272],{"class":6705},[68,81534,81275],{"class":316},[68,81536,81537],{"class":78}," item.price ",[68,81539,3201],{"class":316},[68,81541,5583],{"class":85},[68,81543,81544],{"class":316}," &&",[68,81546,81537],{"class":78},[68,81548,3079],{"class":316},[68,81550,7243],{"class":85},[68,81552,1646],{"class":78},[68,81554,81555,81558,81560,81562,81564,81566,81569],{"class":70,"line":34962},[68,81556,81557],{"class":78},"        } ",[68,81559,3192],{"class":316},[68,81561,3195],{"class":316},[68,81563,81508],{"class":78},[68,81565,55967],{"class":316},[68,81567,81568],{"class":1742}," '2'",[68,81570,13930],{"class":78},[68,81572,81573,81575,81577,81579,81581,81583,81585,81587,81589,81591,81593,81595,81597,81599,81602],{"class":70,"line":34967},[68,81574,81520],{"class":78},[68,81576,1685],{"class":316},[68,81578,81525],{"class":78},[68,81580,81528],{"class":74},[68,81582,1640],{"class":78},[68,81584,81272],{"class":6705},[68,81586,81275],{"class":316},[68,81588,81537],{"class":78},[68,81590,3201],{"class":316},[68,81592,7243],{"class":85},[68,81594,81544],{"class":316},[68,81596,81537],{"class":78},[68,81598,3079],{"class":316},[68,81600,81601],{"class":85}," 300",[68,81603,1646],{"class":78},[68,81605,81606,81608,81610,81612,81614,81616,81619],{"class":70,"line":34973},[68,81607,81557],{"class":78},[68,81609,3192],{"class":316},[68,81611,3195],{"class":316},[68,81613,81508],{"class":78},[68,81615,55967],{"class":316},[68,81617,81618],{"class":1742}," '3'",[68,81620,13930],{"class":78},[68,81622,81623,81625,81627,81629,81631,81633,81635,81637,81639,81641,81643],{"class":70,"line":34984},[68,81624,81520],{"class":78},[68,81626,1685],{"class":316},[68,81628,81525],{"class":78},[68,81630,81528],{"class":74},[68,81632,1640],{"class":78},[68,81634,81272],{"class":6705},[68,81636,81275],{"class":316},[68,81638,81537],{"class":78},[68,81640,3201],{"class":316},[68,81642,81601],{"class":85},[68,81644,1646],{"class":78},[68,81646,81647],{"class":70,"line":34990},[68,81648,4019],{"class":78},[68,81650,81651],{"class":70,"line":35010},[68,81652,81653],{"class":302},"        \u002F\u002F 渲染函数\n",[68,81655,81656,81658],{"class":70,"line":35016},[68,81657,71886],{"class":74},[68,81659,53894],{"class":78},[68,81661,81662],{"class":70,"line":35022},[68,81663,53880],{"class":78},[68,81665,81666],{"class":70,"line":35028},[68,81667,3890],{"emptyLinePlaceholder":1567},[68,81669,81670],{"class":70,"line":35045},[68,81671,34945],{"class":78},[68,81673,81674,81676,81678],{"class":70,"line":35051},[68,81675,53899],{"class":78},[68,81677,53295],{"class":52784},[68,81679,52791],{"class":78},[68,81681,81682,81684,81686],{"class":70,"line":35057},[68,81683,53267],{"class":78},[68,81685,53282],{"class":52784},[68,81687,52791],{"class":78},[68,81689,81690],{"class":70,"line":35063},[68,81691,3890],{"emptyLinePlaceholder":1567},[68,81693,81694,81696,81698],{"class":70,"line":35069},[68,81695,53267],{"class":78},[68,81697,52119],{"class":52784},[68,81699,52791],{"class":78},[14,81701,81703],{"id":81702},"_410-深入了解对象","4.10 深入了解对象",[19,81705,81707],{"id":81706},"_4101-创建对象","4.10.1 创建对象",[170,81709,81710],{},[801,81711],{"alt":63,"src":81712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[170,81714,81715],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,81717,81719],{"id":81718},"_4102-构造函数","4.10.2 构造函数",[170,81721,81722,81725],{},[268,81723,81724],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[170,81727,81728,81731],{},[268,81729,81730],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[58,81733,81735],{"className":52117,"code":81734,"language":52119,"meta":63,"style":63},"\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",[65,81736,81737,81745,81750,81771,81784,81796,81808,81812,81817,81844,81849,81876],{"__ignoreMap":63},[68,81738,81739,81741,81743],{"class":70,"line":71},[68,81740,2537],{"class":78},[68,81742,53295],{"class":52784},[68,81744,52791],{"class":78},[68,81746,81747],{"class":70,"line":82},[68,81748,81749],{"class":302},"\u002F\u002F例：\n",[68,81751,81752,81754,81757,81759,81761,81763,81765,81767,81769],{"class":70,"line":98},[68,81753,55930],{"class":316},[68,81755,81756],{"class":74}," Pig",[68,81758,1640],{"class":78},[68,81760,81287],{"class":6705},[68,81762,2007],{"class":78},[68,81764,71699],{"class":6705},[68,81766,2007],{"class":78},[68,81768,71716],{"class":6705},[68,81770,13930],{"class":78},[68,81772,81773,81776,81779,81781],{"class":70,"line":104},[68,81774,81775],{"class":85},"    this",[68,81777,81778],{"class":78},".name",[68,81780,1685],{"class":316},[68,81782,81783],{"class":78},"name\n",[68,81785,81786,81788,81791,81793],{"class":70,"line":112},[68,81787,81775],{"class":85},[68,81789,81790],{"class":78},".age",[68,81792,1685],{"class":316},[68,81794,81795],{"class":78},"age\n",[68,81797,81798,81800,81803,81805],{"class":70,"line":124},[68,81799,81775],{"class":85},[68,81801,81802],{"class":78},".gender",[68,81804,1685],{"class":316},[68,81806,81807],{"class":78},"gender    \n",[68,81809,81810],{"class":70,"line":1496},[68,81811,101],{"class":78},[68,81813,81814],{"class":70,"line":1502},[68,81815,81816],{"class":302},"\u002F\u002F创建佩奇对象\n",[68,81818,81819,81821,81824,81826,81828,81830,81833,81835,81837,81839,81842],{"class":70,"line":1510},[68,81820,8281],{"class":316},[68,81822,81823],{"class":85}," Peppa",[68,81825,13205],{"class":316},[68,81827,81756],{"class":74},[68,81829,1640],{"class":78},[68,81831,81832],{"class":1742},"'佩奇'",[68,81834,2007],{"class":78},[68,81836,1973],{"class":85},[68,81838,2007],{"class":78},[68,81840,81841],{"class":1742},"'女'",[68,81843,1646],{"class":78},[68,81845,81846],{"class":70,"line":1521},[68,81847,81848],{"class":302},"\u002F\u002F创建乔治对象\n",[68,81850,81851,81853,81856,81858,81860,81862,81865,81867,81869,81871,81874],{"class":70,"line":3103},[68,81852,8281],{"class":316},[68,81854,81855],{"class":85}," George",[68,81857,13205],{"class":316},[68,81859,81756],{"class":74},[68,81861,1640],{"class":78},[68,81863,81864],{"class":1742},"'乔治'",[68,81866,2007],{"class":78},[68,81868,1709],{"class":85},[68,81870,2007],{"class":78},[68,81872,81873],{"class":1742},"'男'",[68,81875,1646],{"class":78},[68,81877,81878,81880,81882],{"class":70,"line":3108},[68,81879,53267],{"class":78},[68,81881,53295],{"class":52784},[68,81883,52791],{"class":78},[170,81885,81886],{},[801,81887],{"alt":63,"src":81888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[170,81890,81891],{},[801,81892],{"alt":63,"src":81893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[170,81895,81896],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[170,81898,81899],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[170,81901,81902],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[170,81904,81905],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[170,81907,81908],{},"这里用等号是因为：对象.属性=值",[170,81910,81911],{},"①利用对象字面量创建对象",[170,81913,81914],{},"const o={",[170,81916,81917],{},"name:'pink'",[170,81919,81920],{},"} ②利用new Object创建对象",[170,81922,81923],{},"const o=new Object({name:'pink'})",[170,81925,81926],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[170,81928,81929],{},"构造函数创建对象的执行过程：",[170,81931,81932],{},[801,81933],{"alt":63,"src":81934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,81936,81938],{"id":81937},"_4103-实例成员","4.10.3 实例成员",[170,81940,81941],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[263,81943,81944,81947,81950],{},[27,81945,81946],{},"实例对象的属性和方法即为实例成员",[27,81948,81949],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[27,81951,81952],{},"构造函数创建的实例对象彼此独立互不影响",[19,81954,81956],{"id":81955},"_4104-静态成员","4.10.4 静态成员",[170,81958,81959],{},[801,81960],{"alt":63,"src":81961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[170,81963,81964],{},"静态成员有Date.now() Math.PI Math.random()",[170,81966,81967],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[170,81969,81970],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[170,81972,81973],{},"function Pig(name) n {",[170,81975,81976],{},"this.name=name",[170,81978,2573],{},[170,81980,81981],{},"Pig.eyes=2",[170,81983,81984],{},"Pig.sayHai=function () { console.log(this) }",[170,81986,81987],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[170,81989,81990],{},"console.log(Pig.eyes) \u002F\u002F2",[170,81992,12820],{},[263,81994,81995,81998,82001,82004,82007],{},[27,81996,81997],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[27,81999,82000],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[27,82002,82003],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[27,82005,82006],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[27,82008,82009],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[170,82011,82012],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,82014,82016],{"id":82015},"_4105-内置构造函数","4.10.5 内置构造函数",[170,82018,82019],{},"内置构造函数包含：",[170,82021,82022],{},[801,82023],{"alt":63,"src":82024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[170,82026,82027],{},[801,82028],{"alt":63,"src":82029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[170,82031,82032],{},"这些基本数据类型，js对他们进行了包装",[53295,82034,82035],{},"\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",[245,82037,82039],{"id":82038},"_41051-object","4.10.5.1 Object",[170,82041,82042],{},"Object 是内置的构造函数，用于创建普通对象",[170,82044,82045],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[58,82047,82049],{"className":52117,"code":82048,"language":52119,"meta":63,"style":63},"const user=new Object({name:'小明',age:15})\n",[65,82050,82051],{"__ignoreMap":63},[68,82052,82053],{"class":70,"line":71},[68,82054,82048],{"class":78},[170,82056,82057],{},"三个常用的静态方法：",[24396,82059,82061],{"id":82060},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[170,82063,82064],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[170,82066,82067],{},[801,82068],{"alt":63,"src":82069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[170,82071,82072],{},[801,82073],{"alt":63,"src":82074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[58,82076,82078],{"className":54549,"code":82077,"language":54551,"meta":63,"style":63},"\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",[65,82079,82080,82088,82096,82101,82106,82111,82116,82121,82126,82134],{"__ignoreMap":63},[68,82081,82082,82084,82086],{"class":70,"line":71},[68,82083,2537],{"class":78},[68,82085,53282],{"class":52784},[68,82087,52791],{"class":78},[68,82089,82090,82092,82094],{"class":70,"line":82},[68,82091,53626],{"class":78},[68,82093,53295],{"class":52784},[68,82095,52791],{"class":78},[68,82097,82098],{"class":70,"line":98},[68,82099,82100],{"class":78},"    const o = { name: 'pink', age: 6 }\n",[68,82102,82103],{"class":70,"line":104},[68,82104,82105],{"class":78},"    \u002F\u002F 获得所有属性名\n",[68,82107,82108],{"class":70,"line":112},[68,82109,82110],{"class":78},"    const arr = Object.keys(o)\n",[68,82112,82113],{"class":70,"line":124},[68,82114,82115],{"class":78},"    console.log(arr)\n",[68,82117,82118],{"class":70,"line":1496},[68,82119,82120],{"class":78},"    \u002F\u002F 获得所有属性值\n",[68,82122,82123],{"class":70,"line":1502},[68,82124,82125],{"class":78},"    console.log(Object.values(o))\n",[68,82127,82128,82130,82132],{"class":70,"line":1510},[68,82129,53899],{"class":78},[68,82131,53295],{"class":52784},[68,82133,52791],{"class":78},[68,82135,82136,82138,82140],{"class":70,"line":1521},[68,82137,53267],{"class":78},[68,82139,53282],{"class":52784},[68,82141,52791],{"class":78},[24396,82143,82145],{"id":82144},"_410512-object-assign","4.10.5.1.2 Object. assign",[170,82147,82148],{},"Object.assign(oo,o)",[170,82150,82151],{},"后的东西添加给前 是追加",[170,82153,82154],{},[801,82155],{"alt":63,"src":82156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[170,82158,82159],{},[801,82160],{"alt":63,"src":82161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[58,82163,82165],{"className":54549,"code":82164,"language":54551,"meta":63,"style":63},"\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",[65,82166,82167,82175,82183,82187,82191,82195,82199,82203,82207,82212,82217,82222,82227,82232,82240],{"__ignoreMap":63},[68,82168,82169,82171,82173],{"class":70,"line":71},[68,82170,2537],{"class":78},[68,82172,53282],{"class":52784},[68,82174,52791],{"class":78},[68,82176,82177,82179,82181],{"class":70,"line":82},[68,82178,53626],{"class":78},[68,82180,53295],{"class":52784},[68,82182,52791],{"class":78},[68,82184,82185],{"class":70,"line":98},[68,82186,82100],{"class":78},[68,82188,82189],{"class":70,"line":104},[68,82190,82105],{"class":78},[68,82192,82193],{"class":70,"line":112},[68,82194,82110],{"class":78},[68,82196,82197],{"class":70,"line":124},[68,82198,82115],{"class":78},[68,82200,82201],{"class":70,"line":1496},[68,82202,82120],{"class":78},[68,82204,82205],{"class":70,"line":1502},[68,82206,82125],{"class":78},[68,82208,82209],{"class":70,"line":1510},[68,82210,82211],{"class":78},"    const oo = {}\n",[68,82213,82214],{"class":70,"line":1521},[68,82215,82216],{"class":78},"    Object.assign(oo, o)\n",[68,82218,82219],{"class":70,"line":3103},[68,82220,82221],{"class":78},"    console.log(oo)\n",[68,82223,82224],{"class":70,"line":3108},[68,82225,82226],{"class":78},"    Object.assign(o, { gender: '女' })\n",[68,82228,82229],{"class":70,"line":3114},[68,82230,82231],{"class":78},"    console.log(o)\n",[68,82233,82234,82236,82238],{"class":70,"line":3119},[68,82235,53899],{"class":78},[68,82237,53295],{"class":52784},[68,82239,52791],{"class":78},[68,82241,82242,82244,82246],{"class":70,"line":3133},[68,82243,53267],{"class":78},[68,82245,53282],{"class":52784},[68,82247,52791],{"class":78},[170,82249,82250],{},[801,82251],{"alt":63,"src":82252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[245,82254,82256],{"id":82255},"_41052-array","4.10.5.2 Array",[170,82258,82259],{},"Array 是内置的构造函数，用于创建数组",[170,82261,82262],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[58,82264,82266],{"className":52117,"code":82265,"language":52119,"meta":63,"style":63},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[65,82267,82268,82273],{"__ignoreMap":63},[68,82269,82270],{"class":70,"line":71},[68,82271,82272],{"class":78},"const arr=new Array(3,5)\n",[68,82274,82275],{"class":70,"line":82},[68,82276,82277],{"class":78},"console.log(arr)  \u002F\u002F[3,5]\n",[170,82279,82280],{},"Array的实例方法，这个方法是实例成员",[170,82282,82283],{},[801,82284],{"alt":63,"src":82285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24396,82287,82289],{"id":82288},"_410521-reduce","4.10.5.2.1 reduce",[170,82291,82292],{},[801,82293],{"alt":63,"src":82294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[58,82296,82298],{"className":54549,"code":82297,"language":54551,"meta":63,"style":63},"\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",[65,82299,82300,82308,82316,82321,82326,82331,82336,82340,82345,82350,82355,82359,82364,82369,82373,82378,82383,82388,82396],{"__ignoreMap":63},[68,82301,82302,82304,82306],{"class":70,"line":71},[68,82303,2537],{"class":78},[68,82305,53282],{"class":52784},[68,82307,52791],{"class":78},[68,82309,82310,82312,82314],{"class":70,"line":82},[68,82311,53626],{"class":78},[68,82313,53295],{"class":52784},[68,82315,52791],{"class":78},[68,82317,82318],{"class":70,"line":98},[68,82319,82320],{"class":78},"    const arr = [1, 5, 8]\n",[68,82322,82323],{"class":70,"line":104},[68,82324,82325],{"class":78},"    \u002F\u002F 1.没有初始值\n",[68,82327,82328],{"class":70,"line":112},[68,82329,82330],{"class":78},"    const total = arr.reduce(function (prev, current) {\n",[68,82332,82333],{"class":70,"line":124},[68,82334,82335],{"class":78},"      return prev + current\n",[68,82337,82338],{"class":70,"line":1496},[68,82339,34945],{"class":78},[68,82341,82342],{"class":70,"line":1502},[68,82343,82344],{"class":78},"    console.log(total)   \u002F\u002F14\n",[68,82346,82347],{"class":70,"line":1510},[68,82348,82349],{"class":78},"    \u002F\u002F 2.有初始值\n",[68,82351,82352],{"class":70,"line":1521},[68,82353,82354],{"class":78},"    const total1 = arr.reduce(function (prev, current) {\n",[68,82356,82357],{"class":70,"line":3103},[68,82358,82335],{"class":78},[68,82360,82361],{"class":70,"line":3108},[68,82362,82363],{"class":78},"    }, 10)\n",[68,82365,82366],{"class":70,"line":3114},[68,82367,82368],{"class":78},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[68,82370,82371],{"class":70,"line":3119},[68,82372,3890],{"emptyLinePlaceholder":1567},[68,82374,82375],{"class":70,"line":3133},[68,82376,82377],{"class":78},"    \u002F\u002F 3.箭头函数写法\n",[68,82379,82380],{"class":70,"line":3138},[68,82381,82382],{"class":78},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[68,82384,82385],{"class":70,"line":3144},[68,82386,82387],{"class":78},"    console.log(total2)   \u002F\u002F24\n",[68,82389,82390,82392,82394],{"class":70,"line":3165},[68,82391,53899],{"class":78},[68,82393,53295],{"class":52784},[68,82395,52791],{"class":78},[68,82397,82398,82400,82402],{"class":70,"line":3170},[68,82399,53267],{"class":78},[68,82401,53282],{"class":52784},[68,82403,52791],{"class":78},[170,82405,82406],{},"执行过程：",[263,82408,82409,82412,82415],{},[27,82410,82411],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[27,82413,82414],{},"每一次循环，把返回值给作为下一次循环的上一次值",[27,82416,82417],{},"如果有起始值，则起始值作为上一次值",[58,82419,82421],{"className":54549,"code":82420,"language":54551,"meta":63,"style":63},"\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",[65,82422,82423,82431,82439,82443,82447,82451,82455,82459,82463,82468,82473,82478,82483,82488,82492,82496,82500,82504,82508,82512,82517,82521,82526,82530,82535,82540,82544,82548,82552,82560],{"__ignoreMap":63},[68,82424,82425,82427,82429],{"class":70,"line":71},[68,82426,2537],{"class":78},[68,82428,53282],{"class":52784},[68,82430,52791],{"class":78},[68,82432,82433,82435,82437],{"class":70,"line":82},[68,82434,53626],{"class":78},[68,82436,53295],{"class":52784},[68,82438,52791],{"class":78},[68,82440,82441],{"class":70,"line":98},[68,82442,82320],{"class":78},[68,82444,82445],{"class":70,"line":104},[68,82446,82325],{"class":78},[68,82448,82449],{"class":70,"line":112},[68,82450,82330],{"class":78},[68,82452,82453],{"class":70,"line":124},[68,82454,82335],{"class":78},[68,82456,82457],{"class":70,"line":1496},[68,82458,34945],{"class":78},[68,82460,82461],{"class":70,"line":1502},[68,82462,82344],{"class":78},[68,82464,82465],{"class":70,"line":1510},[68,82466,82467],{"class":78},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[68,82469,82470],{"class":70,"line":1521},[68,82471,82472],{"class":78},"    \u002F\u002F     1              5                    6\n",[68,82474,82475],{"class":70,"line":3103},[68,82476,82477],{"class":78},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[68,82479,82480],{"class":70,"line":3108},[68,82481,82482],{"class":78},"    \u002F\u002F     6              8                    14\n",[68,82484,82485],{"class":70,"line":3114},[68,82486,82487],{"class":78},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[68,82489,82490],{"class":70,"line":3119},[68,82491,82349],{"class":78},[68,82493,82494],{"class":70,"line":3133},[68,82495,82354],{"class":78},[68,82497,82498],{"class":70,"line":3138},[68,82499,82335],{"class":78},[68,82501,82502],{"class":70,"line":3144},[68,82503,82363],{"class":78},[68,82505,82506],{"class":70,"line":3165},[68,82507,82368],{"class":78},[68,82509,82510],{"class":70,"line":3170},[68,82511,82467],{"class":78},[68,82513,82514],{"class":70,"line":3184},[68,82515,82516],{"class":78},"    \u002F\u002F     10             1                     11\n",[68,82518,82519],{"class":70,"line":3189},[68,82520,82477],{"class":78},[68,82522,82523],{"class":70,"line":3218},[68,82524,82525],{"class":78},"    \u002F\u002F     11             5                    16\n",[68,82527,82528],{"class":70,"line":3223},[68,82529,82477],{"class":78},[68,82531,82532],{"class":70,"line":3240},[68,82533,82534],{"class":78},"    \u002F\u002F     16             8                    24\n",[68,82536,82537],{"class":70,"line":3245},[68,82538,82539],{"class":78},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[68,82541,82542],{"class":70,"line":3250},[68,82543,82377],{"class":78},[68,82545,82546],{"class":70,"line":3255},[68,82547,82382],{"class":78},[68,82549,82550],{"class":70,"line":3269},[68,82551,82387],{"class":78},[68,82553,82554,82556,82558],{"class":70,"line":3274},[68,82555,53899],{"class":78},[68,82557,53295],{"class":52784},[68,82559,52791],{"class":78},[68,82561,82562,82564,82566],{"class":70,"line":4067},[68,82563,53267],{"class":78},[68,82565,53282],{"class":52784},[68,82567,52791],{"class":78},[24396,82569,82571],{"id":82570},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[170,82573,82574],{},[801,82575],{"alt":63,"src":82576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[58,82578,82580],{"className":54549,"code":82579,"language":54551,"meta":63,"style":63},"\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",[65,82581,82582,82590,82598,82603,82608,82613,82618,82622,82627,82632,82637,82642,82647,82652,82656,82661,82665,82670,82678],{"__ignoreMap":63},[68,82583,82584,82586,82588],{"class":70,"line":71},[68,82585,2537],{"class":78},[68,82587,53282],{"class":52784},[68,82589,52791],{"class":78},[68,82591,82592,82594,82596],{"class":70,"line":82},[68,82593,53626],{"class":78},[68,82595,53295],{"class":52784},[68,82597,52791],{"class":78},[68,82599,82600],{"class":70,"line":98},[68,82601,82602],{"class":78},"    const arr = [\n",[68,82604,82605],{"class":70,"line":104},[68,82606,82607],{"class":78},"      { name: '张三', salary: 10000 },\n",[68,82609,82610],{"class":70,"line":112},[68,82611,82612],{"class":78},"      { name: '李四', salary: 10000 },\n",[68,82614,82615],{"class":70,"line":124},[68,82616,82617],{"class":78},"      { name: '王五', salary: 10000 }\n",[68,82619,82620],{"class":70,"line":1496},[68,82621,54591],{"class":78},[68,82623,82624],{"class":70,"line":1502},[68,82625,82626],{"class":78},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[68,82628,82629],{"class":70,"line":1510},[68,82630,82631],{"class":78},"    \u002F\u002F prev是累计值\n",[68,82633,82634],{"class":70,"line":1521},[68,82635,82636],{"class":78},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[68,82638,82639],{"class":70,"line":3103},[68,82640,82641],{"class":78},"    console.log(total)\n",[68,82643,82644],{"class":70,"line":3108},[68,82645,82646],{"class":78},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[68,82648,82649],{"class":70,"line":3114},[68,82650,82651],{"class":78},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[68,82653,82654],{"class":70,"line":3119},[68,82655,82646],{"class":78},[68,82657,82658],{"class":70,"line":3133},[68,82659,82660],{"class":78},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[68,82662,82663],{"class":70,"line":3138},[68,82664,82646],{"class":78},[68,82666,82667],{"class":70,"line":3144},[68,82668,82669],{"class":78},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[68,82671,82672,82674,82676],{"class":70,"line":3165},[68,82673,53899],{"class":78},[68,82675,53295],{"class":52784},[68,82677,52791],{"class":78},[68,82679,82680,82682,82684],{"class":70,"line":3170},[68,82681,53267],{"class":78},[68,82683,53282],{"class":52784},[68,82685,52791],{"class":78},[24396,82687,82689],{"id":82688},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[170,82691,82692],{},[801,82693],{"alt":63,"src":82694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[170,82696,82697],{},[801,82698],{"alt":63,"src":82699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[263,82701,82702],{},[27,82703,82704],{},"find()",[170,82706,82707],{},"循环查找，找到第一个就ok",[170,82709,82710],{},[1867,82711,82714],{"href":82712,"rel":82713},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25350],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[58,82716,82718],{"className":52117,"code":82717,"language":52119,"meta":63,"style":63},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[65,82719,82720,82725,82730],{"__ignoreMap":63},[68,82721,82722],{"class":70,"line":71},[68,82723,82724],{"class":78},"const array1 = [5, 12, 8, 130, 44]\n",[68,82726,82727],{"class":70,"line":82},[68,82728,82729],{"class":78},"const found = array1.find((element) => element > 10)\n",[68,82731,82732],{"class":70,"line":98},[68,82733,82734],{"class":78},"console.log(found)  \u002F\u002F12\n",[170,82736,82737,82739,82740,82745,82746,82749,82750,82752,82753,82758,82759,82761,82762,82764,82765,82767,82768],{},[65,82738,82704],{}," 方法是一个",[1867,82741,82744],{"href":82742,"rel":82743},"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",[25350],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[65,82747,82748],{},"callbackFn"," 函数，直到 ",[65,82751,82748],{}," 返回一个",[1867,82754,82757],{"href":82755,"rel":82756},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25350],"真值","。然后 ",[65,82760,82704],{}," 返回该元素并停止迭代数组。如果 ",[65,82763,82748],{}," 从未返回真值，则 ",[65,82766,82704],{}," 返回 ",[65,82769,82770],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[58,82772,82774],{"className":54549,"code":82773,"language":54551,"meta":63,"style":63},"\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",[65,82775,82776,82784,82792,82797,82802,82807,82811,82816,82821,82825,82830,82835,82839,82843,82848,82853,82857,82861,82866,82871,82876,82881,82886,82890,82895,82900,82905,82910,82914,82919,82927],{"__ignoreMap":63},[68,82777,82778,82780,82782],{"class":70,"line":71},[68,82779,2537],{"class":78},[68,82781,53282],{"class":52784},[68,82783,52791],{"class":78},[68,82785,82786,82788,82790],{"class":70,"line":82},[68,82787,53626],{"class":78},[68,82789,53295],{"class":52784},[68,82791,52791],{"class":78},[68,82793,82794],{"class":70,"line":98},[68,82795,82796],{"class":78},"    const arr = ['red', 'blue', 'green']\n",[68,82798,82799],{"class":70,"line":104},[68,82800,82801],{"class":78},"    const found = arr.find(item => item === 'pink')\n",[68,82803,82804],{"class":70,"line":112},[68,82805,82806],{"class":78},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[68,82808,82809],{"class":70,"line":124},[68,82810,3890],{"emptyLinePlaceholder":1567},[68,82812,82813],{"class":70,"line":1496},[68,82814,82815],{"class":78},"    \u002F\u002F 使用场景，用于查找数据\n",[68,82817,82818],{"class":70,"line":1502},[68,82819,82820],{"class":78},"    const arr1 = [\n",[68,82822,82823],{"class":70,"line":1510},[68,82824,80863],{"class":78},[68,82826,82827],{"class":70,"line":1521},[68,82828,82829],{"class":78},"        name: '小米',\n",[68,82831,82832],{"class":70,"line":3103},[68,82833,82834],{"class":78},"        price: 1999\n",[68,82836,82837],{"class":70,"line":3108},[68,82838,79369],{"class":78},[68,82840,82841],{"class":70,"line":3114},[68,82842,80863],{"class":78},[68,82844,82845],{"class":70,"line":3119},[68,82846,82847],{"class":78},"        name: '华为',\n",[68,82849,82850],{"class":70,"line":3133},[68,82851,82852],{"class":78},"        price: 3999\n",[68,82854,82855],{"class":70,"line":3138},[68,82856,53880],{"class":78},[68,82858,82859],{"class":70,"line":3144},[68,82860,54591],{"class":78},[68,82862,82863],{"class":70,"line":3165},[68,82864,82865],{"class":78},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[68,82867,82868],{"class":70,"line":3170},[68,82869,82870],{"class":78},"    \u002F\u002F const found1 = arr1.find(item => {\n",[68,82872,82873],{"class":70,"line":3184},[68,82874,82875],{"class":78},"    \u002F\u002F   if (item.name === '小米') {\n",[68,82877,82878],{"class":70,"line":3189},[68,82879,82880],{"class":78},"    \u002F\u002F     return item\n",[68,82882,82883],{"class":70,"line":3218},[68,82884,82885],{"class":78},"    \u002F\u002F   }\n",[68,82887,82888],{"class":70,"line":3223},[68,82889,64768],{"class":78},[68,82891,82892],{"class":70,"line":3240},[68,82893,82894],{"class":78},"    \u002F\u002F 另一种写法\n",[68,82896,82897],{"class":70,"line":3245},[68,82898,82899],{"class":78},"    const found1 = arr1.find(item => {\n",[68,82901,82902],{"class":70,"line":3250},[68,82903,82904],{"class":78},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[68,82906,82907],{"class":70,"line":3255},[68,82908,82909],{"class":78},"      return item.name = '小米'\n",[68,82911,82912],{"class":70,"line":3269},[68,82913,34945],{"class":78},[68,82915,82916],{"class":70,"line":3274},[68,82917,82918],{"class":78},"    console.log(found1)\n",[68,82920,82921,82923,82925],{"class":70,"line":4067},[68,82922,53899],{"class":78},[68,82924,53295],{"class":52784},[68,82926,52791],{"class":78},[68,82928,82929,82931,82933],{"class":70,"line":4081},[68,82930,53267],{"class":78},[68,82932,53282],{"class":52784},[68,82934,52791],{"class":78},[170,82936,82937],{},[801,82938],{"alt":63,"src":82939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[170,82941,82942],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[263,82944,82945],{"start":82},[27,82946,82947],{},"every()返回的是布尔值",[170,82949,82950],{},[1867,82951,82954],{"href":82952,"rel":82953},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25350],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[170,82956,82957],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[170,82959,82960],{},"some是只有有一个就没问题",[170,82962,82963],{},"every是必须全是才行",[58,82965,82969],{"className":82966,"code":82967,"language":82968,"meta":63,"style":63},"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",[65,82970,82971,82987,83001,83005,83014],{"__ignoreMap":63},[68,82972,82973,82975,82978,82980,82982,82985],{"class":70,"line":71},[68,82974,55930],{"class":316},[68,82976,82977],{"class":78}," isBigEnough(element, ",[68,82979,75535],{"class":316},[68,82981,13923],{"class":78},[68,82983,82984],{"class":316},"array",[68,82986,13930],{"class":78},[68,82988,82989,82992,82995,82997,82999],{"class":70,"line":82},[68,82990,82991],{"class":316},"  return",[68,82993,82994],{"class":78}," element ",[68,82996,3201],{"class":316},[68,82998,3528],{"class":85},[68,83000,95],{"class":78},[68,83002,83003],{"class":70,"line":98},[68,83004,101],{"class":78},[68,83006,83007,83010,83012],{"class":70,"line":104},[68,83008,83009],{"class":78},"[12, 5, 8, 130, 44].every(isBigEnough); ",[68,83011,34813],{"class":316},[68,83013,55997],{"class":78},[68,83015,83016,83019,83021],{"class":70,"line":112},[68,83017,83018],{"class":78},"[12, 54, 18, 130, 44].every(isBigEnough); ",[68,83020,34813],{"class":316},[68,83022,59418],{"class":78},[58,83024,83026],{"className":54549,"code":83025,"language":54551,"meta":63,"style":63},"\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",[65,83027,83028,83036,83044,83049,83053,83058,83063,83071],{"__ignoreMap":63},[68,83029,83030,83032,83034],{"class":70,"line":71},[68,83031,2537],{"class":78},[68,83033,53282],{"class":52784},[68,83035,52791],{"class":78},[68,83037,83038,83040,83042],{"class":70,"line":82},[68,83039,53626],{"class":78},[68,83041,53295],{"class":52784},[68,83043,52791],{"class":78},[68,83045,83046],{"class":70,"line":98},[68,83047,83048],{"class":78},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[68,83050,83051],{"class":70,"line":104},[68,83052,79799],{"class":78},[68,83054,83055],{"class":70,"line":112},[68,83056,83057],{"class":78},"    const flag = arr.every(item => item >= 10)\n",[68,83059,83060],{"class":70,"line":124},[68,83061,83062],{"class":78},"    console.log(flag)    \u002F\u002Ftrue\n",[68,83064,83065,83067,83069],{"class":70,"line":1496},[68,83066,53899],{"class":78},[68,83068,53295],{"class":52784},[68,83070,52791],{"class":78},[68,83072,83073,83075,83077],{"class":70,"line":1502},[68,83074,53267],{"class":78},[68,83076,53282],{"class":52784},[68,83078,52791],{"class":78},[58,83080,83082],{"className":54549,"code":83081,"language":54551,"meta":63,"style":63},"\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",[65,83083,83084,83092,83100,83104,83109,83114,83119,83127],{"__ignoreMap":63},[68,83085,83086,83088,83090],{"class":70,"line":71},[68,83087,2537],{"class":78},[68,83089,53282],{"class":52784},[68,83091,52791],{"class":78},[68,83093,83094,83096,83098],{"class":70,"line":82},[68,83095,53626],{"class":78},[68,83097,53295],{"class":52784},[68,83099,52791],{"class":78},[68,83101,83102],{"class":70,"line":98},[68,83103,83048],{"class":78},[68,83105,83106],{"class":70,"line":104},[68,83107,83108],{"class":78},"    const arr = [10, 0, 5]\n",[68,83110,83111],{"class":70,"line":112},[68,83112,83113],{"class":78},"    const flag = arr.some(item => item >= 10)\n",[68,83115,83116],{"class":70,"line":124},[68,83117,83118],{"class":78},"    console.log(flag)   \u002F\u002Ftrue\n",[68,83120,83121,83123,83125],{"class":70,"line":1496},[68,83122,53899],{"class":78},[68,83124,53295],{"class":52784},[68,83126,52791],{"class":78},[68,83128,83129,83131,83133],{"class":70,"line":1502},[68,83130,53267],{"class":78},[68,83132,53282],{"class":52784},[68,83134,52791],{"class":78},[24396,83136,83138],{"id":83137},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[170,83140,83141],{},[801,83142],{"alt":63,"src":83143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[58,83145,83147],{"className":52117,"code":83146,"language":52119,"meta":63,"style":63},"\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",[65,83148,83149,83159,83173,83177,83185,83199,83219,83231,83239,83246,83258,83270,83282,83294,83304,83314,83318,83326,83334,83338,83346,83358,83366,83388,83393,83398,83431,83439,83447,83451],{"__ignoreMap":63},[68,83150,83151,83153,83155,83157],{"class":70,"line":71},[68,83152,52781],{"class":78},[68,83154,52785],{"class":52784},[68,83156,52788],{"class":74},[68,83158,52791],{"class":78},[68,83160,83161,83163,83165,83167,83169,83171],{"class":70,"line":82},[68,83162,2537],{"class":78},[68,83164,52119],{"class":52784},[68,83166,52800],{"class":74},[68,83168,1685],{"class":78},[68,83170,52805],{"class":1742},[68,83172,52791],{"class":78},[68,83174,83175],{"class":70,"line":98},[68,83176,3890],{"emptyLinePlaceholder":1567},[68,83178,83179,83181,83183],{"class":70,"line":104},[68,83180,2537],{"class":78},[68,83182,52818],{"class":52784},[68,83184,52791],{"class":78},[68,83186,83187,83189,83191,83193,83195,83197],{"class":70,"line":112},[68,83188,53626],{"class":78},[68,83190,52828],{"class":52784},[68,83192,52831],{"class":74},[68,83194,1685],{"class":78},[68,83196,52836],{"class":1742},[68,83198,52791],{"class":78},[68,83200,83201,83203,83205,83207,83209,83211,83213,83215,83217],{"class":70,"line":124},[68,83202,53626],{"class":78},[68,83204,52828],{"class":52784},[68,83206,16408],{"class":74},[68,83208,1685],{"class":78},[68,83210,52875],{"class":1742},[68,83212,52855],{"class":74},[68,83214,1685],{"class":78},[68,83216,52882],{"class":1742},[68,83218,52791],{"class":78},[68,83220,83221,83223,83225,83227,83229],{"class":70,"line":1496},[68,83222,53626],{"class":78},[68,83224,52891],{"class":52784},[68,83226,52894],{"class":78},[68,83228,52891],{"class":52784},[68,83230,52791],{"class":78},[68,83232,83233,83235,83237],{"class":70,"line":1502},[68,83234,53626],{"class":78},[68,83236,1553],{"class":52784},[68,83238,52791],{"class":78},[68,83240,83241,83244],{"class":70,"line":1510},[68,83242,83243],{"class":52784},"    div",[68,83245,79],{"class":78},[68,83247,83248,83250,83252,83254,83256],{"class":70,"line":1521},[68,83249,56250],{"class":85},[68,83251,89],{"class":78},[68,83253,3213],{"class":85},[68,83255,317],{"class":316},[68,83257,95],{"class":78},[68,83259,83260,83262,83264,83266,83268],{"class":70,"line":3103},[68,83261,56264],{"class":85},[68,83263,89],{"class":78},[68,83265,2030],{"class":85},[68,83267,317],{"class":316},[68,83269,95],{"class":78},[68,83271,83272,83274,83276,83278,83280],{"class":70,"line":3108},[68,83273,58837],{"class":85},[68,83275,89],{"class":78},[68,83277,2030],{"class":85},[68,83279,317],{"class":316},[68,83281,95],{"class":78},[68,83283,83284,83286,83288,83290,83292],{"class":70,"line":3114},[68,83285,66611],{"class":85},[68,83287,89],{"class":78},[68,83289,2126],{"class":85},[68,83291,317],{"class":316},[68,83293,95],{"class":78},[68,83295,83296,83298,83300,83302],{"class":70,"line":3119},[68,83297,58764],{"class":85},[68,83299,89],{"class":78},[68,83301,53074],{"class":85},[68,83303,95],{"class":78},[68,83305,83306,83308,83310,83312],{"class":70,"line":3133},[68,83307,56362],{"class":85},[68,83309,89],{"class":78},[68,83311,53127],{"class":85},[68,83313,95],{"class":78},[68,83315,83316],{"class":70,"line":3138},[68,83317,3677],{"class":78},[68,83319,83320,83322,83324],{"class":70,"line":3144},[68,83321,53899],{"class":78},[68,83323,1553],{"class":52784},[68,83325,52791],{"class":78},[68,83327,83328,83330,83332],{"class":70,"line":3165},[68,83329,53267],{"class":78},[68,83331,52818],{"class":52784},[68,83333,52791],{"class":78},[68,83335,83336],{"class":70,"line":3170},[68,83337,3890],{"emptyLinePlaceholder":1567},[68,83339,83340,83342,83344],{"class":70,"line":3184},[68,83341,2537],{"class":78},[68,83343,53282],{"class":52784},[68,83345,52791],{"class":78},[68,83347,83348,83350,83352,83354,83356],{"class":70,"line":3189},[68,83349,53626],{"class":78},[68,83351,53093],{"class":52784},[68,83353,56792],{"class":78},[68,83355,53093],{"class":52784},[68,83357,52791],{"class":78},[68,83359,83360,83362,83364],{"class":70,"line":3218},[68,83361,53626],{"class":78},[68,83363,53295],{"class":52784},[68,83365,52791],{"class":78},[68,83367,83368,83370,83373,83375,83378,83381,83383,83386],{"class":70,"line":3223},[68,83369,12709],{"class":316},[68,83371,83372],{"class":85}," spec",[68,83374,15052],{"class":316},[68,83376,83377],{"class":78}," { size: ",[68,83379,83380],{"class":1742},"'40cm*40cm'",[68,83382,56942],{"class":78},[68,83384,83385],{"class":1742},"'黑色'",[68,83387,57082],{"class":78},[68,83389,83390],{"class":70,"line":3240},[68,83391,83392],{"class":302},"    \u002F\u002F const arr = Object.values(spec)\n",[68,83394,83395],{"class":70,"line":3245},[68,83396,83397],{"class":302},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[68,83399,83400,83402,83404,83406,83409,83411,83413,83416,83419,83422,83424,83426,83429],{"class":70,"line":3250},[68,83401,53889],{"class":78},[68,83403,55880],{"class":74},[68,83405,1640],{"class":78},[68,83407,83408],{"class":1742},"'div'",[68,83410,75726],{"class":78},[68,83412,1685],{"class":316},[68,83414,83415],{"class":78}," Object.",[68,83417,83418],{"class":74},"values",[68,83420,83421],{"class":78},"(spec).",[68,83423,75700],{"class":74},[68,83425,1640],{"class":78},[68,83427,83428],{"class":1742},"'\u002F'",[68,83430,1646],{"class":78},[68,83432,83433,83435,83437],{"class":70,"line":3255},[68,83434,53899],{"class":78},[68,83436,53295],{"class":52784},[68,83438,52791],{"class":78},[68,83440,83441,83443,83445],{"class":70,"line":3269},[68,83442,53267],{"class":78},[68,83444,53282],{"class":52784},[68,83446,52791],{"class":78},[68,83448,83449],{"class":70,"line":3274},[68,83450,3890],{"emptyLinePlaceholder":1567},[68,83452,83453,83455,83457],{"class":70,"line":4067},[68,83454,53267],{"class":78},[68,83456,52119],{"class":52784},[68,83458,52791],{"class":78},[170,83460,83461],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24396,83463,83465],{"id":83464},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[170,83467,83468],{},"静态方法，将伪数组转换为真数组",[170,83470,83471],{},[801,83472],{"alt":63,"src":83473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[58,83475,83477],{"className":54549,"code":83476,"language":54551,"meta":63,"style":63},"\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",[65,83478,83479,83487,83495,83507,83519,83531,83539,83547,83552,83557,83562,83567,83575],{"__ignoreMap":63},[68,83480,83481,83483,83485],{"class":70,"line":71},[68,83482,2537],{"class":78},[68,83484,53282],{"class":52784},[68,83486,52791],{"class":78},[68,83488,83489,83491,83493],{"class":70,"line":82},[68,83490,53626],{"class":78},[68,83492,24],{"class":52784},[68,83494,52791],{"class":78},[68,83496,83497,83499,83501,83503,83505],{"class":70,"line":98},[68,83498,52825],{"class":78},[68,83500,27],{"class":52784},[68,83502,56792],{"class":78},[68,83504,27],{"class":52784},[68,83506,52791],{"class":78},[68,83508,83509,83511,83513,83515,83517],{"class":70,"line":104},[68,83510,52825],{"class":78},[68,83512,27],{"class":52784},[68,83514,56792],{"class":78},[68,83516,27],{"class":52784},[68,83518,52791],{"class":78},[68,83520,83521,83523,83525,83527,83529],{"class":70,"line":112},[68,83522,52825],{"class":78},[68,83524,27],{"class":52784},[68,83526,56792],{"class":78},[68,83528,27],{"class":52784},[68,83530,52791],{"class":78},[68,83532,83533,83535,83537],{"class":70,"line":124},[68,83534,53899],{"class":78},[68,83536,24],{"class":52784},[68,83538,52791],{"class":78},[68,83540,83541,83543,83545],{"class":70,"line":1496},[68,83542,53626],{"class":78},[68,83544,53295],{"class":52784},[68,83546,52791],{"class":78},[68,83548,83549],{"class":70,"line":1502},[68,83550,83551],{"class":78},"    const lis = document.querySelectorAll('li')\n",[68,83553,83554],{"class":70,"line":1510},[68,83555,83556],{"class":78},"    const liss = Array.from(lis)\n",[68,83558,83559],{"class":70,"line":1521},[68,83560,83561],{"class":78},"    liss.pop()\n",[68,83563,83564],{"class":70,"line":3103},[68,83565,83566],{"class":78},"    console.log(liss)\n",[68,83568,83569,83571,83573],{"class":70,"line":3108},[68,83570,53899],{"class":78},[68,83572,53295],{"class":52784},[68,83574,52791],{"class":78},[68,83576,83577,83579,83581],{"class":70,"line":3114},[68,83578,53267],{"class":78},[68,83580,53282],{"class":52784},[68,83582,52791],{"class":78},[170,83584,83585],{},[801,83586],{"alt":63,"src":83587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[245,83589,83591],{"id":83590},"_41053-string","4.10.5.3 String",[170,83593,83594],{},[801,83595],{"alt":63,"src":83596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24396,83598,83600],{"id":83599},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[58,83602,83604],{"className":54549,"code":83603,"language":54551,"meta":63,"style":63},"\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",[65,83605,83606,83614,83622,83627,83632,83637,83641,83646,83651,83656,83664],{"__ignoreMap":63},[68,83607,83608,83610,83612],{"class":70,"line":71},[68,83609,2537],{"class":78},[68,83611,53282],{"class":52784},[68,83613,52791],{"class":78},[68,83615,83616,83618,83620],{"class":70,"line":82},[68,83617,53626],{"class":78},[68,83619,53295],{"class":52784},[68,83621,52791],{"class":78},[68,83623,83624],{"class":70,"line":98},[68,83625,83626],{"class":78},"    \u002F\u002F 把字符串转化为数组\n",[68,83628,83629],{"class":70,"line":104},[68,83630,83631],{"class":78},"    const str = 'pink,red'\n",[68,83633,83634],{"class":70,"line":112},[68,83635,83636],{"class":78},"    const arr = str.split(',')\n",[68,83638,83639],{"class":70,"line":124},[68,83640,82115],{"class":78},[68,83642,83643],{"class":70,"line":1496},[68,83644,83645],{"class":78},"    const str1 = '2025-8-25'\n",[68,83647,83648],{"class":70,"line":1502},[68,83649,83650],{"class":78},"    const arr1 = str1.split('-')\n",[68,83652,83653],{"class":70,"line":1510},[68,83654,83655],{"class":78},"    console.log(arr1)\n",[68,83657,83658,83660,83662],{"class":70,"line":1521},[68,83659,53899],{"class":78},[68,83661,53295],{"class":52784},[68,83663,52791],{"class":78},[68,83665,83666,83668,83670],{"class":70,"line":3103},[68,83667,53267],{"class":78},[68,83669,53282],{"class":52784},[68,83671,52791],{"class":78},[24396,83673,83675],{"id":83674},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[170,83677,409],{},[170,83679,83680],{},"substring(indexStart)",[170,83682,83683],{},"substring(indexStart, indexEnd)",[24,83685,83686,83697,83709,83719],{},[27,83687,83688,83689,83692,83693,83696],{},"如果省略了 ",[65,83690,83691],{},"indexEnd","，则 ",[65,83694,83695],{},"substring()"," 提取字符直到字符串的末尾",[27,83698,83699,83700,83703,83704,83692,83706,83708],{},"如果 ",[65,83701,83702],{},"indexStart"," 等于 ",[65,83705,83691],{},[65,83707,83695],{}," 返回一个空字符串",[27,83710,83699,83711,83713,83714,83692,83716,83718],{},[65,83712,83702],{}," 大于 ",[65,83715,83691],{},[65,83717,83695],{}," 的效果就像交换了这两个参数一样",[27,83720,83721],{},"结束的索引号不包含想要截取的部分",[58,83723,83725],{"className":82966,"code":83724,"language":82968,"meta":63,"style":63},"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",[65,83726,83727,83739,83743,83777,83807,83811,83842,83846,83873,83903,83933,83937,83968],{"__ignoreMap":63},[68,83728,83729,83732,83734,83737],{"class":70,"line":71},[68,83730,83731],{"class":78},"const anyString ",[68,83733,1685],{"class":316},[68,83735,83736],{"class":1742}," \"Mozilla\"",[68,83738,95],{"class":78},[68,83740,83741],{"class":70,"line":82},[68,83742,3890],{"emptyLinePlaceholder":1567},[68,83744,83745,83748,83750,83752,83754,83757,83759,83762,83764,83766,83768,83770,83772,83774],{"class":70,"line":98},[68,83746,83747],{"class":85},"console",[68,83749,2186],{"class":78},[68,83751,59725],{"class":85},[68,83753,1640],{"class":78},[68,83755,83756],{"class":85},"anyString",[68,83758,2186],{"class":78},[68,83760,83761],{"class":85},"substring",[68,83763,1640],{"class":78},[68,83765,1248],{"class":85},[68,83767,13923],{"class":78},[68,83769,1846],{"class":85},[68,83771,76730],{"class":78},[68,83773,34813],{"class":316},[68,83775,83776],{"class":1742}," 'M'\n",[68,83778,83779,83781,83783,83785,83787,83789,83791,83793,83795,83797,83799,83801,83803,83805],{"class":70,"line":104},[68,83780,83747],{"class":85},[68,83782,2186],{"class":78},[68,83784,59725],{"class":85},[68,83786,1640],{"class":78},[68,83788,83756],{"class":85},[68,83790,2186],{"class":78},[68,83792,83761],{"class":85},[68,83794,1640],{"class":78},[68,83796,1846],{"class":85},[68,83798,13923],{"class":78},[68,83800,1248],{"class":85},[68,83802,76730],{"class":78},[68,83804,34813],{"class":316},[68,83806,83776],{"class":1742},[68,83808,83809],{"class":70,"line":112},[68,83810,3890],{"emptyLinePlaceholder":1567},[68,83812,83813,83815,83817,83819,83821,83823,83825,83827,83829,83831,83833,83835,83837,83839],{"class":70,"line":124},[68,83814,83747],{"class":85},[68,83816,2186],{"class":78},[68,83818,59725],{"class":85},[68,83820,1640],{"class":78},[68,83822,83756],{"class":85},[68,83824,2186],{"class":78},[68,83826,83761],{"class":85},[68,83828,1640],{"class":78},[68,83830,1248],{"class":85},[68,83832,13923],{"class":78},[68,83834,1973],{"class":85},[68,83836,76730],{"class":78},[68,83838,34813],{"class":316},[68,83840,83841],{"class":1742}," 'Mozill'\n",[68,83843,83844],{"class":70,"line":1496},[68,83845,3890],{"emptyLinePlaceholder":1567},[68,83847,83848,83850,83852,83854,83856,83858,83860,83862,83864,83866,83868,83870],{"class":70,"line":1502},[68,83849,83747],{"class":85},[68,83851,2186],{"class":78},[68,83853,59725],{"class":85},[68,83855,1640],{"class":78},[68,83857,83756],{"class":85},[68,83859,2186],{"class":78},[68,83861,83761],{"class":85},[68,83863,1640],{"class":78},[68,83865,1922],{"class":85},[68,83867,76730],{"class":78},[68,83869,34813],{"class":316},[68,83871,83872],{"class":1742}," 'lla'\n",[68,83874,83875,83877,83879,83881,83883,83885,83887,83889,83891,83893,83895,83897,83899,83901],{"class":70,"line":1510},[68,83876,83747],{"class":85},[68,83878,2186],{"class":78},[68,83880,59725],{"class":85},[68,83882,1640],{"class":78},[68,83884,83756],{"class":85},[68,83886,2186],{"class":78},[68,83888,83761],{"class":85},[68,83890,1640],{"class":78},[68,83892,1922],{"class":85},[68,83894,13923],{"class":78},[68,83896,1998],{"class":85},[68,83898,76786],{"class":78},[68,83900,34813],{"class":316},[68,83902,83872],{"class":1742},[68,83904,83905,83907,83909,83911,83913,83915,83917,83919,83921,83923,83925,83927,83929,83931],{"class":70,"line":1521},[68,83906,83747],{"class":85},[68,83908,2186],{"class":78},[68,83910,59725],{"class":85},[68,83912,1640],{"class":78},[68,83914,83756],{"class":85},[68,83916,2186],{"class":78},[68,83918,83761],{"class":85},[68,83920,1640],{"class":78},[68,83922,1998],{"class":85},[68,83924,13923],{"class":78},[68,83926,1922],{"class":85},[68,83928,76730],{"class":78},[68,83930,34813],{"class":316},[68,83932,83872],{"class":1742},[68,83934,83935],{"class":70,"line":3103},[68,83936,3890],{"emptyLinePlaceholder":1567},[68,83938,83939,83941,83943,83945,83947,83949,83951,83953,83955,83957,83959,83961,83963,83965],{"class":70,"line":3108},[68,83940,83747],{"class":85},[68,83942,2186],{"class":78},[68,83944,59725],{"class":85},[68,83946,1640],{"class":78},[68,83948,83756],{"class":85},[68,83950,2186],{"class":78},[68,83952,83761],{"class":85},[68,83954,1640],{"class":78},[68,83956,1248],{"class":85},[68,83958,13923],{"class":78},[68,83960,1998],{"class":85},[68,83962,76730],{"class":78},[68,83964,34813],{"class":316},[68,83966,83967],{"class":1742}," 'Mozilla'\n",[68,83969,83970,83972,83974,83976,83978,83980,83982,83984,83986,83988,83990,83992,83994,83996],{"class":70,"line":3114},[68,83971,83747],{"class":85},[68,83973,2186],{"class":78},[68,83975,59725],{"class":85},[68,83977,1640],{"class":78},[68,83979,83756],{"class":85},[68,83981,2186],{"class":78},[68,83983,83761],{"class":85},[68,83985,1640],{"class":78},[68,83987,1248],{"class":85},[68,83989,13923],{"class":78},[68,83991,313],{"class":85},[68,83993,76730],{"class":78},[68,83995,34813],{"class":316},[68,83997,83967],{"class":1742},[24396,83999,84001],{"id":84000},"_410533-startswith","4.10.5.3.3 startsWith",[170,84003,84004,84007,84008,84013,84014,1245,84016],{},[65,84005,84006],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[268,84009,84010],{},[65,84011,84012],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[65,84015,2855],{},[65,84017,67498],{},[58,84019,84021],{"className":78972,"code":84020,"language":78974,"meta":63,"style":63},"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",[65,84022,84023,84035,84054,84059,84079],{"__ignoreMap":63},[68,84024,84025,84027,84030,84032],{"class":70,"line":71},[68,84026,8281],{"class":316},[68,84028,84029],{"class":78}," str1 ",[68,84031,1685],{"class":316},[68,84033,84034],{"class":1742}," \"Saturday night plans\"\n",[68,84036,84037,84039,84041,84044,84047,84049,84052],{"class":70,"line":82},[68,84038,79009],{"class":78},[68,84040,59725],{"class":74},[68,84042,84043],{"class":78},"(str1.",[68,84045,84046],{"class":74},"startsWith",[68,84048,1640],{"class":78},[68,84050,84051],{"class":1742},"\"Sat\"",[68,84053,31981],{"class":78},[68,84055,84056],{"class":70,"line":98},[68,84057,84058],{"class":302},"\u002F\u002F Expected output: true\n",[68,84060,84061,84063,84065,84067,84069,84071,84073,84075,84077],{"class":70,"line":104},[68,84062,79009],{"class":78},[68,84064,59725],{"class":74},[68,84066,84043],{"class":78},[68,84068,84046],{"class":74},[68,84070,1640],{"class":78},[68,84072,84051],{"class":1742},[68,84074,13923],{"class":78},[68,84076,1709],{"class":85},[68,84078,31981],{"class":78},[68,84080,84081],{"class":70,"line":112},[68,84082,84083],{"class":302},"\u002F\u002F Expected output: false\n",[58,84085,84087],{"className":52117,"code":84086,"language":52119,"meta":63,"style":63},"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",[65,84088,84089,84094,84099,84103,84108,84113],{"__ignoreMap":63},[68,84090,84091],{"class":70,"line":71},[68,84092,84093],{"class":78},"startsWith(searchString)\n",[68,84095,84096],{"class":70,"line":82},[68,84097,84098],{"class":78},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[68,84100,84101],{"class":70,"line":98},[68,84102,3890],{"emptyLinePlaceholder":1567},[68,84104,84105],{"class":70,"line":104},[68,84106,84107],{"class":78},"const str3 = 'pink老师上课中'\n",[68,84109,84110],{"class":70,"line":112},[68,84111,84112],{"class":78},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[68,84114,84115],{"class":70,"line":124},[68,84116,84117],{"class":78},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24396,84119,84121],{"id":84120},"_410534-includes","4.10.5.3.4 includes",[170,84123,84124],{},"includes(searchString) includes(searchString, position)",[263,84126,84127],{},[27,84128,84129],{},"searchString:",[170,84131,84132,84133,84135,84136,84141,84142,84147,84148,22987,84151,84154,84155,84158],{},"一个要在 ",[65,84134,2795],{}," 中查找的字符串。",[1867,84137,84140],{"href":84138,"rel":84139},"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",[25350],"不能是正则表达式","。所有非正则表达式的值都会被",[1867,84143,84146],{"href":84144,"rel":84145},"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",[25350],"强制转换为字符串","，因此如果该参数被省略或传入 ",[65,84149,84150],{},"undefined",[65,84152,84153],{},"includes()"," 方法会在字符串中搜索 ",[65,84156,84157],{},"\"undefined\"","，这通常不是你想要的",[263,84160,84161],{"start":82},[27,84162,84163,2486],{},[65,84164,84165],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[170,84167,84168,84169,84172,84173],{},"在字符串中开始搜索 ",[65,84170,84171],{},"searchString"," 的位置。默认值为 ",[65,84174,1248],{},[263,84176,84177],{"start":98},[27,84178,84179],{},"返回值：",[170,84181,84182,84183,84185,84186,84190,84191],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[65,84184,84171],{}," 为空字符串的情况），则返回 ",[268,84187,84188],{},[65,84189,2855],{}," ，否则返回 ",[268,84192,84193],{},[65,84194,67498],{},[263,84196,84197],{"start":104},[27,84198,84199],{},"异常：",[170,84201,83699,84202,15283,84204,84208],{},[65,84203,84171],{},[1867,84205,84207],{"href":84138,"rel":84206},[25350],"是一个正则表达式","，则会抛出",[170,84210,84211],{},"只要是有就是true，不需要非得以谁开头结尾",[58,84213,84215],{"className":78972,"code":84214,"language":78974,"meta":63,"style":63},"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",[65,84216,84217,84228,84251,84270,84290,84312,84331],{"__ignoreMap":63},[68,84218,84219,84221,84223,84225],{"class":70,"line":71},[68,84220,8281],{"class":316},[68,84222,81252],{"class":78},[68,84224,1685],{"class":316},[68,84226,84227],{"class":1742}," \"To be, or not to be, that is the question.\"\n",[68,84229,84230,84232,84234,84237,84240,84242,84245,84248],{"class":70,"line":82},[68,84231,79009],{"class":78},[68,84233,59725],{"class":74},[68,84235,84236],{"class":78},"(str.",[68,84238,84239],{"class":74},"includes",[68,84241,1640],{"class":78},[68,84243,84244],{"class":1742},"\"To be\"",[68,84246,84247],{"class":78},"))",[68,84249,84250],{"class":302},"  \u002F\u002F true\n",[68,84252,84253,84255,84257,84259,84261,84263,84266,84268],{"class":70,"line":98},[68,84254,79009],{"class":78},[68,84256,59725],{"class":74},[68,84258,84236],{"class":78},[68,84260,84239],{"class":74},[68,84262,1640],{"class":78},[68,84264,84265],{"class":1742},"\"question\"",[68,84267,84247],{"class":78},[68,84269,84250],{"class":302},[68,84271,84272,84274,84276,84278,84280,84282,84285,84287],{"class":70,"line":104},[68,84273,79009],{"class":78},[68,84275,59725],{"class":74},[68,84277,84236],{"class":78},[68,84279,84239],{"class":74},[68,84281,1640],{"class":78},[68,84283,84284],{"class":1742},"\"nonexistent\"",[68,84286,84247],{"class":78},[68,84288,84289],{"class":302},"  \u002F\u002F false\n",[68,84291,84292,84294,84296,84298,84300,84302,84304,84306,84308,84310],{"class":70,"line":112},[68,84293,79009],{"class":78},[68,84295,59725],{"class":74},[68,84297,84236],{"class":78},[68,84299,84239],{"class":74},[68,84301,1640],{"class":78},[68,84303,84244],{"class":1742},[68,84305,13923],{"class":78},[68,84307,1846],{"class":85},[68,84309,84247],{"class":78},[68,84311,84289],{"class":302},[68,84313,84314,84316,84318,84320,84322,84324,84327,84329],{"class":70,"line":124},[68,84315,79009],{"class":78},[68,84317,59725],{"class":74},[68,84319,84236],{"class":78},[68,84321,84239],{"class":74},[68,84323,1640],{"class":78},[68,84325,84326],{"class":1742},"\"TO BE\"",[68,84328,84247],{"class":78},[68,84330,84289],{"class":302},[68,84332,84333,84335,84337,84339,84341,84343,84345,84347],{"class":70,"line":1496},[68,84334,79009],{"class":78},[68,84336,59725],{"class":74},[68,84338,84236],{"class":78},[68,84340,84239],{"class":74},[68,84342,1640],{"class":78},[68,84344,9141],{"class":1742},[68,84346,84247],{"class":78},[68,84348,84250],{"class":302},[24396,84350,84352],{"id":84351},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[58,84354,84356],{"className":54549,"code":84355,"language":54551,"meta":63,"style":63},"\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",[65,84357,84358,84366,84374,84379,84384,84389,84394,84399,84407],{"__ignoreMap":63},[68,84359,84360,84362,84364],{"class":70,"line":71},[68,84361,2537],{"class":78},[68,84363,53282],{"class":52784},[68,84365,52791],{"class":78},[68,84367,84368,84370,84372],{"class":70,"line":82},[68,84369,53626],{"class":78},[68,84371,53295],{"class":52784},[68,84373,52791],{"class":78},[68,84375,84376],{"class":70,"line":98},[68,84377,84378],{"class":78},"    const num = 10\n",[68,84380,84381],{"class":70,"line":104},[68,84382,84383],{"class":78},"    \u002F\u002F 强制转换\n",[68,84385,84386],{"class":70,"line":112},[68,84387,84388],{"class":78},"    console.log(String(num))\n",[68,84390,84391],{"class":70,"line":124},[68,84392,84393],{"class":78},"    \u002F\u002F toString()方法转换\n",[68,84395,84396],{"class":70,"line":1496},[68,84397,84398],{"class":78},"    console.log(num.toString())\n",[68,84400,84401,84403,84405],{"class":70,"line":1502},[68,84402,53899],{"class":78},[68,84404,53295],{"class":52784},[68,84406,52791],{"class":78},[68,84408,84409,84411,84413],{"class":70,"line":1510},[68,84410,53267],{"class":78},[68,84412,53282],{"class":52784},[68,84414,52791],{"class":78},[24396,84416,84418],{"id":84417},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[170,84420,84421],{},[801,84422],{"alt":63,"src":84423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[58,84425,84427],{"className":52117,"code":84426,"language":52119,"meta":63,"style":63},"\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",[65,84428,84429,84439,84453,84457,84465,84479,84499,84511,84519,84523,84531,84543,84551,84563,84568,84573,84578,84625,84641,84649,84657,84661],{"__ignoreMap":63},[68,84430,84431,84433,84435,84437],{"class":70,"line":71},[68,84432,52781],{"class":78},[68,84434,52785],{"class":52784},[68,84436,52788],{"class":74},[68,84438,52791],{"class":78},[68,84440,84441,84443,84445,84447,84449,84451],{"class":70,"line":82},[68,84442,2537],{"class":78},[68,84444,52119],{"class":52784},[68,84446,52800],{"class":74},[68,84448,1685],{"class":78},[68,84450,52805],{"class":1742},[68,84452,52791],{"class":78},[68,84454,84455],{"class":70,"line":98},[68,84456,3890],{"emptyLinePlaceholder":1567},[68,84458,84459,84461,84463],{"class":70,"line":104},[68,84460,2537],{"class":78},[68,84462,52818],{"class":52784},[68,84464,52791],{"class":78},[68,84466,84467,84469,84471,84473,84475,84477],{"class":70,"line":112},[68,84468,53626],{"class":78},[68,84470,52828],{"class":52784},[68,84472,52831],{"class":74},[68,84474,1685],{"class":78},[68,84476,52836],{"class":1742},[68,84478,52791],{"class":78},[68,84480,84481,84483,84485,84487,84489,84491,84493,84495,84497],{"class":70,"line":124},[68,84482,53626],{"class":78},[68,84484,52828],{"class":52784},[68,84486,16408],{"class":74},[68,84488,1685],{"class":78},[68,84490,52875],{"class":1742},[68,84492,52855],{"class":74},[68,84494,1685],{"class":78},[68,84496,52882],{"class":1742},[68,84498,52791],{"class":78},[68,84500,84501,84503,84505,84507,84509],{"class":70,"line":1496},[68,84502,53626],{"class":78},[68,84504,52891],{"class":52784},[68,84506,52894],{"class":78},[68,84508,52891],{"class":52784},[68,84510,52791],{"class":78},[68,84512,84513,84515,84517],{"class":70,"line":1502},[68,84514,53267],{"class":78},[68,84516,52818],{"class":52784},[68,84518,52791],{"class":78},[68,84520,84521],{"class":70,"line":1510},[68,84522,3890],{"emptyLinePlaceholder":1567},[68,84524,84525,84527,84529],{"class":70,"line":1521},[68,84526,2537],{"class":78},[68,84528,53282],{"class":52784},[68,84530,52791],{"class":78},[68,84532,84533,84535,84537,84539,84541],{"class":70,"line":3103},[68,84534,53626],{"class":78},[68,84536,53093],{"class":52784},[68,84538,56792],{"class":78},[68,84540,53093],{"class":52784},[68,84542,52791],{"class":78},[68,84544,84545,84547,84549],{"class":70,"line":3108},[68,84546,53626],{"class":78},[68,84548,53295],{"class":52784},[68,84550,52791],{"class":78},[68,84552,84553,84555,84558,84560],{"class":70,"line":3114},[68,84554,12709],{"class":316},[68,84556,84557],{"class":85}," gift",[68,84559,15052],{"class":316},[68,84561,84562],{"class":1742}," '50g的茶叶，清洗球'\n",[68,84564,84565],{"class":70,"line":3119},[68,84566,84567],{"class":302},"    \u002F\u002F 1.把字符串拆分为数组\n",[68,84569,84570],{"class":70,"line":3133},[68,84571,84572],{"class":302},"    \u002F\u002F console.log(gift.split(','))\n",[68,84574,84575],{"class":70,"line":3138},[68,84576,84577],{"class":302},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[68,84579,84580,84582,84584,84586,84589,84592,84594,84597,84599,84601,84603,84605,84607,84610,84612,84615,84617,84619,84621,84623],{"class":70,"line":3144},[68,84581,12709],{"class":316},[68,84583,75396],{"class":85},[68,84585,15052],{"class":316},[68,84587,84588],{"class":78}," gift.",[68,84590,84591],{"class":74},"split",[68,84593,1640],{"class":78},[68,84595,84596],{"class":1742},"'，'",[68,84598,32310],{"class":78},[68,84600,75521],{"class":74},[68,84602,1640],{"class":78},[68,84604,81272],{"class":6705},[68,84606,81275],{"class":316},[68,84608,84609],{"class":1742}," `\u003Cspan>【赠品】${",[68,84611,81272],{"class":78},[68,84613,84614],{"class":1742},"}\u003C\u002Fspan>\u003Cbr>`",[68,84616,32310],{"class":78},[68,84618,75700],{"class":74},[68,84620,1640],{"class":78},[68,84622,75705],{"class":1742},[68,84624,1646],{"class":78},[68,84626,84627,84629,84631,84633,84635,84637,84639],{"class":70,"line":3165},[68,84628,53889],{"class":78},[68,84630,55880],{"class":74},[68,84632,1640],{"class":78},[68,84634,83408],{"class":1742},[68,84636,75726],{"class":78},[68,84638,1685],{"class":316},[68,84640,75462],{"class":78},[68,84642,84643,84645,84647],{"class":70,"line":3170},[68,84644,53899],{"class":78},[68,84646,53295],{"class":52784},[68,84648,52791],{"class":78},[68,84650,84651,84653,84655],{"class":70,"line":3184},[68,84652,53267],{"class":78},[68,84654,53282],{"class":52784},[68,84656,52791],{"class":78},[68,84658,84659],{"class":70,"line":3189},[68,84660,3890],{"emptyLinePlaceholder":1567},[68,84662,84663,84665,84667],{"class":70,"line":3218},[68,84664,53267],{"class":78},[68,84666,52119],{"class":52784},[68,84668,52791],{"class":78},[245,84670,84672],{"id":84671},"_41054-number","4.10.5.4 Number",[170,84674,84675],{},[801,84676],{"alt":63,"src":84677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[170,84679,84680],{},"整数也可以进行toFixed来保留小数",[170,84682,84683],{},"比如：",[170,84685,84686],{},"const price=10",[170,84688,84689],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[245,84691,84693],{"id":84692},"_41055-购物车展示","4.10.5.5 购物车展示",[170,84695,84696],{},[801,84697],{"alt":63,"src":84698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[58,84700,84702],{"className":52117,"code":84701,"language":52119,"meta":63,"style":63},"\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",[65,84703,84704,84714,84728,84732,84740,84754,84774,84786,84794,84800,84810,84820,84830,84834,84838,84844,84856,84870,84874,84878,84884,84896,84912,84922,84938,84942,84946,84952,84962,84972,84976,84980,84988,85000,85012,85024,85028,85032,85040,85052,85056,85060,85071,85081,85093,85105,85115,85119,85123,85131,85140,85152,85162,85172,85176,85180,85188,85197,85204,85214,85226,85230,85234,85243,85253,85264,85276,85288,85292,85296,85305,85315,85326,85330,85334,85340,85352,85364,85374,85384,85402,85414,85418,85422,85431,85443,85453,85463,85475,85479,85487,85495,85499,85507,85521,85529,85543,85571,85579,85587,85597,85601,85609,85617,85626,85634,85643,85653,85657,85661,85669,85677,85686,85694,85702,85715,85719,85723,85731,85739,85748,85756,85764,85779,85783,85787,85795,85803,85812,85820,85828,85842,85850,85854,85858,85863,85889,85894,85931,85936,85959,85964,86018,86023,86059,86063,86069,86074,86083,86097,86106,86125,86134,86144,86149,86154,86167,86172,86226,86252,86260,86268,86272],{"__ignoreMap":63},[68,84705,84706,84708,84710,84712],{"class":70,"line":71},[68,84707,52781],{"class":78},[68,84709,52785],{"class":52784},[68,84711,52788],{"class":74},[68,84713,52791],{"class":78},[68,84715,84716,84718,84720,84722,84724,84726],{"class":70,"line":82},[68,84717,2537],{"class":78},[68,84719,52119],{"class":52784},[68,84721,52800],{"class":74},[68,84723,1685],{"class":78},[68,84725,52805],{"class":1742},[68,84727,52791],{"class":78},[68,84729,84730],{"class":70,"line":98},[68,84731,3890],{"emptyLinePlaceholder":1567},[68,84733,84734,84736,84738],{"class":70,"line":104},[68,84735,2537],{"class":78},[68,84737,52818],{"class":52784},[68,84739,52791],{"class":78},[68,84741,84742,84744,84746,84748,84750,84752],{"class":70,"line":112},[68,84743,53626],{"class":78},[68,84745,52828],{"class":52784},[68,84747,52831],{"class":74},[68,84749,1685],{"class":78},[68,84751,52836],{"class":1742},[68,84753,52791],{"class":78},[68,84755,84756,84758,84760,84762,84764,84766,84768,84770,84772],{"class":70,"line":124},[68,84757,53626],{"class":78},[68,84759,52828],{"class":52784},[68,84761,16408],{"class":74},[68,84763,1685],{"class":78},[68,84765,52875],{"class":1742},[68,84767,52855],{"class":74},[68,84769,1685],{"class":78},[68,84771,52882],{"class":1742},[68,84773,52791],{"class":78},[68,84775,84776,84778,84780,84782,84784],{"class":70,"line":1496},[68,84777,53626],{"class":78},[68,84779,52891],{"class":52784},[68,84781,52894],{"class":78},[68,84783,52891],{"class":52784},[68,84785,52791],{"class":78},[68,84787,84788,84790,84792],{"class":70,"line":1502},[68,84789,53626],{"class":78},[68,84791,1553],{"class":52784},[68,84793,52791],{"class":78},[68,84795,84796,84798],{"class":70,"line":1510},[68,84797,7892],{"class":52784},[68,84799,79],{"class":78},[68,84801,84802,84804,84806,84808],{"class":70,"line":1521},[68,84803,56176],{"class":85},[68,84805,89],{"class":78},[68,84807,1248],{"class":85},[68,84809,95],{"class":78},[68,84811,84812,84814,84816,84818],{"class":70,"line":3103},[68,84813,56187],{"class":85},[68,84815,89],{"class":78},[68,84817,1248],{"class":85},[68,84819,95],{"class":78},[68,84821,84822,84824,84826,84828],{"class":70,"line":3108},[68,84823,74073],{"class":85},[68,84825,89],{"class":78},[68,84827,61983],{"class":85},[68,84829,95],{"class":78},[68,84831,84832],{"class":70,"line":3114},[68,84833,3677],{"class":78},[68,84835,84836],{"class":70,"line":3119},[68,84837,3890],{"emptyLinePlaceholder":1567},[68,84839,84840,84842],{"class":70,"line":3133},[68,84841,63601],{"class":74},[68,84843,79],{"class":78},[68,84845,84846,84848,84850,84852,84854],{"class":70,"line":3138},[68,84847,56250],{"class":85},[68,84849,89],{"class":78},[68,84851,80051],{"class":85},[68,84853,317],{"class":316},[68,84855,95],{"class":78},[68,84857,84858,84860,84862,84864,84866,84868],{"class":70,"line":3144},[68,84859,56187],{"class":85},[68,84861,89],{"class":78},[68,84863,1940],{"class":85},[68,84865,317],{"class":316},[68,84867,53038],{"class":85},[68,84869,95],{"class":78},[68,84871,84872],{"class":70,"line":3165},[68,84873,3677],{"class":78},[68,84875,84876],{"class":70,"line":3170},[68,84877,3890],{"emptyLinePlaceholder":1567},[68,84879,84880,84882],{"class":70,"line":3184},[68,84881,80102],{"class":74},[68,84883,79],{"class":78},[68,84885,84886,84888,84890,84892,84894],{"class":70,"line":3189},[68,84887,56176],{"class":85},[68,84889,89],{"class":78},[68,84891,2203],{"class":85},[68,84893,317],{"class":316},[68,84895,95],{"class":78},[68,84897,84898,84900,84902,84904,84906,84908,84910],{"class":70,"line":3218},[68,84899,63338],{"class":85},[68,84901,89],{"class":78},[68,84903,29605],{"class":85},[68,84905,80157],{"class":85},[68,84907,80160],{"class":85},[68,84909,2323],{"class":316},[68,84911,95],{"class":78},[68,84913,84914,84916,84918,84920],{"class":70,"line":3223},[68,84915,56487],{"class":85},[68,84917,89],{"class":78},[68,84919,52960],{"class":85},[68,84921,95],{"class":78},[68,84923,84924,84926,84928,84930,84932,84934,84936],{"class":70,"line":3240},[68,84925,63455],{"class":85},[68,84927,89],{"class":78},[68,84929,1846],{"class":85},[68,84931,317],{"class":316},[68,84933,53003],{"class":85},[68,84935,63722],{"class":85},[68,84937,95],{"class":78},[68,84939,84940],{"class":70,"line":3245},[68,84941,3677],{"class":78},[68,84943,84944],{"class":70,"line":3250},[68,84945,3890],{"emptyLinePlaceholder":1567},[68,84947,84948,84950],{"class":70,"line":3255},[68,84949,80220],{"class":74},[68,84951,79],{"class":78},[68,84953,84954,84956,84958,84960],{"class":70,"line":3269},[68,84955,63503],{"class":85},[68,84957,89],{"class":78},[68,84959,63508],{"class":85},[68,84961,95],{"class":78},[68,84963,84964,84966,84968,84970],{"class":70,"line":3274},[68,84965,56362],{"class":85},[68,84967,89],{"class":78},[68,84969,63296],{"class":85},[68,84971,95],{"class":78},[68,84973,84974],{"class":70,"line":4067},[68,84975,3677],{"class":78},[68,84977,84978],{"class":70,"line":4081},[68,84979,3890],{"emptyLinePlaceholder":1567},[68,84981,84982,84984,84986],{"class":70,"line":4089},[68,84983,80102],{"class":74},[68,84985,57093],{"class":52784},[68,84987,79],{"class":78},[68,84989,84990,84992,84994,84996,84998],{"class":70,"line":4094},[68,84991,56250],{"class":85},[68,84993,89],{"class":78},[68,84995,2240],{"class":85},[68,84997,317],{"class":316},[68,84999,95],{"class":78},[68,85001,85002,85004,85006,85008,85010],{"class":70,"line":4100},[68,85003,56264],{"class":85},[68,85005,89],{"class":78},[68,85007,2240],{"class":85},[68,85009,317],{"class":316},[68,85011,95],{"class":78},[68,85013,85014,85016,85018,85020,85022],{"class":70,"line":4106},[68,85015,63228],{"class":85},[68,85017,89],{"class":78},[68,85019,1948],{"class":85},[68,85021,317],{"class":316},[68,85023,95],{"class":78},[68,85025,85026],{"class":70,"line":4111},[68,85027,3677],{"class":78},[68,85029,85030],{"class":70,"line":9437},[68,85031,3890],{"emptyLinePlaceholder":1567},[68,85033,85034,85036,85038],{"class":70,"line":9461},[68,85035,80102],{"class":74},[68,85037,63782],{"class":74},[68,85039,79],{"class":78},[68,85041,85042,85044,85046,85048,85050],{"class":70,"line":9466},[68,85043,56250],{"class":85},[68,85045,89],{"class":78},[68,85047,3213],{"class":85},[68,85049,317],{"class":316},[68,85051,95],{"class":78},[68,85053,85054],{"class":70,"line":9472},[68,85055,3677],{"class":78},[68,85057,85058],{"class":70,"line":9499},[68,85059,3890],{"emptyLinePlaceholder":1567},[68,85061,85062,85064,85066,85069],{"class":70,"line":9504},[68,85063,80102],{"class":74},[68,85065,63782],{"class":74},[68,85067,85068],{"class":74}," .tag",[68,85070,79],{"class":78},[68,85072,85073,85075,85077,85079],{"class":70,"line":9510},[68,85074,56487],{"class":85},[68,85076,89],{"class":78},[68,85078,62347],{"class":85},[68,85080,95],{"class":78},[68,85082,85083,85085,85087,85089,85091],{"class":70,"line":9522},[68,85084,56176],{"class":85},[68,85086,89],{"class":78},[68,85088,1715],{"class":85},[68,85090,317],{"class":316},[68,85092,95],{"class":78},[68,85094,85095,85097,85099,85101,85103],{"class":70,"line":9534},[68,85096,56400],{"class":85},[68,85098,89],{"class":78},[68,85100,2126],{"class":85},[68,85102,317],{"class":316},[68,85104,95],{"class":78},[68,85106,85107,85109,85111,85113],{"class":70,"line":9546},[68,85108,58894],{"class":85},[68,85110,89],{"class":78},[68,85112,63548],{"class":85},[68,85114,95],{"class":78},[68,85116,85117],{"class":70,"line":11204},[68,85118,3677],{"class":78},[68,85120,85121],{"class":70,"line":11229},[68,85122,3890],{"emptyLinePlaceholder":1567},[68,85124,85125,85127,85129],{"class":70,"line":11252},[68,85126,80102],{"class":74},[68,85128,80394],{"class":74},[68,85130,32950],{"class":78},[68,85132,85133,85135,85138],{"class":70,"line":11276},[68,85134,80102],{"class":74},[68,85136,85137],{"class":74}," .sub-total",[68,85139,79],{"class":78},[68,85141,85142,85144,85146,85148,85150],{"class":70,"line":11281},[68,85143,56400],{"class":85},[68,85145,89],{"class":78},[68,85147,2278],{"class":85},[68,85149,317],{"class":316},[68,85151,95],{"class":78},[68,85153,85154,85156,85158,85160],{"class":70,"line":11286},[68,85155,58894],{"class":85},[68,85157,89],{"class":78},[68,85159,80417],{"class":85},[68,85161,95],{"class":78},[68,85163,85164,85166,85168,85170],{"class":70,"line":11291},[68,85165,63315],{"class":85},[68,85167,89],{"class":78},[68,85169,1846],{"class":85},[68,85171,95],{"class":78},[68,85173,85174],{"class":70,"line":11300},[68,85175,3677],{"class":78},[68,85177,85178],{"class":70,"line":11305},[68,85179,3890],{"emptyLinePlaceholder":1567},[68,85181,85182,85184,85186],{"class":70,"line":11311},[68,85183,80102],{"class":74},[68,85185,80434],{"class":74},[68,85187,32950],{"class":78},[68,85189,85190,85192,85195],{"class":70,"line":11332},[68,85191,80102],{"class":74},[68,85193,85194],{"class":74}," .sub-total::before",[68,85196,32950],{"class":78},[68,85198,85199,85202],{"class":70,"line":11338},[68,85200,85201],{"class":74},"    .amount::before",[68,85203,79],{"class":78},[68,85205,85206,85208,85210,85212],{"class":70,"line":11352},[68,85207,80441],{"class":85},[68,85209,89],{"class":78},[68,85211,80446],{"class":1742},[68,85213,95],{"class":78},[68,85215,85216,85218,85220,85222,85224],{"class":70,"line":11358},[68,85217,56400],{"class":85},[68,85219,89],{"class":78},[68,85221,2126],{"class":85},[68,85223,317],{"class":316},[68,85225,95],{"class":78},[68,85227,85228],{"class":70,"line":11385},[68,85229,3677],{"class":78},[68,85231,85232],{"class":70,"line":11394},[68,85233,3890],{"emptyLinePlaceholder":1567},[68,85235,85236,85238,85241],{"class":70,"line":11400},[68,85237,80102],{"class":74},[68,85239,85240],{"class":74}," .spec",[68,85242,79],{"class":78},[68,85244,85245,85247,85249,85251],{"class":70,"line":11408},[68,85246,63315],{"class":85},[68,85248,89],{"class":78},[68,85250,1715],{"class":85},[68,85252,95],{"class":78},[68,85254,85255,85257,85259,85262],{"class":70,"line":11413},[68,85256,58894],{"class":85},[68,85258,89],{"class":78},[68,85260,85261],{"class":85},"#888",[68,85263,95],{"class":78},[68,85265,85266,85268,85270,85272,85274],{"class":70,"line":18091},[68,85267,56400],{"class":85},[68,85269,89],{"class":78},[68,85271,2177],{"class":85},[68,85273,317],{"class":316},[68,85275,95],{"class":78},[68,85277,85278,85280,85282,85284,85286],{"class":70,"line":18097},[68,85279,63478],{"class":85},[68,85281,89],{"class":78},[68,85283,333],{"class":85},[68,85285,317],{"class":316},[68,85287,95],{"class":78},[68,85289,85290],{"class":70,"line":18120},[68,85291,3677],{"class":78},[68,85293,85294],{"class":70,"line":18126},[68,85295,3890],{"emptyLinePlaceholder":1567},[68,85297,85298,85300,85303],{"class":70,"line":18149},[68,85299,80102],{"class":74},[68,85301,85302],{"class":74}," .count",[68,85304,79],{"class":78},[68,85306,85307,85309,85311,85313],{"class":70,"line":18163},[68,85308,63315],{"class":85},[68,85310,89],{"class":78},[68,85312,1846],{"class":85},[68,85314,95],{"class":78},[68,85316,85317,85319,85321,85324],{"class":70,"line":18183},[68,85318,58894],{"class":85},[68,85320,89],{"class":78},[68,85322,85323],{"class":85},"#aaa",[68,85325,95],{"class":78},[68,85327,85328],{"class":70,"line":18189},[68,85329,3677],{"class":78},[68,85331,85332],{"class":70,"line":18200},[68,85333,3890],{"emptyLinePlaceholder":1567},[68,85335,85336,85338],{"class":70,"line":18223},[68,85337,73953],{"class":74},[68,85339,79],{"class":78},[68,85341,85342,85344,85346,85348,85350],{"class":70,"line":18245},[68,85343,56250],{"class":85},[68,85345,89],{"class":78},[68,85347,80051],{"class":85},[68,85349,317],{"class":316},[68,85351,95],{"class":78},[68,85353,85354,85356,85358,85360,85362],{"class":70,"line":18250},[68,85355,56187],{"class":85},[68,85357,89],{"class":78},[68,85359,1248],{"class":85},[68,85361,53038],{"class":85},[68,85363,95],{"class":78},[68,85365,85366,85368,85370,85372],{"class":70,"line":18256},[68,85367,56487],{"class":85},[68,85369,89],{"class":78},[68,85371,52960],{"class":85},[68,85373,95],{"class":78},[68,85375,85376,85378,85380,85382],{"class":70,"line":18270},[68,85377,56498],{"class":85},[68,85379,89],{"class":78},[68,85381,53062],{"class":85},[68,85383,95],{"class":78},[68,85385,85386,85389,85391,85393,85395,85397,85400],{"class":70,"line":18283},[68,85387,85388],{"class":85},"      border-top",[68,85390,89],{"class":78},[68,85392,1846],{"class":85},[68,85394,317],{"class":316},[68,85396,53003],{"class":85},[68,85398,85399],{"class":85}," #4e4e4e",[68,85401,95],{"class":78},[68,85403,85404,85406,85408,85410,85412],{"class":70,"line":18288},[68,85405,56176],{"class":85},[68,85407,89],{"class":78},[68,85409,333],{"class":85},[68,85411,317],{"class":316},[68,85413,95],{"class":78},[68,85415,85416],{"class":70,"line":18302},[68,85417,3677],{"class":78},[68,85419,85420],{"class":70,"line":18307},[68,85421,3890],{"emptyLinePlaceholder":1567},[68,85423,85424,85426,85429],{"class":70,"line":18313},[68,85425,73953],{"class":74},[68,85427,85428],{"class":74}," .amount",[68,85430,79],{"class":78},[68,85432,85433,85435,85437,85439,85441],{"class":70,"line":18318},[68,85434,56400],{"class":85},[68,85436,89],{"class":78},[68,85438,2278],{"class":85},[68,85440,317],{"class":316},[68,85442,95],{"class":78},[68,85444,85445,85447,85449,85451],{"class":70,"line":18332},[68,85446,58894],{"class":85},[68,85448,89],{"class":78},[68,85450,80417],{"class":85},[68,85452,95],{"class":78},[68,85454,85455,85457,85459,85461],{"class":70,"line":18337},[68,85456,63812],{"class":85},[68,85458,89],{"class":78},[68,85460,52972],{"class":85},[68,85462,95],{"class":78},[68,85464,85465,85467,85469,85471,85473],{"class":70,"line":18342},[68,85466,63228],{"class":85},[68,85468,89],{"class":78},[68,85470,2284],{"class":85},[68,85472,317],{"class":316},[68,85474,95],{"class":78},[68,85476,85477],{"class":70,"line":18356},[68,85478,3677],{"class":78},[68,85480,85481,85483,85485],{"class":70,"line":18368},[68,85482,53899],{"class":78},[68,85484,1553],{"class":52784},[68,85486,52791],{"class":78},[68,85488,85489,85491,85493],{"class":70,"line":18373},[68,85490,53267],{"class":78},[68,85492,52818],{"class":52784},[68,85494,52791],{"class":78},[68,85496,85497],{"class":70,"line":18386},[68,85498,3890],{"emptyLinePlaceholder":1567},[68,85500,85501,85503,85505],{"class":70,"line":18391},[68,85502,2537],{"class":78},[68,85504,53282],{"class":52784},[68,85506,52791],{"class":78},[68,85508,85509,85511,85513,85515,85517,85519],{"class":70,"line":18396},[68,85510,53626],{"class":78},[68,85512,53093],{"class":52784},[68,85514,54968],{"class":74},[68,85516,1685],{"class":78},[68,85518,64086],{"class":1742},[68,85520,52791],{"class":78},[68,85522,85523,85525,85527],{"class":70,"line":18401},[68,85524,53899],{"class":78},[68,85526,53093],{"class":52784},[68,85528,52791],{"class":78},[68,85530,85531,85533,85535,85537,85539,85541],{"class":70,"line":18414},[68,85532,53626],{"class":78},[68,85534,53093],{"class":52784},[68,85536,54968],{"class":74},[68,85538,1685],{"class":78},[68,85540,64058],{"class":1742},[68,85542,52791],{"class":78},[68,85544,85545,85547,85549,85552,85554,85556,85558,85561,85563,85565,85567,85569],{"class":70,"line":18419},[68,85546,52825],{"class":78},[68,85548,53093],{"class":52784},[68,85550,85551],{"class":78},">合计：\u003C",[68,85553,68],{"class":52784},[68,85555,54968],{"class":74},[68,85557,1685],{"class":78},[68,85559,85560],{"class":1742},"\"amount\"",[68,85562,56792],{"class":78},[68,85564,68],{"class":52784},[68,85566,56792],{"class":78},[68,85568,53093],{"class":52784},[68,85570,52791],{"class":78},[68,85572,85573,85575,85577],{"class":70,"line":34117},[68,85574,53899],{"class":78},[68,85576,53093],{"class":52784},[68,85578,52791],{"class":78},[68,85580,85581,85583,85585],{"class":70,"line":34123},[68,85582,53626],{"class":78},[68,85584,53295],{"class":52784},[68,85586,52791],{"class":78},[68,85588,85589,85591,85593,85595],{"class":70,"line":34129},[68,85590,12709],{"class":316},[68,85592,80854],{"class":85},[68,85594,15052],{"class":316},[68,85596,56925],{"class":78},[68,85598,85599],{"class":70,"line":34135},[68,85600,80863],{"class":78},[68,85602,85603,85605,85607],{"class":70,"line":34141},[68,85604,80868],{"class":78},[68,85606,80871],{"class":1742},[68,85608,32950],{"class":78},[68,85610,85611,85613,85615],{"class":70,"line":34152},[68,85612,80878],{"class":78},[68,85614,80881],{"class":1742},[68,85616,32950],{"class":78},[68,85618,85619,85621,85624],{"class":70,"line":34158},[68,85620,80888],{"class":78},[68,85622,85623],{"class":85},"289.9",[68,85625,32950],{"class":78},[68,85627,85628,85630,85632],{"class":70,"line":34178},[68,85629,80898],{"class":78},[68,85631,80901],{"class":1742},[68,85633,32950],{"class":78},[68,85635,85636,85639,85641],{"class":70,"line":34184},[68,85637,85638],{"class":78},"        count: ",[68,85640,1715],{"class":85},[68,85642,32950],{"class":78},[68,85644,85645,85648,85651],{"class":70,"line":34195},[68,85646,85647],{"class":78},"        spec: { color: ",[68,85649,85650],{"class":1742},"'白色'",[68,85652,57082],{"class":78},[68,85654,85655],{"class":70,"line":34201},[68,85656,79369],{"class":78},[68,85658,85659],{"class":70,"line":34207},[68,85660,80863],{"class":78},[68,85662,85663,85665,85667],{"class":70,"line":34213},[68,85664,80868],{"class":78},[68,85666,80962],{"class":1742},[68,85668,32950],{"class":78},[68,85670,85671,85673,85675],{"class":70,"line":34219},[68,85672,80878],{"class":78},[68,85674,80971],{"class":1742},[68,85676,32950],{"class":78},[68,85678,85679,85681,85684],{"class":70,"line":34225},[68,85680,80888],{"class":78},[68,85682,85683],{"class":85},"109.8",[68,85685,32950],{"class":78},[68,85687,85688,85690,85692],{"class":70,"line":34231},[68,85689,80898],{"class":78},[68,85691,80989],{"class":1742},[68,85693,32950],{"class":78},[68,85695,85696,85698,85700],{"class":70,"line":34237},[68,85697,85638],{"class":78},[68,85699,1709],{"class":85},[68,85701,32950],{"class":78},[68,85703,85704,85707,85709,85711,85713],{"class":70,"line":34257},[68,85705,85706],{"class":78},"        spec: { size: ",[68,85708,83380],{"class":1742},[68,85710,56942],{"class":78},[68,85712,83385],{"class":1742},[68,85714,57082],{"class":78},[68,85716,85717],{"class":70,"line":34263},[68,85718,79369],{"class":78},[68,85720,85721],{"class":70,"line":34279},[68,85722,80863],{"class":78},[68,85724,85725,85727,85729],{"class":70,"line":34285},[68,85726,80868],{"class":78},[68,85728,81006],{"class":1742},[68,85730,32950],{"class":78},[68,85732,85733,85735,85737],{"class":70,"line":34299},[68,85734,80878],{"class":78},[68,85736,81015],{"class":1742},[68,85738,32950],{"class":78},[68,85740,85741,85743,85746],{"class":70,"line":34305},[68,85742,80888],{"class":78},[68,85744,85745],{"class":85},"488",[68,85747,32950],{"class":78},[68,85749,85750,85752,85754],{"class":70,"line":34320},[68,85751,80898],{"class":78},[68,85753,81033],{"class":1742},[68,85755,32950],{"class":78},[68,85757,85758,85760,85762],{"class":70,"line":34326},[68,85759,85638],{"class":78},[68,85761,1846],{"class":85},[68,85763,32950],{"class":78},[68,85765,85766,85768,85771,85774,85777],{"class":70,"line":34335},[68,85767,85647],{"class":78},[68,85769,85770],{"class":1742},"'青色'",[68,85772,85773],{"class":78},", sum: ",[68,85775,85776],{"class":1742},"'一大四小'",[68,85778,57082],{"class":78},[68,85780,85781],{"class":70,"line":34341},[68,85782,79369],{"class":78},[68,85784,85785],{"class":70,"line":34350},[68,85786,80863],{"class":78},[68,85788,85789,85791,85793],{"class":70,"line":34356},[68,85790,80868],{"class":78},[68,85792,81050],{"class":1742},[68,85794,32950],{"class":78},[68,85796,85797,85799,85801],{"class":70,"line":34362},[68,85798,80878],{"class":78},[68,85800,81059],{"class":1742},[68,85802,32950],{"class":78},[68,85804,85805,85807,85810],{"class":70,"line":34371},[68,85806,80888],{"class":78},[68,85808,85809],{"class":85},"139",[68,85811,32950],{"class":78},[68,85813,85814,85816,85818],{"class":70,"line":34377},[68,85815,80898],{"class":78},[68,85817,81077],{"class":1742},[68,85819,32950],{"class":78},[68,85821,85822,85824,85826],{"class":70,"line":34388},[68,85823,85638],{"class":78},[68,85825,1846],{"class":85},[68,85827,32950],{"class":78},[68,85829,85830,85832,85835,85837,85840],{"class":70,"line":34394},[68,85831,85706],{"class":78},[68,85833,85834],{"class":1742},"'小号'",[68,85836,56942],{"class":78},[68,85838,85839],{"class":1742},"'紫色'",[68,85841,56948],{"class":78},[68,85843,85844,85847],{"class":70,"line":34413},[68,85845,85846],{"class":78},"        gift: ",[68,85848,85849],{"class":1742},"'50g茶叶,清洗球'\n",[68,85851,85852],{"class":70,"line":34419},[68,85853,53880],{"class":78},[68,85855,85856],{"class":70,"line":34430},[68,85857,54591],{"class":78},[68,85859,85860],{"class":70,"line":34436},[68,85861,85862],{"class":302},"    \u002F\u002F  1.根据数据渲染页面\n",[68,85864,85865,85867,85869,85871,85873,85875,85877,85879,85881,85883,85885,85887],{"class":70,"line":34456},[68,85866,53889],{"class":78},[68,85868,55880],{"class":74},[68,85870,1640],{"class":78},[68,85872,81378],{"class":1742},[68,85874,75726],{"class":78},[68,85876,1685],{"class":316},[68,85878,81525],{"class":78},[68,85880,75521],{"class":74},[68,85882,1640],{"class":78},[68,85884,81272],{"class":6705},[68,85886,81275],{"class":316},[68,85888,79],{"class":78},[68,85890,85891],{"class":70,"line":34472},[68,85892,85893],{"class":302},"      \u002F\u002F 对象解构\n",[68,85895,85896,85898,85900,85902,85904,85906,85908,85911,85913,85915,85917,85920,85922,85925,85927,85929],{"class":70,"line":34478},[68,85897,59706],{"class":316},[68,85899,81284],{"class":78},[68,85901,81297],{"class":85},[68,85903,13923],{"class":78},[68,85905,81287],{"class":85},[68,85907,13923],{"class":78},[68,85909,85910],{"class":85},"count",[68,85912,13923],{"class":78},[68,85914,81292],{"class":85},[68,85916,13923],{"class":78},[68,85918,85919],{"class":85},"spec",[68,85921,13923],{"class":78},[68,85923,85924],{"class":85},"gift",[68,85926,81300],{"class":78},[68,85928,1685],{"class":316},[68,85930,81305],{"class":78},[68,85932,85933],{"class":70,"line":34492},[68,85934,85935],{"class":302},"      \u002F\u002F 规格文字模块处理\n",[68,85937,85938,85940,85943,85945,85947,85949,85951,85953,85955,85957],{"class":70,"line":34498},[68,85939,59706],{"class":316},[68,85941,85942],{"class":85}," text",[68,85944,15052],{"class":316},[68,85946,83415],{"class":78},[68,85948,83418],{"class":74},[68,85950,83421],{"class":78},[68,85952,75700],{"class":74},[68,85954,1640],{"class":78},[68,85956,83428],{"class":1742},[68,85958,1646],{"class":78},[68,85960,85961],{"class":70,"line":34504},[68,85962,85963],{"class":302},"      \u002F\u002F 处理赠品模块\n",[68,85965,85966,85968,85970,85972,85975,85977,85979,85981,85983,85986,85988,85990,85992,85994,85996,85999,86001,86004,86006,86008,86010,86012,86014,86016],{"class":70,"line":34515},[68,85967,59706],{"class":316},[68,85969,75396],{"class":85},[68,85971,15052],{"class":316},[68,85973,85974],{"class":78}," gift ",[68,85976,2613],{"class":316},[68,85978,84588],{"class":78},[68,85980,84591],{"class":74},[68,85982,1640],{"class":78},[68,85984,85985],{"class":1742},"','",[68,85987,32310],{"class":78},[68,85989,75521],{"class":74},[68,85991,1640],{"class":78},[68,85993,81272],{"class":6705},[68,85995,81275],{"class":316},[68,85997,85998],{"class":1742}," `\u003Cspan class=\"tag\">【赠品】${",[68,86000,81272],{"class":78},[68,86002,86003],{"class":1742},"}\u003C\u002Fspan>`",[68,86005,32310],{"class":78},[68,86007,75700],{"class":74},[68,86009,1640],{"class":78},[68,86011,75705],{"class":1742},[68,86013,15202],{"class":78},[68,86015,2486],{"class":316},[68,86017,71582],{"class":1742},[68,86019,86020],{"class":70,"line":34521},[68,86021,86022],{"class":302},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[68,86024,86025,86027,86030,86032,86035,86037,86039,86041,86044,86046,86048,86050,86053,86055,86057],{"class":70,"line":34527},[68,86026,59706],{"class":316},[68,86028,86029],{"class":85}," subtotal",[68,86031,15052],{"class":316},[68,86033,86034],{"class":78}," ((price ",[68,86036,2083],{"class":316},[68,86038,7243],{"class":85},[68,86040,8007],{"class":316},[68,86042,86043],{"class":78}," count) ",[68,86045,2212],{"class":316},[68,86047,7243],{"class":85},[68,86049,32310],{"class":78},[68,86051,86052],{"class":74},"toFixed",[68,86054,1640],{"class":78},[68,86056,1715],{"class":85},[68,86058,1646],{"class":78},[68,86060,86061],{"class":70,"line":34537},[68,86062,3890],{"emptyLinePlaceholder":1567},[68,86064,86065,86067],{"class":70,"line":34543},[68,86066,75459],{"class":316},[68,86068,71646],{"class":1742},[68,86070,86071],{"class":70,"line":34554},[68,86072,86073],{"class":1742},"        \u003Cdiv class=\"item\">\n",[68,86075,86076,86079,86081],{"class":70,"line":34560},[68,86077,86078],{"class":1742},"          \u003Cimg src=\"${",[68,86080,81297],{"class":78},[68,86082,81329],{"class":1742},[68,86084,86085,86088,86090,86093,86095],{"class":70,"line":34570},[68,86086,86087],{"class":1742},"          \u003Cp class=\"name\">${",[68,86089,81287],{"class":78},[68,86091,86092],{"class":1742},"}${",[68,86094,2795],{"class":78},[68,86096,81339],{"class":1742},[68,86098,86099,86102,86104],{"class":70,"line":34575},[68,86100,86101],{"class":1742},"          \u003Cp class=\"spec\">${",[68,86103,6676],{"class":78},[68,86105,81339],{"class":1742},[68,86107,86108,86111,86113,86115,86117,86119,86121,86123],{"class":70,"line":34581},[68,86109,86110],{"class":1742},"          \u003Cp class=\"price\">${",[68,86112,81292],{"class":78},[68,86114,2186],{"class":1742},[68,86116,86052],{"class":74},[68,86118,1640],{"class":1742},[68,86120,1715],{"class":85},[68,86122,2058],{"class":1742},[68,86124,81339],{"class":1742},[68,86126,86127,86130,86132],{"class":70,"line":34630},[68,86128,86129],{"class":1742},"          \u003Cp class=\"count\">x${",[68,86131,85910],{"class":78},[68,86133,81339],{"class":1742},[68,86135,86136,86139,86142],{"class":70,"line":34677},[68,86137,86138],{"class":1742},"          \u003Cp class=\"sub-total\">${",[68,86140,86141],{"class":78},"subtotal",[68,86143,81339],{"class":1742},[68,86145,86146],{"class":70,"line":34682},[68,86147,86148],{"class":1742},"        \u003C\u002Fdiv> \n",[68,86150,86151],{"class":70,"line":34688},[68,86152,86153],{"class":1742},"             `\n",[68,86155,86156,86159,86161,86163,86165],{"class":70,"line":34707},[68,86157,86158],{"class":78},"    }).",[68,86160,75700],{"class":74},[68,86162,1640],{"class":78},[68,86164,75705],{"class":1742},[68,86166,1646],{"class":78},[68,86168,86169],{"class":70,"line":34713},[68,86170,86171],{"class":302},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[68,86173,86174,86176,86178,86180,86182,86185,86187,86190,86192,86194,86196,86199,86202,86204,86207,86209,86211,86213,86216,86218,86220,86222,86224],{"class":70,"line":34733},[68,86175,12709],{"class":316},[68,86177,64263],{"class":85},[68,86179,15052],{"class":316},[68,86181,81525],{"class":78},[68,86183,86184],{"class":74},"reduce",[68,86186,3866],{"class":78},[68,86188,86189],{"class":6705},"prev",[68,86191,13923],{"class":78},[68,86193,81272],{"class":6705},[68,86195,15202],{"class":78},[68,86197,86198],{"class":316},"=>",[68,86200,86201],{"class":78}," prev ",[68,86203,2109],{"class":316},[68,86205,86206],{"class":78}," (item.price ",[68,86208,2083],{"class":316},[68,86210,7243],{"class":85},[68,86212,8007],{"class":316},[68,86214,86215],{"class":78}," item.count) ",[68,86217,2212],{"class":316},[68,86219,7243],{"class":85},[68,86221,13923],{"class":78},[68,86223,1248],{"class":85},[68,86225,1646],{"class":78},[68,86227,86228,86230,86232,86234,86237,86239,86241,86244,86246,86248,86250],{"class":70,"line":34739},[68,86229,53889],{"class":78},[68,86231,55880],{"class":74},[68,86233,1640],{"class":78},[68,86235,86236],{"class":1742},"'.amount'",[68,86238,75726],{"class":78},[68,86240,1685],{"class":316},[68,86242,86243],{"class":78}," total.",[68,86245,86052],{"class":74},[68,86247,1640],{"class":78},[68,86249,1715],{"class":85},[68,86251,1646],{"class":78},[68,86253,86254,86256,86258],{"class":70,"line":34745},[68,86255,53899],{"class":78},[68,86257,53295],{"class":52784},[68,86259,52791],{"class":78},[68,86261,86262,86264,86266],{"class":70,"line":34755},[68,86263,53267],{"class":78},[68,86265,53282],{"class":52784},[68,86267,52791],{"class":78},[68,86269,86270],{"class":70,"line":34760},[68,86271,3890],{"emptyLinePlaceholder":1567},[68,86273,86274,86276,86278],{"class":70,"line":34766},[68,86275,53267],{"class":78},[68,86277,52119],{"class":52784},[68,86279,52791],{"class":78},[14,86281,86283],{"id":86282},"_411-编程思想","4.11 编程思想",[19,86285,86287],{"id":86286},"_4111-面向过程介绍","4.11.1 面向过程介绍",[170,86289,86290,86293],{},[268,86291,86292],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[170,86295,86296],{},"调用就可以了",[170,86298,86299],{},[801,86300],{"alt":63,"src":86301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,86303,86305],{"id":86304},"_4112-面向对象","4.11.2 面向对象",[170,86307,86308],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[170,86310,86311],{},[801,86312],{"alt":63,"src":86313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[170,86315,86316],{},"面向对象的特性：",[24,86318,86319,86322,86325],{},[27,86320,86321],{},"封装性",[27,86323,86324],{},"继承性",[27,86326,86327],{},"多态性",[19,86329,86331],{"id":86330},"_4113-两者比较","4.11.3 两者比较",[170,86333,86334],{},[801,86335],{"alt":63,"src":86336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86338,86340],{"id":86339},"_412-构造函数回顾","4.12 构造函数回顾",[170,86342,86343],{},[801,86344],{"alt":63,"src":86345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[170,86347,86348],{},[801,86349],{"alt":63,"src":86350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[170,86352,86353],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[170,86355,86356],{},[801,86357],{"alt":63,"src":86358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86360,86362],{"id":86361},"_413-原型","4.13 原型",[19,86364,86366],{"id":86365},"_4131-原型对象的认识","4.13.1 原型对象的认识",[170,86368,86369],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[170,86371,86372],{},[801,86373],{"alt":63,"src":86374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[170,86376,86377],{},[801,86378],{"alt":63,"src":86379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[170,86381,86382],{},"原型是构造函数的属性，它也是一个对象",[170,86384,86385],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[170,86387,86388],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[58,86390,86392],{"className":54549,"code":86391,"language":54551,"meta":63,"style":63},"\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",[65,86393,86394,86402,86407,86415,86420,86425,86430,86435,86440,86444,86448,86452,86457,86462,86466,86471,86476,86481,86486,86491,86495,86503],{"__ignoreMap":63},[68,86395,86396,86398,86400],{"class":70,"line":71},[68,86397,2537],{"class":78},[68,86399,53282],{"class":52784},[68,86401,52791],{"class":78},[68,86403,86404],{"class":70,"line":82},[68,86405,86406],{"class":302},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[68,86408,86409,86411,86413],{"class":70,"line":98},[68,86410,53626],{"class":78},[68,86412,53295],{"class":52784},[68,86414,52791],{"class":78},[68,86416,86417],{"class":70,"line":104},[68,86418,86419],{"class":78},"    function Star(uname, age) {\n",[68,86421,86422],{"class":70,"line":112},[68,86423,86424],{"class":78},"      this.uname = uname,\n",[68,86426,86427],{"class":70,"line":124},[68,86428,86429],{"class":78},"        this.age = age\n",[68,86431,86432],{"class":70,"line":1496},[68,86433,86434],{"class":78},"      \u002F\u002F this.sing = function () {\n",[68,86436,86437],{"class":70,"line":1502},[68,86438,86439],{"class":78},"      \u002F\u002F   console.log('唱歌')\n",[68,86441,86442],{"class":70,"line":1510},[68,86443,3890],{"emptyLinePlaceholder":1567},[68,86445,86446],{"class":70,"line":1521},[68,86447,61515],{"class":78},[68,86449,86450],{"class":70,"line":3103},[68,86451,3677],{"class":78},[68,86453,86454],{"class":70,"line":3108},[68,86455,86456],{"class":78},"    Star.prototype.sing = function () {\n",[68,86458,86459],{"class":70,"line":3114},[68,86460,86461],{"class":78},"      console.log('唱歌')\n",[68,86463,86464],{"class":70,"line":3119},[68,86465,3677],{"class":78},[68,86467,86468],{"class":70,"line":3133},[68,86469,86470],{"class":78},"    \u002F\u002F console.dir(Star.prototype)\n",[68,86472,86473],{"class":70,"line":3138},[68,86474,86475],{"class":78},"    const pink = new Star('pink', 18)\n",[68,86477,86478],{"class":70,"line":3144},[68,86479,86480],{"class":78},"    const red = new Star('red', 20)\n",[68,86482,86483],{"class":70,"line":3165},[68,86484,86485],{"class":78},"    pink.sing()\n",[68,86487,86488],{"class":70,"line":3170},[68,86489,86490],{"class":78},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[68,86492,86493],{"class":70,"line":3184},[68,86494,3890],{"emptyLinePlaceholder":1567},[68,86496,86497,86499,86501],{"class":70,"line":3189},[68,86498,53899],{"class":78},[68,86500,53295],{"class":52784},[68,86502,52791],{"class":78},[68,86504,86505,86507,86509],{"class":70,"line":3218},[68,86506,53267],{"class":78},[68,86508,53282],{"class":52784},[68,86510,52791],{"class":78},[170,86512,86513],{},[801,86514],{"alt":63,"src":86515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[58,86517,86519],{"className":54549,"code":86518,"language":54551,"meta":63,"style":63},"\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",[65,86520,86521,86529,86537,86542,86547,86552,86557,86561,86566,86571,86576,86580,86585,86589,86593,86598,86602,86610],{"__ignoreMap":63},[68,86522,86523,86525,86527],{"class":70,"line":71},[68,86524,2537],{"class":78},[68,86526,53282],{"class":52784},[68,86528,52791],{"class":78},[68,86530,86531,86533,86535],{"class":70,"line":82},[68,86532,53626],{"class":78},[68,86534,53295],{"class":52784},[68,86536,52791],{"class":78},[68,86538,86539],{"class":70,"line":98},[68,86540,86541],{"class":78},"    let that\n",[68,86543,86544],{"class":70,"line":104},[68,86545,86546],{"class":78},"    function Star(uname) {\n",[68,86548,86549],{"class":70,"line":112},[68,86550,86551],{"class":78},"      this.uname = uname\n",[68,86553,86554],{"class":70,"line":124},[68,86555,86556],{"class":78},"      that = this\n",[68,86558,86559],{"class":70,"line":1496},[68,86560,3677],{"class":78},[68,86562,86563],{"class":70,"line":1502},[68,86564,86565],{"class":78},"    \u002F\u002F 实例对象是 ldh\n",[68,86567,86568],{"class":70,"line":1510},[68,86569,86570],{"class":78},"    const ldh = new Star('刘德华')\n",[68,86572,86573],{"class":70,"line":1521},[68,86574,86575],{"class":78},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[68,86577,86578],{"class":70,"line":3103},[68,86579,3890],{"emptyLinePlaceholder":1567},[68,86581,86582],{"class":70,"line":3108},[68,86583,86584],{"class":78},"    Star.sing = function () {\n",[68,86586,86587],{"class":70,"line":3114},[68,86588,86461],{"class":78},[68,86590,86591],{"class":70,"line":3119},[68,86592,3677],{"class":78},[68,86594,86595],{"class":70,"line":3133},[68,86596,86597],{"class":78},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[68,86599,86600],{"class":70,"line":3138},[68,86601,3890],{"emptyLinePlaceholder":1567},[68,86603,86604,86606,86608],{"class":70,"line":3144},[68,86605,53899],{"class":78},[68,86607,53295],{"class":52784},[68,86609,52791],{"class":78},[68,86611,86612,86614,86616],{"class":70,"line":3165},[68,86613,53267],{"class":78},[68,86615,53282],{"class":52784},[68,86617,52791],{"class":78},[170,86619,86620],{},"构造函数的this指向的是实例对象；",[170,86622,86623],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,86625,86627],{"id":86626},"_4132-数组扩展方法","4.13.2 数组扩展方法",[170,86629,86630],{},[801,86631],{"alt":63,"src":86632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[58,86634,86636],{"className":54549,"code":86635,"language":54551,"meta":63,"style":63},"\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",[65,86637,86638,86646,86654,86659,86664,86669,86674,86679,86684,86689,86694,86699,86704,86708,86713,86718,86723,86728,86732,86737,86742,86747,86752,86756,86761,86766,86771,86776,86780,86785,86789,86797],{"__ignoreMap":63},[68,86639,86640,86642,86644],{"class":70,"line":71},[68,86641,2537],{"class":78},[68,86643,53282],{"class":52784},[68,86645,52791],{"class":78},[68,86647,86648,86650,86652],{"class":70,"line":82},[68,86649,53626],{"class":78},[68,86651,53295],{"class":52784},[68,86653,52791],{"class":78},[68,86655,86656],{"class":70,"line":98},[68,86657,86658],{"class":78},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[68,86660,86661],{"class":70,"line":104},[68,86662,86663],{"class":78},"    const arr = [1, 2, 3]\n",[68,86665,86666],{"class":70,"line":112},[68,86667,86668],{"class":78},"    \u002F\u002F 自己定义数组的扩展方法\n",[68,86670,86671],{"class":70,"line":124},[68,86672,86673],{"class":78},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[68,86675,86676],{"class":70,"line":1496},[68,86677,86678],{"class":78},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[68,86680,86681],{"class":70,"line":1502},[68,86682,86683],{"class":78},"    \u002F\u002F ①.最大值\n",[68,86685,86686],{"class":70,"line":1510},[68,86687,86688],{"class":78},"    Array.prototype.max = function () {\n",[68,86690,86691],{"class":70,"line":1521},[68,86692,86693],{"class":78},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[68,86695,86696],{"class":70,"line":3103},[68,86697,86698],{"class":78},"      return Math.max(...this)\n",[68,86700,86701],{"class":70,"line":3108},[68,86702,86703],{"class":78},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[68,86705,86706],{"class":70,"line":3114},[68,86707,3677],{"class":78},[68,86709,86710],{"class":70,"line":3119},[68,86711,86712],{"class":78},"    console.log(arr.max())\n",[68,86714,86715],{"class":70,"line":3133},[68,86716,86717],{"class":78},"    \u002F\u002F ②最小值\n",[68,86719,86720],{"class":70,"line":3138},[68,86721,86722],{"class":78},"    Array.prototype.min = function () {\n",[68,86724,86725],{"class":70,"line":3144},[68,86726,86727],{"class":78},"      return Math.min(...this)\n",[68,86729,86730],{"class":70,"line":3165},[68,86731,3677],{"class":78},[68,86733,86734],{"class":70,"line":3170},[68,86735,86736],{"class":78},"    console.log(arr.min())\n",[68,86738,86739],{"class":70,"line":3184},[68,86740,86741],{"class":78},"    \u002F\u002F③求和\n",[68,86743,86744],{"class":70,"line":3189},[68,86745,86746],{"class":78},"    Array.prototype.sum = function () {\n",[68,86748,86749],{"class":70,"line":3218},[68,86750,86751],{"class":78},"      return this.reduce((prev, current) => prev + current, 0)\n",[68,86753,86754],{"class":70,"line":3223},[68,86755,3677],{"class":78},[68,86757,86758],{"class":70,"line":3240},[68,86759,86760],{"class":78},"    console.log(arr.sum())\n",[68,86762,86763],{"class":70,"line":3245},[68,86764,86765],{"class":78},"    \u002F\u002F ③排序\n",[68,86767,86768],{"class":70,"line":3250},[68,86769,86770],{"class":78},"    Array.prototype.rever = function () {\n",[68,86772,86773],{"class":70,"line":3255},[68,86774,86775],{"class":78},"      return this.reverse()\n",[68,86777,86778],{"class":70,"line":3269},[68,86779,3677],{"class":78},[68,86781,86782],{"class":70,"line":3274},[68,86783,86784],{"class":78},"    console.log(arr.rever())\n",[68,86786,86787],{"class":70,"line":4067},[68,86788,3890],{"emptyLinePlaceholder":1567},[68,86790,86791,86793,86795],{"class":70,"line":4081},[68,86792,53899],{"class":78},[68,86794,53295],{"class":52784},[68,86796,52791],{"class":78},[68,86798,86799,86801,86803],{"class":70,"line":4089},[68,86800,53267],{"class":78},[68,86802,53282],{"class":52784},[68,86804,52791],{"class":78},[170,86806,86807],{},[801,86808],{"alt":63,"src":86809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,86811,86813],{"id":86812},"_4133-constructor-属性","4.13.3 constructor 属性",[170,86815,86816],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[170,86818,86819],{},[801,86820],{"alt":63,"src":86821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[58,86823,86825],{"className":54549,"code":86824,"language":54551,"meta":63,"style":63},"\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",[65,86826,86827,86835,86843,86848,86853,86857,86862,86867,86872,86880],{"__ignoreMap":63},[68,86828,86829,86831,86833],{"class":70,"line":71},[68,86830,2537],{"class":78},[68,86832,53282],{"class":52784},[68,86834,52791],{"class":78},[68,86836,86837,86839,86841],{"class":70,"line":82},[68,86838,53626],{"class":78},[68,86840,53295],{"class":52784},[68,86842,52791],{"class":78},[68,86844,86845],{"class":70,"line":98},[68,86846,86847],{"class":78},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[68,86849,86850],{"class":70,"line":104},[68,86851,86852],{"class":78},"    function Star() {\n",[68,86854,86855],{"class":70,"line":112},[68,86856,3677],{"class":78},[68,86858,86859],{"class":70,"line":124},[68,86860,86861],{"class":78},"    const ldh = new Star()\n",[68,86863,86864],{"class":70,"line":1496},[68,86865,86866],{"class":78},"    console.log(Star.prototype)\n",[68,86868,86869],{"class":70,"line":1502},[68,86870,86871],{"class":78},"    console.log(Star.prototype.constructor === Star)\n",[68,86873,86874,86876,86878],{"class":70,"line":1510},[68,86875,53899],{"class":78},[68,86877,53295],{"class":52784},[68,86879,52791],{"class":78},[68,86881,86882,86884,86886],{"class":70,"line":1521},[68,86883,53267],{"class":78},[68,86885,53282],{"class":52784},[68,86887,52791],{"class":78},[170,86889,86890],{},[801,86891],{"alt":63,"src":86892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[170,86894,86895],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[58,86897,86899],{"className":54549,"code":86898,"language":54551,"meta":63,"style":63},"  \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",[65,86900,86901,86909,86913,86917,86921,86926,86931,86936,86940,86945,86950,86955,86960,86965,86970,86974,86978,86983,86988,86993,86997,87002,87007,87011,87015,87019],{"__ignoreMap":63},[68,86902,86903,86905,86907],{"class":70,"line":71},[68,86904,53626],{"class":78},[68,86906,53295],{"class":52784},[68,86908,52791],{"class":78},[68,86910,86911],{"class":70,"line":82},[68,86912,86847],{"class":78},[68,86914,86915],{"class":70,"line":98},[68,86916,86852],{"class":78},[68,86918,86919],{"class":70,"line":104},[68,86920,3677],{"class":78},[68,86922,86923],{"class":70,"line":112},[68,86924,86925],{"class":78},"    \u002F\u002F const ldh = new Star()\n",[68,86927,86928],{"class":70,"line":124},[68,86929,86930],{"class":78},"    \u002F\u002F console.log(Star.prototype)\n",[68,86932,86933],{"class":70,"line":1496},[68,86934,86935],{"class":78},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[68,86937,86938],{"class":70,"line":1502},[68,86939,3890],{"emptyLinePlaceholder":1567},[68,86941,86942],{"class":70,"line":1510},[68,86943,86944],{"class":78},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[68,86946,86947],{"class":70,"line":1521},[68,86948,86949],{"class":78},"    \u002F\u002F Star.prototype.sing = function () {\n",[68,86951,86952],{"class":70,"line":3103},[68,86953,86954],{"class":78},"    \u002F\u002F   console.log('唱歌')\n",[68,86956,86957],{"class":70,"line":3108},[68,86958,86959],{"class":78},"    \u002F\u002F }\n",[68,86961,86962],{"class":70,"line":3114},[68,86963,86964],{"class":78},"    \u002F\u002F Star.prototype.dance = function () {\n",[68,86966,86967],{"class":70,"line":3119},[68,86968,86969],{"class":78},"    \u002F\u002F   console.log('跳舞')\n",[68,86971,86972],{"class":70,"line":3133},[68,86973,86959],{"class":78},[68,86975,86976],{"class":70,"line":3138},[68,86977,86866],{"class":78},[68,86979,86980],{"class":70,"line":3144},[68,86981,86982],{"class":78},"    Star.prototype = {\n",[68,86984,86985],{"class":70,"line":3165},[68,86986,86987],{"class":78},"      sing: function () {\n",[68,86989,86990],{"class":70,"line":3170},[68,86991,86992],{"class":78},"        console.log('唱歌')\n",[68,86994,86995],{"class":70,"line":3184},[68,86996,79369],{"class":78},[68,86998,86999],{"class":70,"line":3189},[68,87000,87001],{"class":78},"      dance: function () {\n",[68,87003,87004],{"class":70,"line":3218},[68,87005,87006],{"class":78},"        console.log('跳舞')\n",[68,87008,87009],{"class":70,"line":3223},[68,87010,53880],{"class":78},[68,87012,87013],{"class":70,"line":3240},[68,87014,3677],{"class":78},[68,87016,87017],{"class":70,"line":3245},[68,87018,86866],{"class":78},[68,87020,87021,87023,87025],{"class":70,"line":3250},[68,87022,53899],{"class":78},[68,87024,53295],{"class":52784},[68,87026,52791],{"class":78},[170,87028,87029],{},"进行输出结果后会发现：",[170,87031,87032],{},[801,87033],{"alt":63,"src":87034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[170,87036,87037],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[170,87039,87040],{},"所以，要重新指回创造这个原型对象的构造函数",[58,87042,87044],{"className":72691,"code":87043,"language":72693,"meta":63,"style":63},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[65,87045,87046,87060,87065,87070,87081,87094,87099,87110,87124,87128],{"__ignoreMap":63},[68,87047,87048,87051,87053,87056,87058],{"class":70,"line":71},[68,87049,87050],{"class":85},"Star",[68,87052,2186],{"class":78},[68,87054,87055],{"class":85},"prototype",[68,87057,15052],{"class":316},[68,87059,79],{"class":78},[68,87061,87062],{"class":70,"line":82},[68,87063,87064],{"class":302},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[68,87066,87067],{"class":70,"line":98},[68,87068,87069],{"class":78},"  constructor: Star,\n",[68,87071,87072,87075,87077,87079],{"class":70,"line":104},[68,87073,87074],{"class":74},"  sing",[68,87076,89],{"class":78},[68,87078,55930],{"class":316},[68,87080,55933],{"class":78},[68,87082,87083,87085,87087,87089,87092],{"class":70,"line":112},[68,87084,75230],{"class":78},[68,87086,59725],{"class":74},[68,87088,1640],{"class":78},[68,87090,87091],{"class":1742},"'唱歌'",[68,87093,1646],{"class":78},[68,87095,87096],{"class":70,"line":124},[68,87097,87098],{"class":78},"   },\n",[68,87100,87101,87104,87106,87108],{"class":70,"line":1496},[68,87102,87103],{"class":74},"   dance",[68,87105,89],{"class":78},[68,87107,55930],{"class":316},[68,87109,55933],{"class":78},[68,87111,87112,87115,87117,87119,87122],{"class":70,"line":1502},[68,87113,87114],{"class":78},"     console.",[68,87116,59725],{"class":74},[68,87118,1640],{"class":78},[68,87120,87121],{"class":1742},"'跳舞'",[68,87123,1646],{"class":78},[68,87125,87126],{"class":70,"line":1510},[68,87127,5799],{"class":78},[68,87129,87130],{"class":70,"line":1521},[68,87131,101],{"class":78},[170,87133,87134],{},[801,87135],{"alt":63,"src":87136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[170,87138,87139],{},"总结1：",[170,87141,87142],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[170,87144,87145],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[170,87147,87148],{},"constructor指的是他的来源",[170,87150,87151],{},[801,87152],{"alt":63,"src":87153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[170,87155,87156],{},[801,87157],{"alt":63,"src":87158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[170,87160,87161],{},"总结2：",[170,87163,87164],{},[801,87165],{"alt":63,"src":87166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[170,87168,87169],{},[801,87170],{"alt":63,"src":87171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[170,87173,87174],{},[801,87175],{"alt":63,"src":87176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,87178,87180],{"id":87179},"_4134-对象原型","4.13.4 对象原型",[170,87182,87183],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[170,87185,87186],{},"对象原型就是__proto__这个属性",[170,87188,87189],{},[801,87190],{"alt":63,"src":87191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[170,87193,87194],{},[801,87195],{"alt":63,"src":87196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[170,87198,87199],{},[801,87200],{"alt":63,"src":87201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[170,87203,87204],{},[801,87205],{"alt":63,"src":87206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[58,87208,87210],{"className":54549,"code":87209,"language":54551,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,87211,87212,87220,87228,87232,87236,87240,87245,87253],{"__ignoreMap":63},[68,87213,87214,87216,87218],{"class":70,"line":71},[68,87215,2537],{"class":78},[68,87217,53282],{"class":52784},[68,87219,52791],{"class":78},[68,87221,87222,87224,87226],{"class":70,"line":82},[68,87223,53626],{"class":78},[68,87225,53295],{"class":52784},[68,87227,52791],{"class":78},[68,87229,87230],{"class":70,"line":98},[68,87231,86852],{"class":78},[68,87233,87234],{"class":70,"line":104},[68,87235,3677],{"class":78},[68,87237,87238],{"class":70,"line":112},[68,87239,86861],{"class":78},[68,87241,87242],{"class":70,"line":124},[68,87243,87244],{"class":78},"    console.log(ldh)\n",[68,87246,87247,87249,87251],{"class":70,"line":1496},[68,87248,53899],{"class":78},[68,87250,53295],{"class":52784},[68,87252,52791],{"class":78},[68,87254,87255,87257,87259],{"class":70,"line":1502},[68,87256,53267],{"class":78},[68,87258,53282],{"class":52784},[68,87260,52791],{"class":78},[170,87262,87263],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[170,87265,87266],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[170,87268,87269],{},[801,87270],{"alt":63,"src":87271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[170,87273,87274],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[170,87276,87277],{},"对象原型指向原型对象",[170,87279,87280],{},[801,87281],{"alt":63,"src":87282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[170,87284,87285],{},[801,87286],{"alt":63,"src":87287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[170,87289,87290],{},[801,87291],{"alt":63,"src":87292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,87294,87296],{"id":87295},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[170,87298,87299],{},[801,87300],{"alt":63,"src":87301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[263,87303,87304,87307,87310,87313],{},[27,87305,87306],{},"构造函数通过new的形式实例化得到实例对象",[27,87308,87309],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[27,87311,87312],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[27,87314,87315],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[170,87317,87318],{},[801,87319],{"alt":63,"src":87320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[170,87322,87323],{},"题目梳理：",[170,87325,87326],{},[801,87327],{"alt":63,"src":87328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,87330,87332],{"id":87331},"_4136-原型继承","4.13.6 原型继承",[170,87334,87335],{},[801,87336],{"alt":63,"src":87337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[170,87339,87340],{},[801,87341],{"alt":63,"src":87342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[170,87344,87345],{},[801,87346],{"alt":63,"src":87347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[170,87349,87350],{},[801,87351],{"alt":63,"src":87352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[170,87354,87355],{},[801,87356],{"alt":63,"src":87357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[170,87359,87360],{},[801,87361],{"alt":63,"src":87362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[170,87364,87365],{},[801,87366],{"alt":63,"src":87367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[170,87369,87370],{},[801,87371],{"alt":63,"src":87372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[170,87374,87375],{},"回顾：构造函数每次new得到对象都是不同的",[19,87377,87379],{"id":87378},"_4137-原型链","4.13.7 原型链",[170,87381,87382],{},[801,87383],{"alt":63,"src":87384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[170,87386,87387],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[170,87389,87390],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[170,87392,87393],{},"大哥是Object",[170,87395,87396],{},[801,87397],{"alt":63,"src":87398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[170,87400,87401],{},[801,87402],{"alt":63,"src":87403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[170,87405,87406],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[170,87408,87409],{},"万物皆对象",[19,87411,87413],{"id":87412},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[170,87415,87416],{},"模态框",[170,87418,87419],{},"以后遇见这个效果直接使用这个就行",[170,87421,87422],{},[801,87423],{"alt":63,"src":87424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[170,87426,87427],{},[801,87428],{"alt":63,"src":87429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[170,87431,87432],{},[801,87433],{"alt":63,"src":87434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[170,87436,87437],{},[801,87438],{"alt":63,"src":87439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[170,87441,87442],{},"补充知识点：",[263,87444,87445],{},[27,87446,87447],{},"append()",[170,87449,87450],{},[801,87451],{"alt":63,"src":87452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[58,87454,87456],{"className":52117,"code":87455,"language":52119,"meta":63,"style":63},"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",[65,87457,87458,87463,87468,87473,87477,87481,87485,87490,87495,87500,87504],{"__ignoreMap":63},[68,87459,87460],{"class":70,"line":71},[68,87461,87462],{"class":78},"append(param1)\n",[68,87464,87465],{"class":70,"line":82},[68,87466,87467],{"class":78},"append(param1, param2)\n",[68,87469,87470],{"class":70,"line":98},[68,87471,87472],{"class":78},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[68,87474,87475],{"class":70,"line":104},[68,87476,3890],{"emptyLinePlaceholder":1567},[68,87478,87479],{"class":70,"line":112},[68,87480,3890],{"emptyLinePlaceholder":1567},[68,87482,87483],{"class":70,"line":124},[68,87484,3890],{"emptyLinePlaceholder":1567},[68,87486,87487],{"class":70,"line":1496},[68,87488,87489],{"class":78},"let div = document.createElement(\"div\");\n",[68,87491,87492],{"class":70,"line":1502},[68,87493,87494],{"class":78},"let p = document.createElement(\"p\");\n",[68,87496,87497],{"class":70,"line":1510},[68,87498,87499],{"class":78},"div.append(p);\n",[68,87501,87502],{"class":70,"line":1521},[68,87503,3890],{"emptyLinePlaceholder":1567},[68,87505,87506,87509,87511],{"class":70,"line":3103},[68,87507,87508],{"class":78},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[68,87510,170],{"class":52784},[68,87512,87513],{"class":78},"> ]\n",[263,87515,87516],{"start":82},[27,87517,87518],{},"remove()",[170,87520,87521],{},"自己删自己",[170,87523,87524],{},[801,87525],{"alt":63,"src":87526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[58,87528,87530],{"className":52117,"code":87529,"language":52119,"meta":63,"style":63},"\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",[65,87531,87532,87542,87556,87560,87568,87582,87602,87614,87622,87629,87641,87654,87689,87701,87711,87723,87735,87747,87774,87784,87788,87792,87801,87813,87827,87837,87849,87853,87857,87867,87878,87888,87898,87911,87924,87934,87938,87942,87951,87961,87973,87977,87981,87990,88000,88010,88022,88026,88030,88040,88056,88067,88077,88087,88099,88111,88123,88127,88131,88144,88155,88159,88167,88175,88179,88187,88207,88227,88235,88240,88266,88271,88276,88295,88300,88312,88317,88328,88338,88348,88353,88358,88362,88367,88372,88377,88397,88402,88422,88427,88441,88446,88451,88456,88472,88476,88481,88510,88515,88520,88525,88536,88540,88544,88548,88553,88578,88583,88608,88613,88622,88626,88631,88656,88660,88685,88689,88698,88702,88707,88725,88735,88739,88747,88755,88759],{"__ignoreMap":63},[68,87533,87534,87536,87538,87540],{"class":70,"line":71},[68,87535,52781],{"class":78},[68,87537,52785],{"class":52784},[68,87539,52788],{"class":74},[68,87541,52791],{"class":78},[68,87543,87544,87546,87548,87550,87552,87554],{"class":70,"line":82},[68,87545,2537],{"class":78},[68,87547,52119],{"class":52784},[68,87549,52800],{"class":74},[68,87551,1685],{"class":78},[68,87553,52805],{"class":1742},[68,87555,52791],{"class":78},[68,87557,87558],{"class":70,"line":98},[68,87559,3890],{"emptyLinePlaceholder":1567},[68,87561,87562,87564,87566],{"class":70,"line":104},[68,87563,2537],{"class":78},[68,87565,52818],{"class":52784},[68,87567,52791],{"class":78},[68,87569,87570,87572,87574,87576,87578,87580],{"class":70,"line":112},[68,87571,53626],{"class":78},[68,87573,52828],{"class":52784},[68,87575,52831],{"class":74},[68,87577,1685],{"class":78},[68,87579,52836],{"class":1742},[68,87581,52791],{"class":78},[68,87583,87584,87586,87588,87590,87592,87594,87596,87598,87600],{"class":70,"line":124},[68,87585,53626],{"class":78},[68,87587,52828],{"class":52784},[68,87589,16408],{"class":74},[68,87591,1685],{"class":78},[68,87593,52875],{"class":1742},[68,87595,52855],{"class":74},[68,87597,1685],{"class":78},[68,87599,52882],{"class":1742},[68,87601,52791],{"class":78},[68,87603,87604,87606,87608,87610,87612],{"class":70,"line":1496},[68,87605,53626],{"class":78},[68,87607,52891],{"class":52784},[68,87609,52894],{"class":78},[68,87611,52891],{"class":52784},[68,87613,52791],{"class":78},[68,87615,87616,87618,87620],{"class":70,"line":1502},[68,87617,53626],{"class":78},[68,87619,1553],{"class":52784},[68,87621,52791],{"class":78},[68,87623,87624,87627],{"class":70,"line":1510},[68,87625,87626],{"class":74},"    .modal",[68,87628,79],{"class":78},[68,87630,87631,87633,87635,87637,87639],{"class":70,"line":1521},[68,87632,56250],{"class":85},[68,87634,89],{"class":78},[68,87636,5463],{"class":85},[68,87638,317],{"class":316},[68,87640,95],{"class":78},[68,87642,87643,87646,87648,87650,87652],{"class":70,"line":3103},[68,87644,87645],{"class":85},"      min-height",[68,87647,89],{"class":78},[68,87649,1940],{"class":85},[68,87651,317],{"class":316},[68,87653,95],{"class":78},[68,87655,87656,87658,87660,87662,87664,87666,87668,87670,87672,87674,87676,87678,87680,87682,87684,87687],{"class":70,"line":3108},[68,87657,80227],{"class":85},[68,87659,89],{"class":78},[68,87661,1248],{"class":85},[68,87663,5583],{"class":85},[68,87665,3528],{"class":85},[68,87667,317],{"class":316},[68,87669,80244],{"class":85},[68,87671,1640],{"class":78},[68,87673,1248],{"class":85},[68,87675,13923],{"class":78},[68,87677,1248],{"class":85},[68,87679,13923],{"class":78},[68,87681,1248],{"class":85},[68,87683,13923],{"class":78},[68,87685,87686],{"class":85},"0.1",[68,87688,4209],{"class":78},[68,87690,87691,87693,87695,87697,87699],{"class":70,"line":3114},[68,87692,56612],{"class":85},[68,87694,89],{"class":78},[68,87696,1922],{"class":85},[68,87698,317],{"class":316},[68,87700,95],{"class":78},[68,87702,87703,87705,87707,87709],{"class":70,"line":3119},[68,87704,56239],{"class":85},[68,87706,89],{"class":78},[68,87708,387],{"class":85},[68,87710,95],{"class":78},[68,87712,87713,87716,87718,87721],{"class":70,"line":3133},[68,87714,87715],{"class":85},"      z-index",[68,87717,89],{"class":78},[68,87719,87720],{"class":85},"999",[68,87722,95],{"class":78},[68,87724,87725,87727,87729,87731,87733],{"class":70,"line":3138},[68,87726,56316],{"class":85},[68,87728,89],{"class":78},[68,87730,2284],{"class":85},[68,87732,1957],{"class":316},[68,87734,95],{"class":78},[68,87736,87737,87739,87741,87743,87745],{"class":70,"line":3144},[68,87738,56425],{"class":85},[68,87740,89],{"class":78},[68,87742,2284],{"class":85},[68,87744,1957],{"class":316},[68,87746,95],{"class":78},[68,87748,87749,87751,87753,87755,87757,87760,87762,87764,87766,87768,87770,87772],{"class":70,"line":3165},[68,87750,80268],{"class":85},[68,87752,89],{"class":78},[68,87754,80273],{"class":85},[68,87756,1640],{"class":78},[68,87758,87759],{"class":85},"-50",[68,87761,1957],{"class":316},[68,87763,13923],{"class":78},[68,87765,87759],{"class":85},[68,87767,1957],{"class":316},[68,87769,13923],{"class":78},[68,87771,1248],{"class":85},[68,87773,4209],{"class":78},[68,87775,87776,87778,87780,87782],{"class":70,"line":3170},[68,87777,56362],{"class":85},[68,87779,89],{"class":78},[68,87781,62320],{"class":85},[68,87783,95],{"class":78},[68,87785,87786],{"class":70,"line":3184},[68,87787,3677],{"class":78},[68,87789,87790],{"class":70,"line":3189},[68,87791,3890],{"emptyLinePlaceholder":1567},[68,87793,87794,87796,87799],{"class":70,"line":3218},[68,87795,87626],{"class":74},[68,87797,87798],{"class":74}," .header",[68,87800,79],{"class":78},[68,87802,87803,87805,87807,87809,87811],{"class":70,"line":3223},[68,87804,58837],{"class":85},[68,87806,89],{"class":78},[68,87808,2030],{"class":85},[68,87810,317],{"class":316},[68,87812,95],{"class":78},[68,87814,87815,87817,87819,87821,87823,87825],{"class":70,"line":3240},[68,87816,56176],{"class":85},[68,87818,89],{"class":78},[68,87820,1248],{"class":85},[68,87822,3528],{"class":85},[68,87824,317],{"class":316},[68,87826,95],{"class":78},[68,87828,87829,87831,87833,87835],{"class":70,"line":3245},[68,87830,56239],{"class":85},[68,87832,89],{"class":78},[68,87834,296],{"class":85},[68,87836,95],{"class":78},[68,87838,87839,87841,87843,87845,87847],{"class":70,"line":3250},[68,87840,56400],{"class":85},[68,87842,89],{"class":78},[68,87844,333],{"class":85},[68,87846,317],{"class":316},[68,87848,95],{"class":78},[68,87850,87851],{"class":70,"line":3255},[68,87852,3677],{"class":78},[68,87854,87855],{"class":70,"line":3269},[68,87856,3890],{"emptyLinePlaceholder":1567},[68,87858,87859,87861,87863,87865],{"class":70,"line":3274},[68,87860,87626],{"class":74},[68,87862,87798],{"class":74},[68,87864,4522],{"class":52784},[68,87866,79],{"class":78},[68,87868,87869,87872,87874,87876],{"class":70,"line":4067},[68,87870,87871],{"class":85},"      font-style",[68,87873,89],{"class":78},[68,87875,65319],{"class":85},[68,87877,95],{"class":78},[68,87879,87880,87882,87884,87886],{"class":70,"line":4081},[68,87881,58894],{"class":85},[68,87883,89],{"class":78},[68,87885,63548],{"class":85},[68,87887,95],{"class":78},[68,87889,87890,87892,87894,87896],{"class":70,"line":4089},[68,87891,56239],{"class":85},[68,87893,89],{"class":78},[68,87895,379],{"class":85},[68,87897,95],{"class":78},[68,87899,87900,87903,87905,87907,87909],{"class":70,"line":4094},[68,87901,87902],{"class":85},"      right",[68,87904,89],{"class":78},[68,87906,2203],{"class":85},[68,87908,317],{"class":316},[68,87910,95],{"class":78},[68,87912,87913,87915,87917,87920,87922],{"class":70,"line":4100},[68,87914,56425],{"class":85},[68,87916,89],{"class":78},[68,87918,87919],{"class":85},"-2",[68,87921,317],{"class":316},[68,87923,95],{"class":78},[68,87925,87926,87928,87930,87932],{"class":70,"line":4106},[68,87927,63503],{"class":85},[68,87929,89],{"class":78},[68,87931,63508],{"class":85},[68,87933,95],{"class":78},[68,87935,87936],{"class":70,"line":4111},[68,87937,3677],{"class":78},[68,87939,87940],{"class":70,"line":9437},[68,87941,3890],{"emptyLinePlaceholder":1567},[68,87943,87944,87946,87949],{"class":70,"line":9461},[68,87945,87626],{"class":74},[68,87947,87948],{"class":74}," .body",[68,87950,79],{"class":78},[68,87952,87953,87955,87957,87959],{"class":70,"line":9466},[68,87954,58764],{"class":85},[68,87956,89],{"class":78},[68,87958,53074],{"class":85},[68,87960,95],{"class":78},[68,87962,87963,87965,87967,87969,87971],{"class":70,"line":9472},[68,87964,56176],{"class":85},[68,87966,89],{"class":78},[68,87968,313],{"class":85},[68,87970,317],{"class":316},[68,87972,95],{"class":78},[68,87974,87975],{"class":70,"line":9499},[68,87976,3677],{"class":78},[68,87978,87979],{"class":70,"line":9504},[68,87980,3890],{"emptyLinePlaceholder":1567},[68,87982,87983,87985,87988],{"class":70,"line":9510},[68,87984,87626],{"class":74},[68,87986,87987],{"class":74}," .footer",[68,87989,79],{"class":78},[68,87991,87992,87994,87996,87998],{"class":70,"line":9522},[68,87993,56487],{"class":85},[68,87995,89],{"class":78},[68,87997,52960],{"class":85},[68,87999,95],{"class":78},[68,88001,88002,88004,88006,88008],{"class":70,"line":9534},[68,88003,56498],{"class":85},[68,88005,89],{"class":78},[68,88007,53062],{"class":85},[68,88009,95],{"class":78},[68,88011,88012,88014,88016,88018,88020],{"class":70,"line":9546},[68,88013,56176],{"class":85},[68,88015,89],{"class":78},[68,88017,313],{"class":85},[68,88019,317],{"class":316},[68,88021,95],{"class":78},[68,88023,88024],{"class":70,"line":11204},[68,88025,3677],{"class":78},[68,88027,88028],{"class":70,"line":11229},[68,88029,3890],{"emptyLinePlaceholder":1567},[68,88031,88032,88034,88036,88038],{"class":70,"line":11252},[68,88033,87626],{"class":74},[68,88035,87987],{"class":74},[68,88037,2891],{"class":52784},[68,88039,79],{"class":78},[68,88041,88042,88044,88046,88048,88050,88052,88054],{"class":70,"line":11276},[68,88043,56176],{"class":85},[68,88045,89],{"class":78},[68,88047,1709],{"class":85},[68,88049,317],{"class":316},[68,88051,3573],{"class":85},[68,88053,317],{"class":316},[68,88055,95],{"class":78},[68,88057,88058,88060,88062,88065],{"class":70,"line":11281},[68,88059,63199],{"class":85},[68,88061,89],{"class":78},[68,88063,88064],{"class":85},"#ccc",[68,88066,95],{"class":78},[68,88068,88069,88071,88073,88075],{"class":70,"line":11286},[68,88070,65448],{"class":85},[68,88072,89],{"class":78},[68,88074,151],{"class":85},[68,88076,95],{"class":78},[68,88078,88079,88081,88083,88085],{"class":70,"line":11291},[68,88080,58894],{"class":85},[68,88082,89],{"class":78},[68,88084,62320],{"class":85},[68,88086,95],{"class":78},[68,88088,88089,88091,88093,88095,88097],{"class":70,"line":11300},[68,88090,56612],{"class":85},[68,88092,89],{"class":78},[68,88094,1715],{"class":85},[68,88096,317],{"class":316},[68,88098,95],{"class":78},[68,88100,88101,88103,88105,88107,88109],{"class":70,"line":11305},[68,88102,63228],{"class":85},[68,88104,89],{"class":78},[68,88106,313],{"class":85},[68,88108,317],{"class":316},[68,88110,95],{"class":78},[68,88112,88113,88115,88117,88119,88121],{"class":70,"line":11311},[68,88114,56400],{"class":85},[68,88116,89],{"class":78},[68,88118,2177],{"class":85},[68,88120,317],{"class":316},[68,88122,95],{"class":78},[68,88124,88125],{"class":70,"line":11332},[68,88126,3677],{"class":78},[68,88128,88129],{"class":70,"line":11338},[68,88130,3890],{"emptyLinePlaceholder":1567},[68,88132,88133,88135,88137,88139,88142],{"class":70,"line":11352},[68,88134,87626],{"class":74},[68,88136,87987],{"class":74},[68,88138,2891],{"class":52784},[68,88140,88141],{"class":74},".submit",[68,88143,79],{"class":78},[68,88145,88146,88148,88150,88153],{"class":70,"line":11358},[68,88147,56362],{"class":85},[68,88149,89],{"class":78},[68,88151,88152],{"class":85},"#369",[68,88154,95],{"class":78},[68,88156,88157],{"class":70,"line":11385},[68,88158,3677],{"class":78},[68,88160,88161,88163,88165],{"class":70,"line":11394},[68,88162,53899],{"class":78},[68,88164,1553],{"class":52784},[68,88166,52791],{"class":78},[68,88168,88169,88171,88173],{"class":70,"line":11400},[68,88170,53267],{"class":78},[68,88172,52818],{"class":52784},[68,88174,52791],{"class":78},[68,88176,88177],{"class":70,"line":11408},[68,88178,3890],{"emptyLinePlaceholder":1567},[68,88180,88181,88183,88185],{"class":70,"line":11413},[68,88182,2537],{"class":78},[68,88184,53282],{"class":52784},[68,88186,52791],{"class":78},[68,88188,88189,88191,88193,88195,88197,88200,88203,88205],{"class":70,"line":18091},[68,88190,53626],{"class":78},[68,88192,55368],{"class":52784},[68,88194,16447],{"class":74},[68,88196,1685],{"class":78},[68,88198,88199],{"class":1742},"\"delete\"",[68,88201,88202],{"class":78},">删除\u003C\u002F",[68,88204,55368],{"class":52784},[68,88206,52791],{"class":78},[68,88208,88209,88211,88213,88215,88217,88220,88223,88225],{"class":70,"line":18097},[68,88210,53626],{"class":78},[68,88212,55368],{"class":52784},[68,88214,16447],{"class":74},[68,88216,1685],{"class":78},[68,88218,88219],{"class":1742},"\"login\"",[68,88221,88222],{"class":78},">登录\u003C\u002F",[68,88224,55368],{"class":52784},[68,88226,52791],{"class":78},[68,88228,88229,88231,88233],{"class":70,"line":18120},[68,88230,53626],{"class":78},[68,88232,53295],{"class":52784},[68,88234,52791],{"class":78},[68,88236,88237],{"class":70,"line":18126},[68,88238,88239],{"class":302},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[68,88241,88242,88244,88247,88249,88251,88253,88255,88257,88260,88262,88264],{"class":70,"line":18149},[68,88243,71562],{"class":316},[68,88245,88246],{"class":74}," Modal",[68,88248,1640],{"class":78},[68,88250,52891],{"class":6705},[68,88252,15052],{"class":316},[68,88254,71408],{"class":1742},[68,88256,13923],{"class":78},[68,88258,88259],{"class":6705},"message",[68,88261,15052],{"class":316},[68,88263,71408],{"class":1742},[68,88265,13930],{"class":78},[68,88267,88268],{"class":70,"line":18163},[68,88269,88270],{"class":302},"      \u002F\u002F 创建Model 模态框盒子\n",[68,88272,88273],{"class":70,"line":18183},[68,88274,88275],{"class":302},"      \u002F\u002F 1.1 创建div标签\n",[68,88277,88278,88280,88283,88285,88287,88289,88291,88293],{"class":70,"line":18189},[68,88279,71529],{"class":85},[68,88281,88282],{"class":78},".modalBox ",[68,88284,1685],{"class":316},[68,88286,55877],{"class":78},[68,88288,71629],{"class":74},[68,88290,1640],{"class":78},[68,88292,83408],{"class":1742},[68,88294,1646],{"class":78},[68,88296,88297],{"class":70,"line":18200},[68,88298,88299],{"class":302},"      \u002F\u002F 1.2 给div 添加类名为model\n",[68,88301,88302,88304,88307,88309],{"class":70,"line":18223},[68,88303,71529],{"class":85},[68,88305,88306],{"class":78},".modalBox.className ",[68,88308,1685],{"class":316},[68,88310,88311],{"class":1742}," 'modal'\n",[68,88313,88314],{"class":70,"line":18245},[68,88315,88316],{"class":302},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[68,88318,88319,88321,88324,88326],{"class":70,"line":18250},[68,88320,71529],{"class":85},[68,88322,88323],{"class":78},".modalBox.innerHTML ",[68,88325,1685],{"class":316},[68,88327,71646],{"class":1742},[68,88329,88330,88333,88335],{"class":70,"line":18256},[68,88331,88332],{"class":1742},"        \u003Cdiv class=\"header\">${",[68,88334,52891],{"class":78},[68,88336,88337],{"class":1742},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[68,88339,88340,88343,88345],{"class":70,"line":18270},[68,88341,88342],{"class":1742},"        \u003Cdiv class=\"body\">${",[68,88344,88259],{"class":78},[68,88346,88347],{"class":1742},"}\u003C\u002Fdiv>\n",[68,88349,88350],{"class":70,"line":18283},[68,88351,88352],{"class":1742},"      `\n",[68,88354,88355],{"class":70,"line":18288},[68,88356,88357],{"class":302},"      \u002F\u002F console.log(this.modalBox)\n",[68,88359,88360],{"class":70,"line":18302},[68,88361,3677],{"class":78},[68,88363,88364],{"class":70,"line":18307},[68,88365,88366],{"class":302},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[68,88368,88369],{"class":70,"line":18313},[68,88370,88371],{"class":302},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[68,88373,88374],{"class":70,"line":18318},[68,88375,88376],{"class":302},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[68,88378,88379,88382,88384,88386,88388,88391,88393,88395],{"class":70,"line":18332},[68,88380,88381],{"class":85},"    Modal",[68,88383,2186],{"class":78},[68,88385,87055],{"class":85},[68,88387,2186],{"class":78},[68,88389,88390],{"class":74},"open",[68,88392,15052],{"class":316},[68,88394,60396],{"class":316},[68,88396,55933],{"class":78},[68,88398,88399],{"class":70,"line":18337},[68,88400,88401],{"class":302},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[68,88403,88404,88406,88409,88411,88413,88415,88417,88420],{"class":70,"line":18342},[68,88405,59706],{"class":316},[68,88407,88408],{"class":85}," box",[68,88410,15052],{"class":316},[68,88412,55877],{"class":78},[68,88414,55880],{"class":74},[68,88416,1640],{"class":78},[68,88418,88419],{"class":1742},"'.modal'",[68,88421,1646],{"class":78},[68,88423,88424],{"class":70,"line":18356},[68,88425,88426],{"class":302},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[68,88428,88429,88432,88434,88437,88439],{"class":70,"line":18368},[68,88430,88431],{"class":78},"      box ",[68,88433,3206],{"class":316},[68,88435,88436],{"class":78}," box.",[68,88438,58484],{"class":74},[68,88440,3466],{"class":78},[68,88442,88443],{"class":70,"line":18373},[68,88444,88445],{"class":302},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[68,88447,88448],{"class":70,"line":18386},[68,88449,88450],{"class":302},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[68,88452,88453],{"class":70,"line":18391},[68,88454,88455],{"class":302},"      \u002F\u002F append可以增加对象\n",[68,88457,88458,88461,88464,88466,88469],{"class":70,"line":18396},[68,88459,88460],{"class":78},"      document.body.",[68,88462,88463],{"class":74},"append",[68,88465,1640],{"class":78},[68,88467,88468],{"class":85},"this",[68,88470,88471],{"class":78},".modalBox)\n",[68,88473,88474],{"class":70,"line":18401},[68,88475,3890],{"emptyLinePlaceholder":1567},[68,88477,88478],{"class":70,"line":18414},[68,88479,88480],{"class":302},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[68,88482,88483,88485,88488,88490,88492,88495,88497,88499,88501,88503,88506,88508],{"class":70,"line":18419},[68,88484,71529],{"class":85},[68,88486,88487],{"class":78},".modalBox.",[68,88489,55880],{"class":74},[68,88491,1640],{"class":78},[68,88493,88494],{"class":1742},"'i'",[68,88496,32310],{"class":78},[68,88498,59291],{"class":74},[68,88500,1640],{"class":78},[68,88502,59296],{"class":1742},[68,88504,88505],{"class":78},", () ",[68,88507,86198],{"class":316},[68,88509,79],{"class":78},[68,88511,88512],{"class":70,"line":34117},[68,88513,88514],{"class":302},"        \u002F\u002F 这个地方需要用到箭头函数\n",[68,88516,88517],{"class":70,"line":34123},[68,88518,88519],{"class":302},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[68,88521,88522],{"class":70,"line":34129},[68,88523,88524],{"class":302},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[68,88526,88527,88529,88531,88534],{"class":70,"line":34135},[68,88528,66204],{"class":85},[68,88530,2186],{"class":78},[68,88532,88533],{"class":74},"close",[68,88535,3466],{"class":78},[68,88537,88538],{"class":70,"line":34141},[68,88539,66293],{"class":78},[68,88541,88542],{"class":70,"line":34152},[68,88543,3677],{"class":78},[68,88545,88546],{"class":70,"line":34158},[68,88547,3890],{"emptyLinePlaceholder":1567},[68,88549,88550],{"class":70,"line":34178},[68,88551,88552],{"class":302},"    \u002F\u002F 测试一下 点击 删除按钮\n",[68,88554,88555,88557,88559,88561,88564,88566,88568,88570,88572,88574,88576],{"class":70,"line":34184},[68,88556,53889],{"class":78},[68,88558,55880],{"class":74},[68,88560,1640],{"class":78},[68,88562,88563],{"class":1742},"'#delete'",[68,88565,32310],{"class":78},[68,88567,59291],{"class":74},[68,88569,1640],{"class":78},[68,88571,59296],{"class":1742},[68,88573,88505],{"class":78},[68,88575,86198],{"class":316},[68,88577,79],{"class":78},[68,88579,88580],{"class":70,"line":34195},[68,88581,88582],{"class":302},"      \u002F\u002F 先调用Model构造函数\n",[68,88584,88585,88587,88590,88592,88594,88596,88598,88601,88603,88606],{"class":70,"line":34201},[68,88586,59706],{"class":316},[68,88588,88589],{"class":85}," del",[68,88591,15052],{"class":316},[68,88593,13066],{"class":316},[68,88595,88246],{"class":74},[68,88597,1640],{"class":78},[68,88599,88600],{"class":1742},"'温馨的提示'",[68,88602,13923],{"class":78},[68,88604,88605],{"class":1742},"'您没有删除权限操作'",[68,88607,1646],{"class":78},[68,88609,88610],{"class":70,"line":34207},[68,88611,88612],{"class":302},"      \u002F\u002F 实例对象调用open方法\n",[68,88614,88615,88618,88620],{"class":70,"line":34213},[68,88616,88617],{"class":78},"      del.",[68,88619,88390],{"class":74},[68,88621,3466],{"class":78},[68,88623,88624],{"class":70,"line":34219},[68,88625,34945],{"class":78},[68,88627,88628],{"class":70,"line":34225},[68,88629,88630],{"class":302},"    \u002F\u002F 测试一下 点击 登录按钮\n",[68,88632,88633,88635,88637,88639,88642,88644,88646,88648,88650,88652,88654],{"class":70,"line":34231},[68,88634,53889],{"class":78},[68,88636,55880],{"class":74},[68,88638,1640],{"class":78},[68,88640,88641],{"class":1742},"'#login'",[68,88643,32310],{"class":78},[68,88645,59291],{"class":74},[68,88647,1640],{"class":78},[68,88649,59296],{"class":1742},[68,88651,88505],{"class":78},[68,88653,86198],{"class":316},[68,88655,79],{"class":78},[68,88657,88658],{"class":70,"line":34237},[68,88659,88582],{"class":302},[68,88661,88662,88664,88667,88669,88671,88673,88675,88678,88680,88683],{"class":70,"line":34257},[68,88663,59706],{"class":316},[68,88665,88666],{"class":85}," log",[68,88668,15052],{"class":316},[68,88670,13066],{"class":316},[68,88672,88246],{"class":74},[68,88674,1640],{"class":78},[68,88676,88677],{"class":1742},"'友情提示'",[68,88679,13923],{"class":78},[68,88681,88682],{"class":1742},"'您还没有登录呢'",[68,88684,1646],{"class":78},[68,88686,88687],{"class":70,"line":34263},[68,88688,88612],{"class":302},[68,88690,88691,88694,88696],{"class":70,"line":34279},[68,88692,88693],{"class":78},"      log.",[68,88695,88390],{"class":74},[68,88697,3466],{"class":78},[68,88699,88700],{"class":70,"line":34285},[68,88701,34945],{"class":78},[68,88703,88704],{"class":70,"line":34299},[68,88705,88706],{"class":302},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[68,88708,88709,88711,88713,88715,88717,88719,88721,88723],{"class":70,"line":34305},[68,88710,88381],{"class":85},[68,88712,2186],{"class":78},[68,88714,87055],{"class":85},[68,88716,2186],{"class":78},[68,88718,88533],{"class":74},[68,88720,15052],{"class":316},[68,88722,60396],{"class":316},[68,88724,55933],{"class":78},[68,88726,88727,88729,88731,88733],{"class":70,"line":34320},[68,88728,71529],{"class":85},[68,88730,88487],{"class":78},[68,88732,58484],{"class":74},[68,88734,3466],{"class":78},[68,88736,88737],{"class":70,"line":34326},[68,88738,3677],{"class":78},[68,88740,88741,88743,88745],{"class":70,"line":34335},[68,88742,53899],{"class":78},[68,88744,53295],{"class":52784},[68,88746,52791],{"class":78},[68,88748,88749,88751,88753],{"class":70,"line":34341},[68,88750,53267],{"class":78},[68,88752,53282],{"class":52784},[68,88754,52791],{"class":78},[68,88756,88757],{"class":70,"line":34350},[68,88758,3890],{"emptyLinePlaceholder":1567},[68,88760,88761,88763,88765],{"class":70,"line":34356},[68,88762,53267],{"class":78},[68,88764,52119],{"class":52784},[68,88766,52791],{"class":78},[170,88768,88769],{},[801,88770],{"alt":63,"src":88771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88773,88775],{"id":88774},"_414-深浅拷贝","4.14 深浅拷贝",[19,88777,88779],{"id":88778},"_4141-浅拷贝","4.14.1 浅拷贝",[170,88781,88782],{},[801,88783],{"alt":63,"src":88784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[170,88786,88787],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[170,88789,88790],{},[801,88791],{"alt":63,"src":88792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[170,88794,88795],{},[801,88796],{"alt":63,"src":88797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[170,88799,88800],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[170,88802,88803],{},[801,88804],{"alt":63,"src":88805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[170,88807,12820],{},[170,88809,88810],{},[801,88811],{"alt":63,"src":88812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,88814,88816],{"id":88815},"_4142-深拷贝","4.14.2 深拷贝",[170,88818,88819],{},"深拷贝：拷贝的是对象，不是地址",[170,88821,88822],{},"常用的三种方法：",[263,88824,88825,88828,88831],{},[27,88826,88827],{},"通过递归实现深拷贝",[27,88829,88830],{},"lodash\u002FcloneDeep",[27,88832,88833],{},"通过JSON.stringify()实现",[245,88835,88837],{"id":88836},"_41421-递归函数","4.14.2.1 递归函数",[170,88839,88840],{},[801,88841],{"alt":63,"src":88842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[263,88844,88845],{},[27,88846,88847],{},"死递归占溢出：",[58,88849,88851],{"className":54549,"code":88850,"language":54551,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,88852,88853,88861,88869,88873,88878,88882,88887,88895],{"__ignoreMap":63},[68,88854,88855,88857,88859],{"class":70,"line":71},[68,88856,2537],{"class":78},[68,88858,53282],{"class":52784},[68,88860,52791],{"class":78},[68,88862,88863,88865,88867],{"class":70,"line":82},[68,88864,53626],{"class":78},[68,88866,53295],{"class":52784},[68,88868,52791],{"class":78},[68,88870,88871],{"class":70,"line":98},[68,88872,78620],{"class":78},[68,88874,88875],{"class":70,"line":104},[68,88876,88877],{"class":78},"      fn()\n",[68,88879,88880],{"class":70,"line":112},[68,88881,3677],{"class":78},[68,88883,88884],{"class":70,"line":124},[68,88885,88886],{"class":78},"    fn()\n",[68,88888,88889,88891,88893],{"class":70,"line":1496},[68,88890,53899],{"class":78},[68,88892,53295],{"class":52784},[68,88894,52791],{"class":78},[68,88896,88897,88899,88901],{"class":70,"line":1502},[68,88898,53267],{"class":78},[68,88900,53282],{"class":52784},[68,88902,52791],{"class":78},[263,88904,88905],{"start":82},[27,88906,88907],{},"递归函数要加判断条件：",[170,88909,88910],{},[801,88911],{"alt":63,"src":88912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[263,88914,88915],{"start":98},[27,88916,88917],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[58,88919,88921],{"className":52117,"code":88920,"language":52119,"meta":63,"style":63},"\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",[65,88922,88923,88933,88947,88951,88959,88973,88993,89005,89013,89017,89025,89037,89045,89053,89078,89090,89094,89101,89109,89117,89121],{"__ignoreMap":63},[68,88924,88925,88927,88929,88931],{"class":70,"line":71},[68,88926,52781],{"class":78},[68,88928,52785],{"class":52784},[68,88930,52788],{"class":74},[68,88932,52791],{"class":78},[68,88934,88935,88937,88939,88941,88943,88945],{"class":70,"line":82},[68,88936,2537],{"class":78},[68,88938,52119],{"class":52784},[68,88940,52800],{"class":74},[68,88942,1685],{"class":78},[68,88944,52805],{"class":1742},[68,88946,52791],{"class":78},[68,88948,88949],{"class":70,"line":98},[68,88950,3890],{"emptyLinePlaceholder":1567},[68,88952,88953,88955,88957],{"class":70,"line":104},[68,88954,2537],{"class":78},[68,88956,52818],{"class":52784},[68,88958,52791],{"class":78},[68,88960,88961,88963,88965,88967,88969,88971],{"class":70,"line":112},[68,88962,53626],{"class":78},[68,88964,52828],{"class":52784},[68,88966,52831],{"class":74},[68,88968,1685],{"class":78},[68,88970,52836],{"class":1742},[68,88972,52791],{"class":78},[68,88974,88975,88977,88979,88981,88983,88985,88987,88989,88991],{"class":70,"line":124},[68,88976,53626],{"class":78},[68,88978,52828],{"class":52784},[68,88980,16408],{"class":74},[68,88982,1685],{"class":78},[68,88984,52875],{"class":1742},[68,88986,52855],{"class":74},[68,88988,1685],{"class":78},[68,88990,52882],{"class":1742},[68,88992,52791],{"class":78},[68,88994,88995,88997,88999,89001,89003],{"class":70,"line":1496},[68,88996,53626],{"class":78},[68,88998,52891],{"class":52784},[68,89000,52894],{"class":78},[68,89002,52891],{"class":52784},[68,89004,52791],{"class":78},[68,89006,89007,89009,89011],{"class":70,"line":1502},[68,89008,53267],{"class":78},[68,89010,52818],{"class":52784},[68,89012,52791],{"class":78},[68,89014,89015],{"class":70,"line":1510},[68,89016,3890],{"emptyLinePlaceholder":1567},[68,89018,89019,89021,89023],{"class":70,"line":1521},[68,89020,2537],{"class":78},[68,89022,53282],{"class":52784},[68,89024,52791],{"class":78},[68,89026,89027,89029,89031,89033,89035],{"class":70,"line":3103},[68,89028,53626],{"class":78},[68,89030,53093],{"class":52784},[68,89032,56792],{"class":78},[68,89034,53093],{"class":52784},[68,89036,52791],{"class":78},[68,89038,89039,89041,89043],{"class":70,"line":3108},[68,89040,53626],{"class":78},[68,89042,53295],{"class":52784},[68,89044,52791],{"class":78},[68,89046,89047,89049,89051],{"class":70,"line":3114},[68,89048,71562],{"class":316},[68,89050,75250],{"class":74},[68,89052,12341],{"class":78},[68,89054,89055,89057,89059,89061,89063,89065,89067,89069,89071,89073,89076],{"class":70,"line":3119},[68,89056,57249],{"class":78},[68,89058,55880],{"class":74},[68,89060,1640],{"class":78},[68,89062,83408],{"class":1742},[68,89064,75726],{"class":78},[68,89066,1685],{"class":316},[68,89068,13066],{"class":316},[68,89070,75266],{"class":74},[68,89072,18748],{"class":78},[68,89074,89075],{"class":74},"toLocaleString",[68,89077,3466],{"class":78},[68,89079,89080,89083,89086,89088],{"class":70,"line":3133},[68,89081,89082],{"class":74},"      setTimeout",[68,89084,89085],{"class":78},"(getTime, ",[68,89087,7899],{"class":85},[68,89089,1646],{"class":78},[68,89091,89092],{"class":70,"line":3138},[68,89093,3677],{"class":78},[68,89095,89096,89099],{"class":70,"line":3144},[68,89097,89098],{"class":74},"    getTime",[68,89100,3466],{"class":78},[68,89102,89103,89105,89107],{"class":70,"line":3165},[68,89104,53899],{"class":78},[68,89106,53295],{"class":52784},[68,89108,52791],{"class":78},[68,89110,89111,89113,89115],{"class":70,"line":3170},[68,89112,53267],{"class":78},[68,89114,53282],{"class":52784},[68,89116,52791],{"class":78},[68,89118,89119],{"class":70,"line":3184},[68,89120,3890],{"emptyLinePlaceholder":1567},[68,89122,89123,89125,89127],{"class":70,"line":3189},[68,89124,53267],{"class":78},[68,89126,52119],{"class":52784},[68,89128,52791],{"class":78},[170,89130,89131],{},[801,89132],{"alt":63,"src":89133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[263,89135,89136],{"start":104},[27,89137,88827],{},[170,89139,89140],{},[801,89141],{"alt":63,"src":89142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[170,89144,89145],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[170,89147,40673],{},[170,89149,89150],{},"这个是简易版的递归函数深拷贝",[170,89152,89153],{},"一定要注意先数组再对象，因为万物皆可对象",[58,89155,89157],{"className":52117,"code":89156,"language":52119,"meta":63,"style":63},"\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",[65,89158,89159,89169,89183,89187,89195,89209,89229,89241,89249,89253,89261,89269,89279,89288,89296,89312,89316,89324,89328,89332,89344,89349,89368,89384,89389,89394,89399,89414,89419,89424,89433,89441,89458,89466,89472,89480,89485,89490,89499,89503,89507,89511,89522,89531,89541,89555,89565,89573,89581,89589,89593],{"__ignoreMap":63},[68,89160,89161,89163,89165,89167],{"class":70,"line":71},[68,89162,52781],{"class":78},[68,89164,52785],{"class":52784},[68,89166,52788],{"class":74},[68,89168,52791],{"class":78},[68,89170,89171,89173,89175,89177,89179,89181],{"class":70,"line":82},[68,89172,2537],{"class":78},[68,89174,52119],{"class":52784},[68,89176,52800],{"class":74},[68,89178,1685],{"class":78},[68,89180,52805],{"class":1742},[68,89182,52791],{"class":78},[68,89184,89185],{"class":70,"line":98},[68,89186,3890],{"emptyLinePlaceholder":1567},[68,89188,89189,89191,89193],{"class":70,"line":104},[68,89190,2537],{"class":78},[68,89192,52818],{"class":52784},[68,89194,52791],{"class":78},[68,89196,89197,89199,89201,89203,89205,89207],{"class":70,"line":112},[68,89198,53626],{"class":78},[68,89200,52828],{"class":52784},[68,89202,52831],{"class":74},[68,89204,1685],{"class":78},[68,89206,52836],{"class":1742},[68,89208,52791],{"class":78},[68,89210,89211,89213,89215,89217,89219,89221,89223,89225,89227],{"class":70,"line":124},[68,89212,53626],{"class":78},[68,89214,52828],{"class":52784},[68,89216,16408],{"class":74},[68,89218,1685],{"class":78},[68,89220,52875],{"class":1742},[68,89222,52855],{"class":74},[68,89224,1685],{"class":78},[68,89226,52882],{"class":1742},[68,89228,52791],{"class":78},[68,89230,89231,89233,89235,89237,89239],{"class":70,"line":1496},[68,89232,53626],{"class":78},[68,89234,52891],{"class":52784},[68,89236,52894],{"class":78},[68,89238,52891],{"class":52784},[68,89240,52791],{"class":78},[68,89242,89243,89245,89247],{"class":70,"line":1502},[68,89244,53267],{"class":78},[68,89246,52818],{"class":52784},[68,89248,52791],{"class":78},[68,89250,89251],{"class":70,"line":1510},[68,89252,3890],{"emptyLinePlaceholder":1567},[68,89254,89255,89257,89259],{"class":70,"line":1521},[68,89256,2537],{"class":78},[68,89258,53282],{"class":52784},[68,89260,52791],{"class":78},[68,89262,89263,89265,89267],{"class":70,"line":3103},[68,89264,53626],{"class":78},[68,89266,53295],{"class":52784},[68,89268,52791],{"class":78},[68,89270,89271,89273,89275,89277],{"class":70,"line":3108},[68,89272,12709],{"class":316},[68,89274,71449],{"class":85},[68,89276,15052],{"class":316},[68,89278,79],{"class":78},[68,89280,89281,89283,89286],{"class":70,"line":3114},[68,89282,73094],{"class":78},[68,89284,89285],{"class":1742},"'pink'",[68,89287,32950],{"class":78},[68,89289,89290,89292,89294],{"class":70,"line":3119},[68,89291,73104],{"class":78},[68,89293,2278],{"class":85},[68,89295,32950],{"class":78},[68,89297,89298,89301,89304,89306,89309],{"class":70,"line":3133},[68,89299,89300],{"class":78},"      hobby: [",[68,89302,89303],{"class":1742},"'乒乓球'",[68,89305,13923],{"class":78},[68,89307,89308],{"class":1742},"'足球'",[68,89310,89311],{"class":78},"],\n",[68,89313,89314],{"class":70,"line":3138},[68,89315,79349],{"class":78},[68,89317,89318,89321],{"class":70,"line":3144},[68,89319,89320],{"class":78},"        baby: ",[68,89322,89323],{"class":1742},"'小pink'\n",[68,89325,89326],{"class":70,"line":3165},[68,89327,53880],{"class":78},[68,89329,89330],{"class":70,"line":3170},[68,89331,3677],{"class":78},[68,89333,89334,89336,89339,89341],{"class":70,"line":3184},[68,89335,12709],{"class":316},[68,89337,89338],{"class":85}," o",[68,89340,15052],{"class":316},[68,89342,89343],{"class":78}," {}\n",[68,89345,89346],{"class":70,"line":3189},[68,89347,89348],{"class":302},"    \u002F\u002F 拷贝函数\n",[68,89350,89351,89353,89356,89358,89361,89363,89366],{"class":70,"line":3218},[68,89352,71562],{"class":316},[68,89354,89355],{"class":74}," deepCopy",[68,89357,1640],{"class":78},[68,89359,89360],{"class":6705},"newObj",[68,89362,13923],{"class":78},[68,89364,89365],{"class":6705},"oldObj",[68,89367,13930],{"class":78},[68,89369,89370,89372,89374,89376,89379,89381],{"class":70,"line":3223},[68,89371,53766],{"class":316},[68,89373,3149],{"class":78},[68,89375,53329],{"class":316},[68,89377,89378],{"class":78}," k ",[68,89380,27529],{"class":316},[68,89382,89383],{"class":78}," oldObj) {\n",[68,89385,89386],{"class":70,"line":3240},[68,89387,89388],{"class":302},"        \u002F\u002F 处理数组的问题\n",[68,89390,89391],{"class":70,"line":3245},[68,89392,89393],{"class":302},"        \u002F\u002F 判断是否属于数组\n",[68,89395,89396],{"class":70,"line":3250},[68,89397,89398],{"class":302},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[68,89400,89401,89403,89406,89409,89412],{"class":70,"line":3255},[68,89402,3987],{"class":316},[68,89404,89405],{"class":78}," (oldObj[k] ",[68,89407,89408],{"class":316},"instanceof",[68,89410,89411],{"class":74}," Array",[68,89413,13930],{"class":78},[68,89415,89416],{"class":70,"line":3269},[68,89417,89418],{"class":302},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[68,89420,89421],{"class":70,"line":3274},[68,89422,89423],{"class":302},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[68,89425,89426,89429,89431],{"class":70,"line":4067},[68,89427,89428],{"class":78},"          newObj[k] ",[68,89430,1685],{"class":316},[68,89432,53320],{"class":78},[68,89434,89435,89438],{"class":70,"line":4081},[68,89436,89437],{"class":74},"          deepCopy",[68,89439,89440],{"class":78},"(newObj[k], oldObj[k])\n",[68,89442,89443,89445,89447,89449,89451,89453,89456],{"class":70,"line":4089},[68,89444,81557],{"class":78},[68,89446,3192],{"class":316},[68,89448,3195],{"class":316},[68,89450,89405],{"class":78},[68,89452,89408],{"class":316},[68,89454,89455],{"class":74}," Object",[68,89457,13930],{"class":78},[68,89459,89460,89462,89464],{"class":70,"line":4094},[68,89461,89428],{"class":78},[68,89463,1685],{"class":316},[68,89465,89343],{"class":78},[68,89467,89468,89470],{"class":70,"line":4100},[68,89469,89437],{"class":74},[68,89471,89440],{"class":78},[68,89473,89474,89476,89478],{"class":70,"line":4106},[68,89475,81557],{"class":78},[68,89477,3192],{"class":316},[68,89479,79],{"class":78},[68,89481,89482],{"class":70,"line":4111},[68,89483,89484],{"class":302},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[68,89486,89487],{"class":70,"line":9437},[68,89488,89489],{"class":302},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[68,89491,89492,89494,89496],{"class":70,"line":9461},[68,89493,89428],{"class":78},[68,89495,1685],{"class":316},[68,89497,89498],{"class":78}," oldObj[k]\n",[68,89500,89501],{"class":70,"line":9466},[68,89502,4019],{"class":78},[68,89504,89505],{"class":70,"line":9472},[68,89506,53880],{"class":78},[68,89508,89509],{"class":70,"line":9499},[68,89510,3677],{"class":78},[68,89512,89513,89516,89519],{"class":70,"line":9504},[68,89514,89515],{"class":74},"    deepCopy",[68,89517,89518],{"class":78},"(o, obj) ",[68,89520,89521],{"class":302},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[68,89523,89524,89526,89528],{"class":70,"line":9510},[68,89525,75230],{"class":78},[68,89527,59725],{"class":74},[68,89529,89530],{"class":78},"(o)\n",[68,89532,89533,89536,89538],{"class":70,"line":9522},[68,89534,89535],{"class":78},"    o.age ",[68,89537,1685],{"class":316},[68,89539,89540],{"class":85}," 20\n",[68,89542,89543,89546,89548,89550,89552],{"class":70,"line":9534},[68,89544,89545],{"class":78},"    o.hobby[",[68,89547,1248],{"class":85},[68,89549,5933],{"class":78},[68,89551,1685],{"class":316},[68,89553,89554],{"class":1742}," '篮球'\n",[68,89556,89557,89560,89562],{"class":70,"line":9546},[68,89558,89559],{"class":78},"    o.family ",[68,89561,1685],{"class":316},[68,89563,89564],{"class":1742}," '老pink'\n",[68,89566,89567,89569,89571],{"class":70,"line":11204},[68,89568,75230],{"class":78},[68,89570,59725],{"class":74},[68,89572,71514],{"class":78},[68,89574,89575,89577,89579],{"class":70,"line":11229},[68,89576,53899],{"class":78},[68,89578,53295],{"class":52784},[68,89580,52791],{"class":78},[68,89582,89583,89585,89587],{"class":70,"line":11252},[68,89584,53267],{"class":78},[68,89586,53282],{"class":52784},[68,89588,52791],{"class":78},[68,89590,89591],{"class":70,"line":11276},[68,89592,3890],{"emptyLinePlaceholder":1567},[68,89594,89595,89597,89599],{"class":70,"line":11281},[68,89596,53267],{"class":78},[68,89598,52119],{"class":52784},[68,89600,52791],{"class":78},[170,89602,89603],{},[801,89604],{"alt":63,"src":89605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[245,89607,89609,89610],{"id":89608},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[268,89611,89612],{},"js库lodash里面cloneDeep内部实现了深拷贝",[170,89614,89615],{},[1867,89616,89617],{"href":89617,"rel":89618},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25350],[170,89620,89621],{},"lodash里边的方法都要加上一个下划线_",[170,89623,89624],{},"_.cloneDeep()",[58,89626,89628],{"className":52117,"code":89627,"language":52119,"meta":63,"style":63},"\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",[65,89629,89630,89640,89654,89658,89666,89680,89700,89712,89720,89724,89732,89737,89756,89764,89774,89782,89790,89802,89806,89812,89816,89820,89836,89844,89853,89861,89869,89877,89881],{"__ignoreMap":63},[68,89631,89632,89634,89636,89638],{"class":70,"line":71},[68,89633,52781],{"class":78},[68,89635,52785],{"class":52784},[68,89637,52788],{"class":74},[68,89639,52791],{"class":78},[68,89641,89642,89644,89646,89648,89650,89652],{"class":70,"line":82},[68,89643,2537],{"class":78},[68,89645,52119],{"class":52784},[68,89647,52800],{"class":74},[68,89649,1685],{"class":78},[68,89651,52805],{"class":1742},[68,89653,52791],{"class":78},[68,89655,89656],{"class":70,"line":98},[68,89657,3890],{"emptyLinePlaceholder":1567},[68,89659,89660,89662,89664],{"class":70,"line":104},[68,89661,2537],{"class":78},[68,89663,52818],{"class":52784},[68,89665,52791],{"class":78},[68,89667,89668,89670,89672,89674,89676,89678],{"class":70,"line":112},[68,89669,53626],{"class":78},[68,89671,52828],{"class":52784},[68,89673,52831],{"class":74},[68,89675,1685],{"class":78},[68,89677,52836],{"class":1742},[68,89679,52791],{"class":78},[68,89681,89682,89684,89686,89688,89690,89692,89694,89696,89698],{"class":70,"line":124},[68,89683,53626],{"class":78},[68,89685,52828],{"class":52784},[68,89687,16408],{"class":74},[68,89689,1685],{"class":78},[68,89691,52875],{"class":1742},[68,89693,52855],{"class":74},[68,89695,1685],{"class":78},[68,89697,52882],{"class":1742},[68,89699,52791],{"class":78},[68,89701,89702,89704,89706,89708,89710],{"class":70,"line":1496},[68,89703,53626],{"class":78},[68,89705,52891],{"class":52784},[68,89707,52894],{"class":78},[68,89709,52891],{"class":52784},[68,89711,52791],{"class":78},[68,89713,89714,89716,89718],{"class":70,"line":1502},[68,89715,53267],{"class":78},[68,89717,52818],{"class":52784},[68,89719,52791],{"class":78},[68,89721,89722],{"class":70,"line":1510},[68,89723,3890],{"emptyLinePlaceholder":1567},[68,89725,89726,89728,89730],{"class":70,"line":1521},[68,89727,2537],{"class":78},[68,89729,53282],{"class":52784},[68,89731,52791],{"class":78},[68,89733,89734],{"class":70,"line":3103},[68,89735,89736],{"class":302},"  \u003C!-- 先引用这个库 -->\n",[68,89738,89739,89741,89743,89745,89747,89750,89752,89754],{"class":70,"line":3108},[68,89740,53626],{"class":78},[68,89742,53295],{"class":52784},[68,89744,56717],{"class":74},[68,89746,1685],{"class":78},[68,89748,89749],{"class":1742},"\"lodash.min.js\"",[68,89751,56792],{"class":78},[68,89753,53295],{"class":52784},[68,89755,52791],{"class":78},[68,89757,89758,89760,89762],{"class":70,"line":3114},[68,89759,53626],{"class":78},[68,89761,53295],{"class":52784},[68,89763,52791],{"class":78},[68,89765,89766,89768,89770,89772],{"class":70,"line":3119},[68,89767,12709],{"class":316},[68,89769,71449],{"class":85},[68,89771,15052],{"class":316},[68,89773,79],{"class":78},[68,89775,89776,89778,89780],{"class":70,"line":3133},[68,89777,73094],{"class":78},[68,89779,89285],{"class":1742},[68,89781,32950],{"class":78},[68,89783,89784,89786,89788],{"class":70,"line":3138},[68,89785,73104],{"class":78},[68,89787,2278],{"class":85},[68,89789,32950],{"class":78},[68,89791,89792,89794,89796,89798,89800],{"class":70,"line":3144},[68,89793,89300],{"class":78},[68,89795,89303],{"class":1742},[68,89797,13923],{"class":78},[68,89799,89308],{"class":1742},[68,89801,89311],{"class":78},[68,89803,89804],{"class":70,"line":3165},[68,89805,79349],{"class":78},[68,89807,89808,89810],{"class":70,"line":3170},[68,89809,89320],{"class":78},[68,89811,89323],{"class":1742},[68,89813,89814],{"class":70,"line":3184},[68,89815,53880],{"class":78},[68,89817,89818],{"class":70,"line":3189},[68,89819,3677],{"class":78},[68,89821,89822,89824,89826,89828,89831,89834],{"class":70,"line":3218},[68,89823,12709],{"class":316},[68,89825,89338],{"class":85},[68,89827,15052],{"class":316},[68,89829,89830],{"class":78}," _.",[68,89832,89833],{"class":74},"cloneDeep",[68,89835,71514],{"class":78},[68,89837,89838,89840,89842],{"class":70,"line":3223},[68,89839,75230],{"class":78},[68,89841,59725],{"class":74},[68,89843,89530],{"class":78},[68,89845,89846,89849,89851],{"class":70,"line":3240},[68,89847,89848],{"class":78},"    o.family.baby ",[68,89850,1685],{"class":316},[68,89852,89564],{"class":1742},[68,89854,89855,89857,89859],{"class":70,"line":3245},[68,89856,75230],{"class":78},[68,89858,59725],{"class":74},[68,89860,71514],{"class":78},[68,89862,89863,89865,89867],{"class":70,"line":3250},[68,89864,53899],{"class":78},[68,89866,53295],{"class":52784},[68,89868,52791],{"class":78},[68,89870,89871,89873,89875],{"class":70,"line":3255},[68,89872,53267],{"class":78},[68,89874,53282],{"class":52784},[68,89876,52791],{"class":78},[68,89878,89879],{"class":70,"line":3269},[68,89880,3890],{"emptyLinePlaceholder":1567},[68,89882,89883,89885,89887],{"class":70,"line":3274},[68,89884,53267],{"class":78},[68,89886,52119],{"class":52784},[68,89888,52791],{"class":78},[170,89890,89891],{},[801,89892],{"alt":63,"src":89893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[245,89895,89897],{"id":89896},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[58,89899,89901],{"className":52117,"code":89900,"language":52119,"meta":63,"style":63},"\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",[65,89902,89903,89913,89927,89931,89939,89953,89973,89985,89993,89997,90005,90013,90023,90031,90039,90051,90055,90061,90065,90069,90074,90079,90084,90110,90118,90127,90135,90143,90151,90155],{"__ignoreMap":63},[68,89904,89905,89907,89909,89911],{"class":70,"line":71},[68,89906,52781],{"class":78},[68,89908,52785],{"class":52784},[68,89910,52788],{"class":74},[68,89912,52791],{"class":78},[68,89914,89915,89917,89919,89921,89923,89925],{"class":70,"line":82},[68,89916,2537],{"class":78},[68,89918,52119],{"class":52784},[68,89920,52800],{"class":74},[68,89922,1685],{"class":78},[68,89924,52805],{"class":1742},[68,89926,52791],{"class":78},[68,89928,89929],{"class":70,"line":98},[68,89930,3890],{"emptyLinePlaceholder":1567},[68,89932,89933,89935,89937],{"class":70,"line":104},[68,89934,2537],{"class":78},[68,89936,52818],{"class":52784},[68,89938,52791],{"class":78},[68,89940,89941,89943,89945,89947,89949,89951],{"class":70,"line":112},[68,89942,53626],{"class":78},[68,89944,52828],{"class":52784},[68,89946,52831],{"class":74},[68,89948,1685],{"class":78},[68,89950,52836],{"class":1742},[68,89952,52791],{"class":78},[68,89954,89955,89957,89959,89961,89963,89965,89967,89969,89971],{"class":70,"line":124},[68,89956,53626],{"class":78},[68,89958,52828],{"class":52784},[68,89960,16408],{"class":74},[68,89962,1685],{"class":78},[68,89964,52875],{"class":1742},[68,89966,52855],{"class":74},[68,89968,1685],{"class":78},[68,89970,52882],{"class":1742},[68,89972,52791],{"class":78},[68,89974,89975,89977,89979,89981,89983],{"class":70,"line":1496},[68,89976,53626],{"class":78},[68,89978,52891],{"class":52784},[68,89980,52894],{"class":78},[68,89982,52891],{"class":52784},[68,89984,52791],{"class":78},[68,89986,89987,89989,89991],{"class":70,"line":1502},[68,89988,53267],{"class":78},[68,89990,52818],{"class":52784},[68,89992,52791],{"class":78},[68,89994,89995],{"class":70,"line":1510},[68,89996,3890],{"emptyLinePlaceholder":1567},[68,89998,89999,90001,90003],{"class":70,"line":1521},[68,90000,2537],{"class":78},[68,90002,53282],{"class":52784},[68,90004,52791],{"class":78},[68,90006,90007,90009,90011],{"class":70,"line":3103},[68,90008,53626],{"class":78},[68,90010,53295],{"class":52784},[68,90012,52791],{"class":78},[68,90014,90015,90017,90019,90021],{"class":70,"line":3108},[68,90016,12709],{"class":316},[68,90018,71449],{"class":85},[68,90020,15052],{"class":316},[68,90022,79],{"class":78},[68,90024,90025,90027,90029],{"class":70,"line":3114},[68,90026,73094],{"class":78},[68,90028,89285],{"class":1742},[68,90030,32950],{"class":78},[68,90032,90033,90035,90037],{"class":70,"line":3119},[68,90034,73104],{"class":78},[68,90036,2278],{"class":85},[68,90038,32950],{"class":78},[68,90040,90041,90043,90045,90047,90049],{"class":70,"line":3133},[68,90042,89300],{"class":78},[68,90044,89303],{"class":1742},[68,90046,13923],{"class":78},[68,90048,89308],{"class":1742},[68,90050,89311],{"class":78},[68,90052,90053],{"class":70,"line":3138},[68,90054,79349],{"class":78},[68,90056,90057,90059],{"class":70,"line":3144},[68,90058,89320],{"class":78},[68,90060,89323],{"class":1742},[68,90062,90063],{"class":70,"line":3165},[68,90064,53880],{"class":78},[68,90066,90067],{"class":70,"line":3170},[68,90068,3677],{"class":78},[68,90070,90071],{"class":70,"line":3184},[68,90072,90073],{"class":302},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[68,90075,90076],{"class":70,"line":3189},[68,90077,90078],{"class":302},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[68,90080,90081],{"class":70,"line":3218},[68,90082,90083],{"class":302},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[68,90085,90086,90088,90090,90092,90095,90097,90100,90102,90104,90106,90108],{"class":70,"line":3223},[68,90087,12709],{"class":316},[68,90089,89338],{"class":85},[68,90091,15052],{"class":316},[68,90093,90094],{"class":85}," JSON",[68,90096,2186],{"class":78},[68,90098,90099],{"class":74},"parse",[68,90101,1640],{"class":78},[68,90103,73142],{"class":85},[68,90105,2186],{"class":78},[68,90107,73147],{"class":74},[68,90109,73150],{"class":78},[68,90111,90112,90114,90116],{"class":70,"line":3240},[68,90113,75230],{"class":78},[68,90115,59725],{"class":74},[68,90117,89530],{"class":78},[68,90119,90120,90122,90124],{"class":70,"line":3245},[68,90121,89848],{"class":78},[68,90123,1685],{"class":316},[68,90125,90126],{"class":1742}," '123'\n",[68,90128,90129,90131,90133],{"class":70,"line":3250},[68,90130,75230],{"class":78},[68,90132,59725],{"class":74},[68,90134,71514],{"class":78},[68,90136,90137,90139,90141],{"class":70,"line":3255},[68,90138,53899],{"class":78},[68,90140,53295],{"class":52784},[68,90142,52791],{"class":78},[68,90144,90145,90147,90149],{"class":70,"line":3269},[68,90146,53267],{"class":78},[68,90148,53282],{"class":52784},[68,90150,52791],{"class":78},[68,90152,90153],{"class":70,"line":3274},[68,90154,3890],{"emptyLinePlaceholder":1567},[68,90156,90157,90159,90161],{"class":70,"line":4067},[68,90158,53267],{"class":78},[68,90160,52119],{"class":52784},[68,90162,52791],{"class":78},[170,90164,90165],{},[801,90166],{"alt":63,"src":90167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90169,90171],{"id":90170},"_415-异常处理","4.15 异常处理",[263,90173,90174],{},[27,90175,90176],{},"throw抛异常",[170,90178,90179],{},[801,90180],{"alt":63,"src":90181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[263,90183,90184],{"start":82},[27,90185,90186],{},"try\u002Fcatch 捕获错误信息",[170,90188,90189],{},[801,90190],{"alt":63,"src":90191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[58,90193,90195],{"className":52117,"code":90194,"language":52119,"meta":63,"style":63},"\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",[65,90196,90197,90207,90221,90225,90233,90247,90267,90279,90287,90291,90299,90311,90319,90328,90335,90340,90359,90368,90379,90384,90394,90399,90404,90409,90426,90430,90435,90442,90454,90458,90470,90474,90478,90483,90488,90495,90503,90511,90515],{"__ignoreMap":63},[68,90198,90199,90201,90203,90205],{"class":70,"line":71},[68,90200,52781],{"class":78},[68,90202,52785],{"class":52784},[68,90204,52788],{"class":74},[68,90206,52791],{"class":78},[68,90208,90209,90211,90213,90215,90217,90219],{"class":70,"line":82},[68,90210,2537],{"class":78},[68,90212,52119],{"class":52784},[68,90214,52800],{"class":74},[68,90216,1685],{"class":78},[68,90218,52805],{"class":1742},[68,90220,52791],{"class":78},[68,90222,90223],{"class":70,"line":98},[68,90224,3890],{"emptyLinePlaceholder":1567},[68,90226,90227,90229,90231],{"class":70,"line":104},[68,90228,2537],{"class":78},[68,90230,52818],{"class":52784},[68,90232,52791],{"class":78},[68,90234,90235,90237,90239,90241,90243,90245],{"class":70,"line":112},[68,90236,53626],{"class":78},[68,90238,52828],{"class":52784},[68,90240,52831],{"class":74},[68,90242,1685],{"class":78},[68,90244,52836],{"class":1742},[68,90246,52791],{"class":78},[68,90248,90249,90251,90253,90255,90257,90259,90261,90263,90265],{"class":70,"line":124},[68,90250,53626],{"class":78},[68,90252,52828],{"class":52784},[68,90254,16408],{"class":74},[68,90256,1685],{"class":78},[68,90258,52875],{"class":1742},[68,90260,52855],{"class":74},[68,90262,1685],{"class":78},[68,90264,52882],{"class":1742},[68,90266,52791],{"class":78},[68,90268,90269,90271,90273,90275,90277],{"class":70,"line":1496},[68,90270,53626],{"class":78},[68,90272,52891],{"class":52784},[68,90274,52894],{"class":78},[68,90276,52891],{"class":52784},[68,90278,52791],{"class":78},[68,90280,90281,90283,90285],{"class":70,"line":1502},[68,90282,53267],{"class":78},[68,90284,52818],{"class":52784},[68,90286,52791],{"class":78},[68,90288,90289],{"class":70,"line":1510},[68,90290,3890],{"emptyLinePlaceholder":1567},[68,90292,90293,90295,90297],{"class":70,"line":1521},[68,90294,2537],{"class":78},[68,90296,53282],{"class":52784},[68,90298,52791],{"class":78},[68,90300,90301,90303,90305,90307,90309],{"class":70,"line":3103},[68,90302,53626],{"class":78},[68,90304,170],{"class":52784},[68,90306,54976],{"class":78},[68,90308,170],{"class":52784},[68,90310,52791],{"class":78},[68,90312,90313,90315,90317],{"class":70,"line":3108},[68,90314,53626],{"class":78},[68,90316,53295],{"class":52784},[68,90318,52791],{"class":78},[68,90320,90321,90323,90326],{"class":70,"line":3114},[68,90322,71562],{"class":316},[68,90324,90325],{"class":74}," fn",[68,90327,12341],{"class":78},[68,90329,90330,90333],{"class":70,"line":3119},[68,90331,90332],{"class":316},"      try",[68,90334,79],{"class":78},[68,90336,90337],{"class":70,"line":3133},[68,90338,90339],{"class":302},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[68,90341,90342,90344,90346,90348,90350,90352,90354,90357],{"class":70,"line":3138},[68,90343,62748],{"class":316},[68,90345,8314],{"class":85},[68,90347,15052],{"class":316},[68,90349,55877],{"class":78},[68,90351,55880],{"class":74},[68,90353,1640],{"class":78},[68,90355,90356],{"class":1742},"'.p'",[68,90358,1646],{"class":78},[68,90360,90361,90364,90366],{"class":70,"line":3144},[68,90362,90363],{"class":78},"        p.style.color ",[68,90365,1685],{"class":316},[68,90367,68529],{"class":1742},[68,90369,90370,90373,90376],{"class":70,"line":3165},[68,90371,90372],{"class":78},"      } ",[68,90374,90375],{"class":316},"catch",[68,90377,90378],{"class":78}," (err) {\n",[68,90380,90381],{"class":70,"line":3170},[68,90382,90383],{"class":302},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[68,90385,90386,90389,90391],{"class":70,"line":3184},[68,90387,90388],{"class":78},"        console.",[68,90390,59725],{"class":74},[68,90392,90393],{"class":78},"(err.message)\n",[68,90395,90396],{"class":70,"line":3189},[68,90397,90398],{"class":302},"        \u002F\u002F 想要中断程序，需要加return\n",[68,90400,90401],{"class":70,"line":3218},[68,90402,90403],{"class":302},"        \u002F\u002F return\n",[68,90405,90406],{"class":70,"line":3223},[68,90407,90408],{"class":302},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[68,90410,90411,90414,90416,90419,90421,90424],{"class":70,"line":3240},[68,90412,90413],{"class":316},"        throw",[68,90415,13066],{"class":316},[68,90417,90418],{"class":74}," Error",[68,90420,1640],{"class":78},[68,90422,90423],{"class":1742},"'你看看，选择器错误了吧'",[68,90425,1646],{"class":78},[68,90427,90428],{"class":70,"line":3245},[68,90429,53880],{"class":78},[68,90431,90432],{"class":70,"line":3250},[68,90433,90434],{"class":302},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[68,90436,90437,90440],{"class":70,"line":3255},[68,90438,90439],{"class":316},"      finally",[68,90441,79],{"class":78},[68,90443,90444,90447,90449,90452],{"class":70,"line":3269},[68,90445,90446],{"class":74},"        alert",[68,90448,1640],{"class":78},[68,90450,90451],{"class":1742},"'弹出对话框'",[68,90453,1646],{"class":78},[68,90455,90456],{"class":70,"line":3274},[68,90457,53880],{"class":78},[68,90459,90460,90462,90464,90466,90468],{"class":70,"line":4067},[68,90461,59722],{"class":78},[68,90463,59725],{"class":74},[68,90465,1640],{"class":78},[68,90467,2100],{"class":85},[68,90469,1646],{"class":78},[68,90471,90472],{"class":70,"line":4081},[68,90473,3890],{"emptyLinePlaceholder":1567},[68,90475,90476],{"class":70,"line":4089},[68,90477,3677],{"class":78},[68,90479,90480],{"class":70,"line":4094},[68,90481,90482],{"class":302},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[68,90484,90485],{"class":70,"line":4100},[68,90486,90487],{"class":302},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[68,90489,90490,90493],{"class":70,"line":4106},[68,90491,90492],{"class":74},"    fn",[68,90494,3466],{"class":78},[68,90496,90497,90499,90501],{"class":70,"line":4111},[68,90498,53899],{"class":78},[68,90500,53295],{"class":52784},[68,90502,52791],{"class":78},[68,90504,90505,90507,90509],{"class":70,"line":9437},[68,90506,53267],{"class":78},[68,90508,53282],{"class":52784},[68,90510,52791],{"class":78},[68,90512,90513],{"class":70,"line":9461},[68,90514,3890],{"emptyLinePlaceholder":1567},[68,90516,90517,90519,90521],{"class":70,"line":9466},[68,90518,53267],{"class":78},[68,90520,52119],{"class":52784},[68,90522,52791],{"class":78},[170,90524,90525],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[263,90527,90528],{"start":98},[27,90529,90530],{},"debugger",[170,90532,90533],{},[801,90534],{"alt":63,"src":90535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[170,90537,90538],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90540,90542],{"id":90541},"_416-处理this","4.16 处理this",[19,90544,90546],{"id":90545},"_4161-this的指向","4.16.1 this的指向",[263,90548,90549],{},[27,90550,90551],{},"普通函数的this",[170,90553,90554],{},[801,90555],{"alt":63,"src":90556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[263,90558,90559],{"start":82},[27,90560,90561],{},"箭头函数的this",[170,90563,90564],{},[801,90565],{"alt":63,"src":90566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[170,90568,90569],{},[801,90570],{"alt":63,"src":90571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[170,90573,90574],{},[801,90575],{"alt":63,"src":90576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,90578,90580],{"id":90579},"_4162-this的改变","4.16.2 this的改变",[170,90582,90583],{},"call() apply() bind()",[263,90585,90586],{},[27,90587,90588],{},"call()",[170,90590,90591],{},[801,90592],{"alt":63,"src":90593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[170,90595,90596],{},"两个作用：①调用函数；②改变this指向",[58,90598,90600],{"className":54549,"code":90599,"language":54551,"meta":63,"style":63},"\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",[65,90601,90602,90610,90618,90622,90627,90631,90636,90641,90646,90650,90655,90663],{"__ignoreMap":63},[68,90603,90604,90606,90608],{"class":70,"line":71},[68,90605,2537],{"class":78},[68,90607,53282],{"class":52784},[68,90609,52791],{"class":78},[68,90611,90612,90614,90616],{"class":70,"line":82},[68,90613,53626],{"class":78},[68,90615,53295],{"class":52784},[68,90617,52791],{"class":78},[68,90619,90620],{"class":70,"line":98},[68,90621,73001],{"class":78},[68,90623,90624],{"class":70,"line":104},[68,90625,90626],{"class":78},"      uname: 'pink'\n",[68,90628,90629],{"class":70,"line":112},[68,90630,3677],{"class":78},[68,90632,90633],{"class":70,"line":124},[68,90634,90635],{"class":78},"    function fn(x, y) {\n",[68,90637,90638],{"class":70,"line":1496},[68,90639,90640],{"class":78},"      console.log(this)  \u002F\u002Fwindow\n",[68,90642,90643],{"class":70,"line":1502},[68,90644,90645],{"class":78},"      console.log(x + y)\n",[68,90647,90648],{"class":70,"line":1510},[68,90649,3677],{"class":78},[68,90651,90652],{"class":70,"line":1521},[68,90653,90654],{"class":78},"    fn.call(obj, 1, 2)\n",[68,90656,90657,90659,90661],{"class":70,"line":3103},[68,90658,53899],{"class":78},[68,90660,53295],{"class":52784},[68,90662,52791],{"class":78},[68,90664,90665,90667,90669],{"class":70,"line":3108},[68,90666,53267],{"class":78},[68,90668,53282],{"class":52784},[68,90670,52791],{"class":78},[170,90672,90673],{},[801,90674],{"alt":63,"src":90675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[263,90677,90678],{"start":82},[27,90679,90680],{},"apply()",[170,90682,90683],{},[801,90684],{"alt":63,"src":90685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[170,90687,90596],{},[170,90689,90690],{},"call传递的是普通参数，而apply必须传递的是数组",[58,90692,90694],{"className":52117,"code":90693,"language":52119,"meta":63,"style":63},"\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",[65,90695,90696,90706,90720,90724,90732,90746,90766,90778,90786,90790,90798,90806,90816,90823,90827,90832,90848,90860,90874,90878,90883,90902,90907,90911,90916,90921,90929,90934,90956,90961,90977,90993,91005,91009,91014,91033,91041,91049,91053],{"__ignoreMap":63},[68,90697,90698,90700,90702,90704],{"class":70,"line":71},[68,90699,52781],{"class":78},[68,90701,52785],{"class":52784},[68,90703,52788],{"class":74},[68,90705,52791],{"class":78},[68,90707,90708,90710,90712,90714,90716,90718],{"class":70,"line":82},[68,90709,2537],{"class":78},[68,90711,52119],{"class":52784},[68,90713,52800],{"class":74},[68,90715,1685],{"class":78},[68,90717,52805],{"class":1742},[68,90719,52791],{"class":78},[68,90721,90722],{"class":70,"line":98},[68,90723,3890],{"emptyLinePlaceholder":1567},[68,90725,90726,90728,90730],{"class":70,"line":104},[68,90727,2537],{"class":78},[68,90729,52818],{"class":52784},[68,90731,52791],{"class":78},[68,90733,90734,90736,90738,90740,90742,90744],{"class":70,"line":112},[68,90735,53626],{"class":78},[68,90737,52828],{"class":52784},[68,90739,52831],{"class":74},[68,90741,1685],{"class":78},[68,90743,52836],{"class":1742},[68,90745,52791],{"class":78},[68,90747,90748,90750,90752,90754,90756,90758,90760,90762,90764],{"class":70,"line":124},[68,90749,53626],{"class":78},[68,90751,52828],{"class":52784},[68,90753,16408],{"class":74},[68,90755,1685],{"class":78},[68,90757,52875],{"class":1742},[68,90759,52855],{"class":74},[68,90761,1685],{"class":78},[68,90763,52882],{"class":1742},[68,90765,52791],{"class":78},[68,90767,90768,90770,90772,90774,90776],{"class":70,"line":1496},[68,90769,53626],{"class":78},[68,90771,52891],{"class":52784},[68,90773,52894],{"class":78},[68,90775,52891],{"class":52784},[68,90777,52791],{"class":78},[68,90779,90780,90782,90784],{"class":70,"line":1502},[68,90781,53267],{"class":78},[68,90783,52818],{"class":52784},[68,90785,52791],{"class":78},[68,90787,90788],{"class":70,"line":1510},[68,90789,3890],{"emptyLinePlaceholder":1567},[68,90791,90792,90794,90796],{"class":70,"line":1521},[68,90793,2537],{"class":78},[68,90795,53282],{"class":52784},[68,90797,52791],{"class":78},[68,90799,90800,90802,90804],{"class":70,"line":3103},[68,90801,53626],{"class":78},[68,90803,53295],{"class":52784},[68,90805,52791],{"class":78},[68,90807,90808,90810,90812,90814],{"class":70,"line":3108},[68,90809,12709],{"class":316},[68,90811,71449],{"class":85},[68,90813,15052],{"class":316},[68,90815,79],{"class":78},[68,90817,90818,90820],{"class":70,"line":3114},[68,90819,73104],{"class":78},[68,90821,90822],{"class":85},"18\n",[68,90824,90825],{"class":70,"line":3119},[68,90826,3677],{"class":78},[68,90828,90829],{"class":70,"line":3133},[68,90830,90831],{"class":302},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[68,90833,90834,90836,90838,90840,90842,90844,90846],{"class":70,"line":3138},[68,90835,71562],{"class":316},[68,90837,90325],{"class":74},[68,90839,1640],{"class":78},[68,90841,2447],{"class":6705},[68,90843,13923],{"class":78},[68,90845,2472],{"class":6705},[68,90847,13930],{"class":78},[68,90849,90850,90852,90854,90856,90858],{"class":70,"line":3144},[68,90851,59722],{"class":78},[68,90853,59725],{"class":74},[68,90855,1640],{"class":78},[68,90857,88468],{"class":85},[68,90859,1646],{"class":78},[68,90861,90862,90864,90866,90869,90871],{"class":70,"line":3165},[68,90863,59722],{"class":78},[68,90865,59725],{"class":74},[68,90867,90868],{"class":78},"(x ",[68,90870,2109],{"class":316},[68,90872,90873],{"class":78}," y)\n",[68,90875,90876],{"class":70,"line":3170},[68,90877,3677],{"class":78},[68,90879,90880],{"class":70,"line":3184},[68,90881,90882],{"class":302},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[68,90884,90885,90888,90891,90894,90896,90898,90900],{"class":70,"line":3189},[68,90886,90887],{"class":78},"    fn.",[68,90889,90890],{"class":74},"apply",[68,90892,90893],{"class":78},"(obj, [",[68,90895,1846],{"class":85},[68,90897,13923],{"class":78},[68,90899,1715],{"class":85},[68,90901,6147],{"class":78},[68,90903,90904],{"class":70,"line":3218},[68,90905,90906],{"class":302},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[68,90908,90909],{"class":70,"line":3223},[68,90910,3890],{"emptyLinePlaceholder":1567},[68,90912,90913],{"class":70,"line":3240},[68,90914,90915],{"class":302},"    \u002F\u002F 使用场景：求数组最大值\n",[68,90917,90918],{"class":70,"line":3245},[68,90919,90920],{"class":302},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[68,90922,90923,90926],{"class":70,"line":3250},[68,90924,90925],{"class":302},"    \u002F\u002F console.log(max)",[68,90927,90928],{"class":302},"   \u002F\u002F3\n",[68,90930,90931],{"class":70,"line":3255},[68,90932,90933],{"class":302},"    \u002F\u002F 指向空或者Math都是可以的\n",[68,90935,90936,90938,90940,90942,90944,90946,90948,90950,90952,90954],{"class":70,"line":3269},[68,90937,12709],{"class":316},[68,90939,59173],{"class":85},[68,90941,15052],{"class":316},[68,90943,53708],{"class":78},[68,90945,1940],{"class":85},[68,90947,13923],{"class":78},[68,90949,2132],{"class":85},[68,90951,13923],{"class":78},[68,90953,2163],{"class":85},[68,90955,34730],{"class":78},[68,90957,90958],{"class":70,"line":3274},[68,90959,90960],{"class":302},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[68,90962,90963,90965,90967,90969,90972,90974],{"class":70,"line":4067},[68,90964,12709],{"class":316},[68,90966,7440],{"class":85},[68,90968,15052],{"class":316},[68,90970,90971],{"class":78}," Math.max.",[68,90973,90890],{"class":74},[68,90975,90976],{"class":78},"(Math, arr)\n",[68,90978,90979,90981,90984,90986,90989,90991],{"class":70,"line":4081},[68,90980,12709],{"class":316},[68,90982,90983],{"class":85}," min",[68,90985,15052],{"class":316},[68,90987,90988],{"class":78}," Math.min.",[68,90990,90890],{"class":74},[68,90992,90976],{"class":78},[68,90994,90995,90997,90999,91002],{"class":70,"line":4089},[68,90996,75230],{"class":78},[68,90998,59725],{"class":74},[68,91000,91001],{"class":78},"(max, min)     ",[68,91003,91004],{"class":302},"\u002F\u002F100,4\n",[68,91006,91007],{"class":70,"line":4094},[68,91008,3890],{"emptyLinePlaceholder":1567},[68,91010,91011],{"class":70,"line":4100},[68,91012,91013],{"class":302},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[68,91015,91016,91018,91020,91023,91025,91027,91030],{"class":70,"line":4106},[68,91017,75230],{"class":78},[68,91019,59725],{"class":74},[68,91021,91022],{"class":78},"(Max.",[68,91024,7504],{"class":74},[68,91026,1640],{"class":78},[68,91028,91029],{"class":316},"...",[68,91031,91032],{"class":78},"arr))\n",[68,91034,91035,91037,91039],{"class":70,"line":4111},[68,91036,53899],{"class":78},[68,91038,53295],{"class":52784},[68,91040,52791],{"class":78},[68,91042,91043,91045,91047],{"class":70,"line":9437},[68,91044,53267],{"class":78},[68,91046,53282],{"class":52784},[68,91048,52791],{"class":78},[68,91050,91051],{"class":70,"line":9461},[68,91052,3890],{"emptyLinePlaceholder":1567},[68,91054,91055,91057,91059],{"class":70,"line":9466},[68,91056,53267],{"class":78},[68,91058,52119],{"class":52784},[68,91060,52791],{"class":78},[170,91062,91063],{},[801,91064],{"alt":63,"src":91065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[263,91067,91068],{"start":98},[27,91069,91070],{},"bind()",[170,91072,91073],{},[801,91074],{"alt":63,"src":91075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[170,91077,91078],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[170,91080,91081],{},"bind的语法跟call很相似",[58,91083,91085],{"className":54549,"code":91084,"language":54551,"meta":63,"style":63},"\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",[65,91086,91087,91095,91103,91107,91112,91116,91120,91125,91129,91134,91139,91144,91149,91154,91159,91164,91168,91176],{"__ignoreMap":63},[68,91088,91089,91091,91093],{"class":70,"line":71},[68,91090,2537],{"class":78},[68,91092,53282],{"class":52784},[68,91094,52791],{"class":78},[68,91096,91097,91099,91101],{"class":70,"line":82},[68,91098,53626],{"class":78},[68,91100,53295],{"class":52784},[68,91102,52791],{"class":78},[68,91104,91105],{"class":70,"line":98},[68,91106,73001],{"class":78},[68,91108,91109],{"class":70,"line":104},[68,91110,91111],{"class":78},"      age: 18\n",[68,91113,91114],{"class":70,"line":112},[68,91115,3677],{"class":78},[68,91117,91118],{"class":70,"line":124},[68,91119,78620],{"class":78},[68,91121,91122],{"class":70,"line":1496},[68,91123,91124],{"class":78},"      console.log(this)\n",[68,91126,91127],{"class":70,"line":1502},[68,91128,3677],{"class":78},[68,91130,91131],{"class":70,"line":1510},[68,91132,91133],{"class":78},"    \u002F\u002F 1.bind 不会调用函数\n",[68,91135,91136],{"class":70,"line":1521},[68,91137,91138],{"class":78},"    \u002F\u002F 2.bind能改变this的指向\n",[68,91140,91141],{"class":70,"line":3103},[68,91142,91143],{"class":78},"    fn.bind()\n",[68,91145,91146],{"class":70,"line":3108},[68,91147,91148],{"class":78},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[68,91150,91151],{"class":70,"line":3114},[68,91152,91153],{"class":78},"    const fun = fn.bind(obj)\n",[68,91155,91156],{"class":70,"line":3119},[68,91157,91158],{"class":78},"    \u002F\u002F console.log(fun)\n",[68,91160,91161],{"class":70,"line":3133},[68,91162,91163],{"class":78},"    \u002F\u002F 调用,查看this的指向\n",[68,91165,91166],{"class":70,"line":3138},[68,91167,54133],{"class":78},[68,91169,91170,91172,91174],{"class":70,"line":3144},[68,91171,53899],{"class":78},[68,91173,53295],{"class":52784},[68,91175,52791],{"class":78},[68,91177,91178,91180,91182],{"class":70,"line":3165},[68,91179,53267],{"class":78},[68,91181,53282],{"class":52784},[68,91183,52791],{"class":78},[170,91185,91186],{},[801,91187],{"alt":63,"src":91188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[263,91190,91191],{"start":104},[27,91192,91193],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[58,91195,91197],{"className":54549,"code":91196,"language":54551,"meta":63,"style":63},"\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",[65,91198,91199,91207,91220,91228,91233,91237,91242,91247,91252,91257,91262,91267,91272,91277,91281,91289],{"__ignoreMap":63},[68,91200,91201,91203,91205],{"class":70,"line":71},[68,91202,2537],{"class":78},[68,91204,53282],{"class":52784},[68,91206,52791],{"class":78},[68,91208,91209,91211,91213,91216,91218],{"class":70,"line":82},[68,91210,53626],{"class":78},[68,91212,55368],{"class":52784},[68,91214,91215],{"class":78},">禁用\u003C\u002F",[68,91217,55368],{"class":52784},[68,91219,52791],{"class":78},[68,91221,91222,91224,91226],{"class":70,"line":98},[68,91223,53626],{"class":78},[68,91225,53295],{"class":52784},[68,91227,52791],{"class":78},[68,91229,91230],{"class":70,"line":104},[68,91231,91232],{"class":78},"    const btn = document.querySelector('button')\n",[68,91234,91235],{"class":70,"line":112},[68,91236,60494],{"class":78},[68,91238,91239],{"class":70,"line":124},[68,91240,91241],{"class":78},"      this.disabled = true\n",[68,91243,91244],{"class":70,"line":1496},[68,91245,91246],{"class":78},"      \u002F\u002F 定时器是window进行调用的\n",[68,91248,91249],{"class":70,"line":1502},[68,91250,91251],{"class":78},"      setTimeout(function () {\n",[68,91253,91254],{"class":70,"line":1510},[68,91255,91256],{"class":78},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[68,91258,91259],{"class":70,"line":1521},[68,91260,91261],{"class":78},"        this.disabled = false\n",[68,91263,91264],{"class":70,"line":3103},[68,91265,91266],{"class":78},"      }.bind(this), 2000)\n",[68,91268,91269],{"class":70,"line":3108},[68,91270,91271],{"class":78},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[68,91273,91274],{"class":70,"line":3114},[68,91275,91276],{"class":78},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[68,91278,91279],{"class":70,"line":3119},[68,91280,34945],{"class":78},[68,91282,91283,91285,91287],{"class":70,"line":3133},[68,91284,53899],{"class":78},[68,91286,53295],{"class":52784},[68,91288,52791],{"class":78},[68,91290,91291,91293,91295],{"class":70,"line":3138},[68,91292,53267],{"class":78},[68,91294,53282],{"class":52784},[68,91296,52791],{"class":78},[263,91298,91299],{"start":112},[27,91300,23440],{},[170,91302,91303],{},[801,91304],{"alt":63,"src":91305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91307,91309],{"id":91308},"_417-性能优化","4.17 性能优化",[19,91311,91313],{"id":91312},"_4171-防抖","4.17.1 防抖",[170,91315,91316],{},[801,91317],{"alt":63,"src":91318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[170,91320,91321],{},[268,91322,91323],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[170,91325,91326],{},"防抖实现方式：",[24,91328,91329],{},[27,91330,91331],{},"lodash 提供了防抖处理",[170,91333,91334],{},"_.debounce(func,[wait=0],[options={}])",[170,91336,91337],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[58,91339,91341],{"className":52117,"code":91340,"language":52119,"meta":63,"style":63},"\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",[65,91342,91343,91353,91367,91371,91379,91393,91413,91425,91433,91439,91449,91461,91473,91484,91496,91506,91516,91529,91533,91541,91549,91553,91561,91579,91597,91605,91624,91634,91643,91654,91659,91663,91668,91673,91678,91703,91711,91719,91723],{"__ignoreMap":63},[68,91344,91345,91347,91349,91351],{"class":70,"line":71},[68,91346,52781],{"class":78},[68,91348,52785],{"class":52784},[68,91350,52788],{"class":74},[68,91352,52791],{"class":78},[68,91354,91355,91357,91359,91361,91363,91365],{"class":70,"line":82},[68,91356,2537],{"class":78},[68,91358,52119],{"class":52784},[68,91360,52800],{"class":74},[68,91362,1685],{"class":78},[68,91364,52805],{"class":1742},[68,91366,52791],{"class":78},[68,91368,91369],{"class":70,"line":98},[68,91370,3890],{"emptyLinePlaceholder":1567},[68,91372,91373,91375,91377],{"class":70,"line":104},[68,91374,2537],{"class":78},[68,91376,52818],{"class":52784},[68,91378,52791],{"class":78},[68,91380,91381,91383,91385,91387,91389,91391],{"class":70,"line":112},[68,91382,53626],{"class":78},[68,91384,52828],{"class":52784},[68,91386,52831],{"class":74},[68,91388,1685],{"class":78},[68,91390,52836],{"class":1742},[68,91392,52791],{"class":78},[68,91394,91395,91397,91399,91401,91403,91405,91407,91409,91411],{"class":70,"line":124},[68,91396,53626],{"class":78},[68,91398,52828],{"class":52784},[68,91400,16408],{"class":74},[68,91402,1685],{"class":78},[68,91404,52875],{"class":1742},[68,91406,52855],{"class":74},[68,91408,1685],{"class":78},[68,91410,52882],{"class":1742},[68,91412,52791],{"class":78},[68,91414,91415,91417,91419,91421,91423],{"class":70,"line":1496},[68,91416,53626],{"class":78},[68,91418,52891],{"class":52784},[68,91420,52894],{"class":78},[68,91422,52891],{"class":52784},[68,91424,52791],{"class":78},[68,91426,91427,91429,91431],{"class":70,"line":1502},[68,91428,53626],{"class":78},[68,91430,1553],{"class":52784},[68,91432,52791],{"class":78},[68,91434,91435,91437],{"class":70,"line":1510},[68,91436,56232],{"class":74},[68,91438,79],{"class":78},[68,91440,91441,91443,91445,91447],{"class":70,"line":1521},[68,91442,74073],{"class":85},[68,91444,89],{"class":78},[68,91446,61983],{"class":85},[68,91448,95],{"class":78},[68,91450,91451,91453,91455,91457,91459],{"class":70,"line":3103},[68,91452,56250],{"class":85},[68,91454,89],{"class":78},[68,91456,3213],{"class":85},[68,91458,317],{"class":316},[68,91460,95],{"class":78},[68,91462,91463,91465,91467,91469,91471],{"class":70,"line":3108},[68,91464,56264],{"class":85},[68,91466,89],{"class":78},[68,91468,3213],{"class":85},[68,91470,317],{"class":316},[68,91472,95],{"class":78},[68,91474,91475,91477,91479,91482],{"class":70,"line":3114},[68,91476,56362],{"class":85},[68,91478,89],{"class":78},[68,91480,91481],{"class":85},"gray",[68,91483,95],{"class":78},[68,91485,91486,91488,91490,91492,91494],{"class":70,"line":3119},[68,91487,56400],{"class":85},[68,91489,89],{"class":78},[68,91491,2452],{"class":85},[68,91493,317],{"class":316},[68,91495,95],{"class":78},[68,91497,91498,91500,91502,91504],{"class":70,"line":3133},[68,91499,58894],{"class":85},[68,91501,89],{"class":78},[68,91503,62320],{"class":85},[68,91505,95],{"class":78},[68,91507,91508,91510,91512,91514],{"class":70,"line":3138},[68,91509,58764],{"class":85},[68,91511,89],{"class":78},[68,91513,53074],{"class":85},[68,91515,95],{"class":78},[68,91517,91518,91521,91523,91525,91527],{"class":70,"line":3144},[68,91519,91520],{"class":85},"      padding-top",[68,91522,89],{"class":78},[68,91524,1948],{"class":85},[68,91526,317],{"class":316},[68,91528,95],{"class":78},[68,91530,91531],{"class":70,"line":3165},[68,91532,3677],{"class":78},[68,91534,91535,91537,91539],{"class":70,"line":3170},[68,91536,53899],{"class":78},[68,91538,1553],{"class":52784},[68,91540,52791],{"class":78},[68,91542,91543,91545,91547],{"class":70,"line":3184},[68,91544,53267],{"class":78},[68,91546,52818],{"class":52784},[68,91548,52791],{"class":78},[68,91550,91551],{"class":70,"line":3189},[68,91552,3890],{"emptyLinePlaceholder":1567},[68,91554,91555,91557,91559],{"class":70,"line":3218},[68,91556,2537],{"class":78},[68,91558,53282],{"class":52784},[68,91560,52791],{"class":78},[68,91562,91563,91565,91567,91569,91571,91573,91575,91577],{"class":70,"line":3223},[68,91564,53626],{"class":78},[68,91566,53093],{"class":52784},[68,91568,54968],{"class":74},[68,91570,1685],{"class":78},[68,91572,54973],{"class":1742},[68,91574,56792],{"class":78},[68,91576,53093],{"class":52784},[68,91578,52791],{"class":78},[68,91580,91581,91583,91585,91587,91589,91591,91593,91595],{"class":70,"line":3240},[68,91582,53626],{"class":78},[68,91584,53295],{"class":52784},[68,91586,56717],{"class":74},[68,91588,1685],{"class":78},[68,91590,89749],{"class":1742},[68,91592,56792],{"class":78},[68,91594,53295],{"class":52784},[68,91596,52791],{"class":78},[68,91598,91599,91601,91603],{"class":70,"line":3245},[68,91600,53626],{"class":78},[68,91602,53295],{"class":52784},[68,91604,52791],{"class":78},[68,91606,91607,91609,91611,91613,91615,91617,91619,91622],{"class":70,"line":3250},[68,91608,12709],{"class":316},[68,91610,88408],{"class":85},[68,91612,15052],{"class":316},[68,91614,55877],{"class":78},[68,91616,55880],{"class":74},[68,91618,1640],{"class":78},[68,91620,91621],{"class":1742},"'.box'",[68,91623,1646],{"class":78},[68,91625,91626,91628,91630,91632],{"class":70,"line":3255},[68,91627,53701],{"class":316},[68,91629,10926],{"class":78},[68,91631,1685],{"class":316},[68,91633,48817],{"class":85},[68,91635,91636,91638,91641],{"class":70,"line":3269},[68,91637,71562],{"class":316},[68,91639,91640],{"class":74}," mouseMove",[68,91642,12341],{"class":78},[68,91644,91645,91648,91650,91652],{"class":70,"line":3274},[68,91646,91647],{"class":78},"      box.innerHTML ",[68,91649,1685],{"class":316},[68,91651,4522],{"class":78},[68,91653,4192],{"class":316},[68,91655,91656],{"class":70,"line":4067},[68,91657,91658],{"class":302},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[68,91660,91661],{"class":70,"line":4081},[68,91662,3677],{"class":78},[68,91664,91665],{"class":70,"line":4089},[68,91666,91667],{"class":302},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[68,91669,91670],{"class":70,"line":4094},[68,91671,91672],{"class":302},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[68,91674,91675],{"class":70,"line":4100},[68,91676,91677],{"class":302},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[68,91679,91680,91683,91685,91687,91690,91693,91696,91699,91701],{"class":70,"line":4106},[68,91681,91682],{"class":78},"    box.",[68,91684,59291],{"class":74},[68,91686,1640],{"class":78},[68,91688,91689],{"class":1742},"'mousemove'",[68,91691,91692],{"class":78},", _.",[68,91694,91695],{"class":74},"debounce",[68,91697,91698],{"class":78},"(mouseMove, ",[68,91700,66552],{"class":85},[68,91702,31981],{"class":78},[68,91704,91705,91707,91709],{"class":70,"line":4111},[68,91706,53899],{"class":78},[68,91708,53295],{"class":52784},[68,91710,52791],{"class":78},[68,91712,91713,91715,91717],{"class":70,"line":9437},[68,91714,53267],{"class":78},[68,91716,53282],{"class":52784},[68,91718,52791],{"class":78},[68,91720,91721],{"class":70,"line":9461},[68,91722,3890],{"emptyLinePlaceholder":1567},[68,91724,91725,91727,91729],{"class":70,"line":9466},[68,91726,53267],{"class":78},[68,91728,52119],{"class":52784},[68,91730,52791],{"class":78},[24,91732,91733],{},[27,91734,91735],{},"手写一个防抖函数来处理",[170,91737,91738],{},"防抖的核心就是利用定时器来实现的：",[170,91740,91741],{},"①声明一个定时器变量",[170,91743,91744],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[170,91746,91747],{},"③如果没有定时器则开启定时器，记得存到变量里面",[58,91749,91751],{"className":52117,"code":91750,"language":52119,"meta":63,"style":63},"\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",[65,91752,91753,91763,91777,91781,91789,91803,91823,91835,91843,91849,91859,91871,91883,91893,91905,91915,91925,91937,91941,91949,91957,91961,91969,91987,92005,92013,92031,92041,92049,92059,92063,92067,92071,92076,92081,92086,92091,92096,92101,92119,92126,92131,92139,92144,92157,92173,92183,92188,92192,92196,92216,92220,92225,92230,92235,92240,92248,92256,92260],{"__ignoreMap":63},[68,91754,91755,91757,91759,91761],{"class":70,"line":71},[68,91756,52781],{"class":78},[68,91758,52785],{"class":52784},[68,91760,52788],{"class":74},[68,91762,52791],{"class":78},[68,91764,91765,91767,91769,91771,91773,91775],{"class":70,"line":82},[68,91766,2537],{"class":78},[68,91768,52119],{"class":52784},[68,91770,52800],{"class":74},[68,91772,1685],{"class":78},[68,91774,52805],{"class":1742},[68,91776,52791],{"class":78},[68,91778,91779],{"class":70,"line":98},[68,91780,3890],{"emptyLinePlaceholder":1567},[68,91782,91783,91785,91787],{"class":70,"line":104},[68,91784,2537],{"class":78},[68,91786,52818],{"class":52784},[68,91788,52791],{"class":78},[68,91790,91791,91793,91795,91797,91799,91801],{"class":70,"line":112},[68,91792,53626],{"class":78},[68,91794,52828],{"class":52784},[68,91796,52831],{"class":74},[68,91798,1685],{"class":78},[68,91800,52836],{"class":1742},[68,91802,52791],{"class":78},[68,91804,91805,91807,91809,91811,91813,91815,91817,91819,91821],{"class":70,"line":124},[68,91806,53626],{"class":78},[68,91808,52828],{"class":52784},[68,91810,16408],{"class":74},[68,91812,1685],{"class":78},[68,91814,52875],{"class":1742},[68,91816,52855],{"class":74},[68,91818,1685],{"class":78},[68,91820,52882],{"class":1742},[68,91822,52791],{"class":78},[68,91824,91825,91827,91829,91831,91833],{"class":70,"line":1496},[68,91826,53626],{"class":78},[68,91828,52891],{"class":52784},[68,91830,52894],{"class":78},[68,91832,52891],{"class":52784},[68,91834,52791],{"class":78},[68,91836,91837,91839,91841],{"class":70,"line":1502},[68,91838,53626],{"class":78},[68,91840,1553],{"class":52784},[68,91842,52791],{"class":78},[68,91844,91845,91847],{"class":70,"line":1510},[68,91846,56232],{"class":74},[68,91848,79],{"class":78},[68,91850,91851,91853,91855,91857],{"class":70,"line":1521},[68,91852,74073],{"class":85},[68,91854,89],{"class":78},[68,91856,61983],{"class":85},[68,91858,95],{"class":78},[68,91860,91861,91863,91865,91867,91869],{"class":70,"line":3103},[68,91862,56250],{"class":85},[68,91864,89],{"class":78},[68,91866,3213],{"class":85},[68,91868,317],{"class":316},[68,91870,95],{"class":78},[68,91872,91873,91875,91877,91879,91881],{"class":70,"line":3108},[68,91874,56264],{"class":85},[68,91876,89],{"class":78},[68,91878,3213],{"class":85},[68,91880,317],{"class":316},[68,91882,95],{"class":78},[68,91884,91885,91887,91889,91891],{"class":70,"line":3114},[68,91886,56362],{"class":85},[68,91888,89],{"class":78},[68,91890,91481],{"class":85},[68,91892,95],{"class":78},[68,91894,91895,91897,91899,91901,91903],{"class":70,"line":3119},[68,91896,56400],{"class":85},[68,91898,89],{"class":78},[68,91900,2452],{"class":85},[68,91902,317],{"class":316},[68,91904,95],{"class":78},[68,91906,91907,91909,91911,91913],{"class":70,"line":3133},[68,91908,58894],{"class":85},[68,91910,89],{"class":78},[68,91912,62320],{"class":85},[68,91914,95],{"class":78},[68,91916,91917,91919,91921,91923],{"class":70,"line":3138},[68,91918,58764],{"class":85},[68,91920,89],{"class":78},[68,91922,53074],{"class":85},[68,91924,95],{"class":78},[68,91926,91927,91929,91931,91933,91935],{"class":70,"line":3144},[68,91928,91520],{"class":85},[68,91930,89],{"class":78},[68,91932,1948],{"class":85},[68,91934,317],{"class":316},[68,91936,95],{"class":78},[68,91938,91939],{"class":70,"line":3165},[68,91940,3677],{"class":78},[68,91942,91943,91945,91947],{"class":70,"line":3170},[68,91944,53899],{"class":78},[68,91946,1553],{"class":52784},[68,91948,52791],{"class":78},[68,91950,91951,91953,91955],{"class":70,"line":3184},[68,91952,53267],{"class":78},[68,91954,52818],{"class":52784},[68,91956,52791],{"class":78},[68,91958,91959],{"class":70,"line":3189},[68,91960,3890],{"emptyLinePlaceholder":1567},[68,91962,91963,91965,91967],{"class":70,"line":3218},[68,91964,2537],{"class":78},[68,91966,53282],{"class":52784},[68,91968,52791],{"class":78},[68,91970,91971,91973,91975,91977,91979,91981,91983,91985],{"class":70,"line":3223},[68,91972,53626],{"class":78},[68,91974,53093],{"class":52784},[68,91976,54968],{"class":74},[68,91978,1685],{"class":78},[68,91980,54973],{"class":1742},[68,91982,56792],{"class":78},[68,91984,53093],{"class":52784},[68,91986,52791],{"class":78},[68,91988,91989,91991,91993,91995,91997,91999,92001,92003],{"class":70,"line":3240},[68,91990,53626],{"class":78},[68,91992,53295],{"class":52784},[68,91994,56717],{"class":74},[68,91996,1685],{"class":78},[68,91998,89749],{"class":1742},[68,92000,56792],{"class":78},[68,92002,53295],{"class":52784},[68,92004,52791],{"class":78},[68,92006,92007,92009,92011],{"class":70,"line":3245},[68,92008,53626],{"class":78},[68,92010,53295],{"class":52784},[68,92012,52791],{"class":78},[68,92014,92015,92017,92019,92021,92023,92025,92027,92029],{"class":70,"line":3250},[68,92016,12709],{"class":316},[68,92018,88408],{"class":85},[68,92020,15052],{"class":316},[68,92022,55877],{"class":78},[68,92024,55880],{"class":74},[68,92026,1640],{"class":78},[68,92028,91621],{"class":1742},[68,92030,1646],{"class":78},[68,92032,92033,92035,92037,92039],{"class":70,"line":3255},[68,92034,53701],{"class":316},[68,92036,10926],{"class":78},[68,92038,1685],{"class":316},[68,92040,48817],{"class":85},[68,92042,92043,92045,92047],{"class":70,"line":3269},[68,92044,71562],{"class":316},[68,92046,91640],{"class":74},[68,92048,12341],{"class":78},[68,92050,92051,92053,92055,92057],{"class":70,"line":3274},[68,92052,91647],{"class":78},[68,92054,1685],{"class":316},[68,92056,4522],{"class":78},[68,92058,4192],{"class":316},[68,92060,92061],{"class":70,"line":4067},[68,92062,91658],{"class":302},[68,92064,92065],{"class":70,"line":4081},[68,92066,3677],{"class":78},[68,92068,92069],{"class":70,"line":4089},[68,92070,91667],{"class":302},[68,92072,92073],{"class":70,"line":4094},[68,92074,92075],{"class":302},"    \u002F\u002F 手写防抖函数\n",[68,92077,92078],{"class":70,"line":4100},[68,92079,92080],{"class":302},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[68,92082,92083],{"class":70,"line":4106},[68,92084,92085],{"class":302},"    \u002F\u002F 1.声明定时器变量\n",[68,92087,92088],{"class":70,"line":4111},[68,92089,92090],{"class":302},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[68,92092,92093],{"class":70,"line":9437},[68,92094,92095],{"class":302},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[68,92097,92098],{"class":70,"line":9461},[68,92099,92100],{"class":302},"    \u002F\u002F 4.定时器里面写函数调用\n",[68,92102,92103,92105,92108,92110,92113,92115,92117],{"class":70,"line":9466},[68,92104,71562],{"class":316},[68,92106,92107],{"class":74}," debounce",[68,92109,1640],{"class":78},[68,92111,92112],{"class":6705},"fn",[68,92114,13923],{"class":78},[68,92116,2347],{"class":6705},[68,92118,13930],{"class":78},[68,92120,92121,92123],{"class":70,"line":9472},[68,92122,81249],{"class":316},[68,92124,92125],{"class":78}," timer\n",[68,92127,92128],{"class":70,"line":9499},[68,92129,92130],{"class":302},"      \u002F\u002F return 返回一个匿名函数\n",[68,92132,92133,92135,92137],{"class":70,"line":9504},[68,92134,75459],{"class":316},[68,92136,60396],{"class":316},[68,92138,55933],{"class":78},[68,92140,92141],{"class":70,"line":9510},[68,92142,92143],{"class":302},"        \u002F\u002F 这里边写第二三四步\n",[68,92145,92146,92148,92151,92154],{"class":70,"line":9522},[68,92147,3987],{"class":316},[68,92149,92150],{"class":78}," (timer) ",[68,92152,92153],{"class":74},"clearTimeout",[68,92155,92156],{"class":78},"(timer)\n",[68,92158,92159,92162,92164,92167,92169,92171],{"class":70,"line":9534},[68,92160,92161],{"class":78},"        timer ",[68,92163,1685],{"class":316},[68,92165,92166],{"class":74}," setTimeout",[68,92168,1640],{"class":78},[68,92170,55930],{"class":316},[68,92172,55933],{"class":78},[68,92174,92175,92178,92180],{"class":70,"line":9546},[68,92176,92177],{"class":74},"          fn",[68,92179,14538],{"class":78},[68,92181,92182],{"class":302},"\u002F\u002F加小括号调用fn }, t)\n",[68,92184,92185],{"class":70,"line":11204},[68,92186,92187],{"class":78},"        }, t)\n",[68,92189,92190],{"class":70,"line":11229},[68,92191,53880],{"class":78},[68,92193,92194],{"class":70,"line":11252},[68,92195,3677],{"class":78},[68,92197,92198,92200,92202,92204,92206,92208,92210,92212,92214],{"class":70,"line":11276},[68,92199,91682],{"class":78},[68,92201,59291],{"class":74},[68,92203,1640],{"class":78},[68,92205,91689],{"class":1742},[68,92207,13923],{"class":78},[68,92209,91695],{"class":74},[68,92211,91698],{"class":78},[68,92213,66552],{"class":85},[68,92215,31981],{"class":78},[68,92217,92218],{"class":70,"line":11281},[68,92219,3890],{"emptyLinePlaceholder":1567},[68,92221,92222],{"class":70,"line":11286},[68,92223,92224],{"class":302},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[68,92226,92227],{"class":70,"line":11291},[68,92228,92229],{"class":302},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[68,92231,92232],{"class":70,"line":11300},[68,92233,92234],{"class":302},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[68,92236,92237],{"class":70,"line":11305},[68,92238,92239],{"class":302},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[68,92241,92242,92244,92246],{"class":70,"line":11311},[68,92243,53899],{"class":78},[68,92245,53295],{"class":52784},[68,92247,52791],{"class":78},[68,92249,92250,92252,92254],{"class":70,"line":11332},[68,92251,53267],{"class":78},[68,92253,53282],{"class":52784},[68,92255,52791],{"class":78},[68,92257,92258],{"class":70,"line":11338},[68,92259,3890],{"emptyLinePlaceholder":1567},[68,92261,92262,92264,92266],{"class":70,"line":11352},[68,92263,53267],{"class":78},[68,92265,52119],{"class":52784},[68,92267,52791],{"class":78},[19,92269,92271],{"id":92270},"_4172-节流","4.17.2 节流",[170,92273,92274],{},[801,92275],{"alt":63,"src":92276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[170,92278,92279],{},[801,92280],{"alt":63,"src":92281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[170,92283,92284],{},[268,92285,92286],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[170,92288,92289],{},"实现方式：",[24,92291,92292],{},[27,92293,92294],{},"lodash 提供的节流函数来处理",[170,92296,92297],{},"_.throttle(func,[wait=0],[options=])",[170,92299,92300],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[58,92302,92304],{"className":52117,"code":92303,"language":52119,"meta":63,"style":63},"\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",[65,92305,92306,92316,92330,92334,92342,92356,92376,92388,92396,92402,92412,92424,92436,92446,92458,92468,92478,92490,92494,92502,92510,92514,92522,92540,92558,92566,92584,92594,92602,92612,92616,92620,92624,92629,92634,92655,92663,92671,92675],{"__ignoreMap":63},[68,92307,92308,92310,92312,92314],{"class":70,"line":71},[68,92309,52781],{"class":78},[68,92311,52785],{"class":52784},[68,92313,52788],{"class":74},[68,92315,52791],{"class":78},[68,92317,92318,92320,92322,92324,92326,92328],{"class":70,"line":82},[68,92319,2537],{"class":78},[68,92321,52119],{"class":52784},[68,92323,52800],{"class":74},[68,92325,1685],{"class":78},[68,92327,52805],{"class":1742},[68,92329,52791],{"class":78},[68,92331,92332],{"class":70,"line":98},[68,92333,3890],{"emptyLinePlaceholder":1567},[68,92335,92336,92338,92340],{"class":70,"line":104},[68,92337,2537],{"class":78},[68,92339,52818],{"class":52784},[68,92341,52791],{"class":78},[68,92343,92344,92346,92348,92350,92352,92354],{"class":70,"line":112},[68,92345,53626],{"class":78},[68,92347,52828],{"class":52784},[68,92349,52831],{"class":74},[68,92351,1685],{"class":78},[68,92353,52836],{"class":1742},[68,92355,52791],{"class":78},[68,92357,92358,92360,92362,92364,92366,92368,92370,92372,92374],{"class":70,"line":124},[68,92359,53626],{"class":78},[68,92361,52828],{"class":52784},[68,92363,16408],{"class":74},[68,92365,1685],{"class":78},[68,92367,52875],{"class":1742},[68,92369,52855],{"class":74},[68,92371,1685],{"class":78},[68,92373,52882],{"class":1742},[68,92375,52791],{"class":78},[68,92377,92378,92380,92382,92384,92386],{"class":70,"line":1496},[68,92379,53626],{"class":78},[68,92381,52891],{"class":52784},[68,92383,52894],{"class":78},[68,92385,52891],{"class":52784},[68,92387,52791],{"class":78},[68,92389,92390,92392,92394],{"class":70,"line":1502},[68,92391,53626],{"class":78},[68,92393,1553],{"class":52784},[68,92395,52791],{"class":78},[68,92397,92398,92400],{"class":70,"line":1510},[68,92399,56232],{"class":74},[68,92401,79],{"class":78},[68,92403,92404,92406,92408,92410],{"class":70,"line":1521},[68,92405,74073],{"class":85},[68,92407,89],{"class":78},[68,92409,61983],{"class":85},[68,92411,95],{"class":78},[68,92413,92414,92416,92418,92420,92422],{"class":70,"line":3103},[68,92415,56250],{"class":85},[68,92417,89],{"class":78},[68,92419,3213],{"class":85},[68,92421,317],{"class":316},[68,92423,95],{"class":78},[68,92425,92426,92428,92430,92432,92434],{"class":70,"line":3108},[68,92427,56264],{"class":85},[68,92429,89],{"class":78},[68,92431,3213],{"class":85},[68,92433,317],{"class":316},[68,92435,95],{"class":78},[68,92437,92438,92440,92442,92444],{"class":70,"line":3114},[68,92439,56362],{"class":85},[68,92441,89],{"class":78},[68,92443,91481],{"class":85},[68,92445,95],{"class":78},[68,92447,92448,92450,92452,92454,92456],{"class":70,"line":3119},[68,92449,56400],{"class":85},[68,92451,89],{"class":78},[68,92453,2452],{"class":85},[68,92455,317],{"class":316},[68,92457,95],{"class":78},[68,92459,92460,92462,92464,92466],{"class":70,"line":3133},[68,92461,58894],{"class":85},[68,92463,89],{"class":78},[68,92465,62320],{"class":85},[68,92467,95],{"class":78},[68,92469,92470,92472,92474,92476],{"class":70,"line":3138},[68,92471,58764],{"class":85},[68,92473,89],{"class":78},[68,92475,53074],{"class":85},[68,92477,95],{"class":78},[68,92479,92480,92482,92484,92486,92488],{"class":70,"line":3144},[68,92481,91520],{"class":85},[68,92483,89],{"class":78},[68,92485,1948],{"class":85},[68,92487,317],{"class":316},[68,92489,95],{"class":78},[68,92491,92492],{"class":70,"line":3165},[68,92493,3677],{"class":78},[68,92495,92496,92498,92500],{"class":70,"line":3170},[68,92497,53899],{"class":78},[68,92499,1553],{"class":52784},[68,92501,52791],{"class":78},[68,92503,92504,92506,92508],{"class":70,"line":3184},[68,92505,53267],{"class":78},[68,92507,52818],{"class":52784},[68,92509,52791],{"class":78},[68,92511,92512],{"class":70,"line":3189},[68,92513,3890],{"emptyLinePlaceholder":1567},[68,92515,92516,92518,92520],{"class":70,"line":3218},[68,92517,2537],{"class":78},[68,92519,53282],{"class":52784},[68,92521,52791],{"class":78},[68,92523,92524,92526,92528,92530,92532,92534,92536,92538],{"class":70,"line":3223},[68,92525,53626],{"class":78},[68,92527,53093],{"class":52784},[68,92529,54968],{"class":74},[68,92531,1685],{"class":78},[68,92533,54973],{"class":1742},[68,92535,56792],{"class":78},[68,92537,53093],{"class":52784},[68,92539,52791],{"class":78},[68,92541,92542,92544,92546,92548,92550,92552,92554,92556],{"class":70,"line":3240},[68,92543,53626],{"class":78},[68,92545,53295],{"class":52784},[68,92547,56717],{"class":74},[68,92549,1685],{"class":78},[68,92551,89749],{"class":1742},[68,92553,56792],{"class":78},[68,92555,53295],{"class":52784},[68,92557,52791],{"class":78},[68,92559,92560,92562,92564],{"class":70,"line":3245},[68,92561,53626],{"class":78},[68,92563,53295],{"class":52784},[68,92565,52791],{"class":78},[68,92567,92568,92570,92572,92574,92576,92578,92580,92582],{"class":70,"line":3250},[68,92569,12709],{"class":316},[68,92571,88408],{"class":85},[68,92573,15052],{"class":316},[68,92575,55877],{"class":78},[68,92577,55880],{"class":74},[68,92579,1640],{"class":78},[68,92581,91621],{"class":1742},[68,92583,1646],{"class":78},[68,92585,92586,92588,92590,92592],{"class":70,"line":3255},[68,92587,53701],{"class":316},[68,92589,10926],{"class":78},[68,92591,1685],{"class":316},[68,92593,48817],{"class":85},[68,92595,92596,92598,92600],{"class":70,"line":3269},[68,92597,71562],{"class":316},[68,92599,91640],{"class":74},[68,92601,12341],{"class":78},[68,92603,92604,92606,92608,92610],{"class":70,"line":3274},[68,92605,91647],{"class":78},[68,92607,1685],{"class":316},[68,92609,4522],{"class":78},[68,92611,4192],{"class":316},[68,92613,92614],{"class":70,"line":4067},[68,92615,91658],{"class":302},[68,92617,92618],{"class":70,"line":4081},[68,92619,3677],{"class":78},[68,92621,92622],{"class":70,"line":4089},[68,92623,91667],{"class":302},[68,92625,92626],{"class":70,"line":4094},[68,92627,92628],{"class":302},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[68,92630,92631],{"class":70,"line":4100},[68,92632,92633],{"class":302},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[68,92635,92636,92638,92640,92642,92644,92646,92649,92651,92653],{"class":70,"line":4106},[68,92637,91682],{"class":78},[68,92639,59291],{"class":74},[68,92641,1640],{"class":78},[68,92643,91689],{"class":1742},[68,92645,91692],{"class":78},[68,92647,92648],{"class":74},"throttle",[68,92650,91698],{"class":78},[68,92652,66552],{"class":85},[68,92654,31981],{"class":78},[68,92656,92657,92659,92661],{"class":70,"line":4111},[68,92658,53899],{"class":78},[68,92660,53295],{"class":52784},[68,92662,52791],{"class":78},[68,92664,92665,92667,92669],{"class":70,"line":9437},[68,92666,53267],{"class":78},[68,92668,53282],{"class":52784},[68,92670,52791],{"class":78},[68,92672,92673],{"class":70,"line":9461},[68,92674,3890],{"emptyLinePlaceholder":1567},[68,92676,92677,92679,92681],{"class":70,"line":9466},[68,92678,53267],{"class":78},[68,92680,52119],{"class":52784},[68,92682,52791],{"class":78},[24,92684,92685],{},[27,92686,92687],{},"手写一个节流函数来处理",[170,92689,72430],{},[170,92691,91741],{},[170,92693,92694],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[170,92696,92697],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[58,92699,92701],{"className":52117,"code":92700,"language":52119,"meta":63,"style":63},"\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",[65,92702,92703,92713,92727,92731,92739,92753,92773,92785,92793,92799,92809,92821,92833,92843,92855,92865,92875,92887,92891,92899,92907,92911,92919,92937,92955,92963,92981,92991,92999,93009,93013,93017,93021,93026,93031,93036,93041,93046,93051,93068,93074,93082,93093,93108,93115,93120,93125,93135,93140,93145,93150,93154,93158,93162,93182,93190,93198,93202],{"__ignoreMap":63},[68,92704,92705,92707,92709,92711],{"class":70,"line":71},[68,92706,52781],{"class":78},[68,92708,52785],{"class":52784},[68,92710,52788],{"class":74},[68,92712,52791],{"class":78},[68,92714,92715,92717,92719,92721,92723,92725],{"class":70,"line":82},[68,92716,2537],{"class":78},[68,92718,52119],{"class":52784},[68,92720,52800],{"class":74},[68,92722,1685],{"class":78},[68,92724,52805],{"class":1742},[68,92726,52791],{"class":78},[68,92728,92729],{"class":70,"line":98},[68,92730,3890],{"emptyLinePlaceholder":1567},[68,92732,92733,92735,92737],{"class":70,"line":104},[68,92734,2537],{"class":78},[68,92736,52818],{"class":52784},[68,92738,52791],{"class":78},[68,92740,92741,92743,92745,92747,92749,92751],{"class":70,"line":112},[68,92742,53626],{"class":78},[68,92744,52828],{"class":52784},[68,92746,52831],{"class":74},[68,92748,1685],{"class":78},[68,92750,52836],{"class":1742},[68,92752,52791],{"class":78},[68,92754,92755,92757,92759,92761,92763,92765,92767,92769,92771],{"class":70,"line":124},[68,92756,53626],{"class":78},[68,92758,52828],{"class":52784},[68,92760,16408],{"class":74},[68,92762,1685],{"class":78},[68,92764,52875],{"class":1742},[68,92766,52855],{"class":74},[68,92768,1685],{"class":78},[68,92770,52882],{"class":1742},[68,92772,52791],{"class":78},[68,92774,92775,92777,92779,92781,92783],{"class":70,"line":1496},[68,92776,53626],{"class":78},[68,92778,52891],{"class":52784},[68,92780,52894],{"class":78},[68,92782,52891],{"class":52784},[68,92784,52791],{"class":78},[68,92786,92787,92789,92791],{"class":70,"line":1502},[68,92788,53626],{"class":78},[68,92790,1553],{"class":52784},[68,92792,52791],{"class":78},[68,92794,92795,92797],{"class":70,"line":1510},[68,92796,56232],{"class":74},[68,92798,79],{"class":78},[68,92800,92801,92803,92805,92807],{"class":70,"line":1521},[68,92802,74073],{"class":85},[68,92804,89],{"class":78},[68,92806,61983],{"class":85},[68,92808,95],{"class":78},[68,92810,92811,92813,92815,92817,92819],{"class":70,"line":3103},[68,92812,56250],{"class":85},[68,92814,89],{"class":78},[68,92816,3213],{"class":85},[68,92818,317],{"class":316},[68,92820,95],{"class":78},[68,92822,92823,92825,92827,92829,92831],{"class":70,"line":3108},[68,92824,56264],{"class":85},[68,92826,89],{"class":78},[68,92828,3213],{"class":85},[68,92830,317],{"class":316},[68,92832,95],{"class":78},[68,92834,92835,92837,92839,92841],{"class":70,"line":3114},[68,92836,56362],{"class":85},[68,92838,89],{"class":78},[68,92840,91481],{"class":85},[68,92842,95],{"class":78},[68,92844,92845,92847,92849,92851,92853],{"class":70,"line":3119},[68,92846,56400],{"class":85},[68,92848,89],{"class":78},[68,92850,2452],{"class":85},[68,92852,317],{"class":316},[68,92854,95],{"class":78},[68,92856,92857,92859,92861,92863],{"class":70,"line":3133},[68,92858,58894],{"class":85},[68,92860,89],{"class":78},[68,92862,62320],{"class":85},[68,92864,95],{"class":78},[68,92866,92867,92869,92871,92873],{"class":70,"line":3138},[68,92868,58764],{"class":85},[68,92870,89],{"class":78},[68,92872,53074],{"class":85},[68,92874,95],{"class":78},[68,92876,92877,92879,92881,92883,92885],{"class":70,"line":3144},[68,92878,91520],{"class":85},[68,92880,89],{"class":78},[68,92882,1948],{"class":85},[68,92884,317],{"class":316},[68,92886,95],{"class":78},[68,92888,92889],{"class":70,"line":3165},[68,92890,3677],{"class":78},[68,92892,92893,92895,92897],{"class":70,"line":3170},[68,92894,53899],{"class":78},[68,92896,1553],{"class":52784},[68,92898,52791],{"class":78},[68,92900,92901,92903,92905],{"class":70,"line":3184},[68,92902,53267],{"class":78},[68,92904,52818],{"class":52784},[68,92906,52791],{"class":78},[68,92908,92909],{"class":70,"line":3189},[68,92910,3890],{"emptyLinePlaceholder":1567},[68,92912,92913,92915,92917],{"class":70,"line":3218},[68,92914,2537],{"class":78},[68,92916,53282],{"class":52784},[68,92918,52791],{"class":78},[68,92920,92921,92923,92925,92927,92929,92931,92933,92935],{"class":70,"line":3223},[68,92922,53626],{"class":78},[68,92924,53093],{"class":52784},[68,92926,54968],{"class":74},[68,92928,1685],{"class":78},[68,92930,54973],{"class":1742},[68,92932,56792],{"class":78},[68,92934,53093],{"class":52784},[68,92936,52791],{"class":78},[68,92938,92939,92941,92943,92945,92947,92949,92951,92953],{"class":70,"line":3240},[68,92940,53626],{"class":78},[68,92942,53295],{"class":52784},[68,92944,56717],{"class":74},[68,92946,1685],{"class":78},[68,92948,89749],{"class":1742},[68,92950,56792],{"class":78},[68,92952,53295],{"class":52784},[68,92954,52791],{"class":78},[68,92956,92957,92959,92961],{"class":70,"line":3245},[68,92958,53626],{"class":78},[68,92960,53295],{"class":52784},[68,92962,52791],{"class":78},[68,92964,92965,92967,92969,92971,92973,92975,92977,92979],{"class":70,"line":3250},[68,92966,12709],{"class":316},[68,92968,88408],{"class":85},[68,92970,15052],{"class":316},[68,92972,55877],{"class":78},[68,92974,55880],{"class":74},[68,92976,1640],{"class":78},[68,92978,91621],{"class":1742},[68,92980,1646],{"class":78},[68,92982,92983,92985,92987,92989],{"class":70,"line":3255},[68,92984,53701],{"class":316},[68,92986,10926],{"class":78},[68,92988,1685],{"class":316},[68,92990,48817],{"class":85},[68,92992,92993,92995,92997],{"class":70,"line":3269},[68,92994,71562],{"class":316},[68,92996,91640],{"class":74},[68,92998,12341],{"class":78},[68,93000,93001,93003,93005,93007],{"class":70,"line":3274},[68,93002,91647],{"class":78},[68,93004,1685],{"class":316},[68,93006,4522],{"class":78},[68,93008,4192],{"class":316},[68,93010,93011],{"class":70,"line":4067},[68,93012,91658],{"class":302},[68,93014,93015],{"class":70,"line":4081},[68,93016,3677],{"class":78},[68,93018,93019],{"class":70,"line":4089},[68,93020,91667],{"class":302},[68,93022,93023],{"class":70,"line":4094},[68,93024,93025],{"class":302},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[68,93027,93028],{"class":70,"line":4100},[68,93029,93030],{"class":302},"    \u002F\u002F 1.声明一个定时器变量\n",[68,93032,93033],{"class":70,"line":4106},[68,93034,93035],{"class":302},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[68,93037,93038],{"class":70,"line":4111},[68,93039,93040],{"class":302},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[68,93042,93043],{"class":70,"line":9437},[68,93044,93045],{"class":302},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[68,93047,93048],{"class":70,"line":9461},[68,93049,93050],{"class":302},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[68,93052,93053,93055,93058,93060,93062,93064,93066],{"class":70,"line":9466},[68,93054,71562],{"class":316},[68,93056,93057],{"class":74}," throttle",[68,93059,1640],{"class":78},[68,93061,92112],{"class":6705},[68,93063,13923],{"class":78},[68,93065,2347],{"class":6705},[68,93067,13930],{"class":78},[68,93069,93070,93072],{"class":70,"line":9472},[68,93071,81249],{"class":316},[68,93073,92125],{"class":78},[68,93075,93076,93078,93080],{"class":70,"line":9499},[68,93077,75459],{"class":316},[68,93079,60396],{"class":316},[68,93081,55933],{"class":78},[68,93083,93084,93086,93088,93090],{"class":70,"line":9504},[68,93085,3987],{"class":316},[68,93087,3149],{"class":78},[68,93089,1855],{"class":316},[68,93091,93092],{"class":78},"timer) {\n",[68,93094,93095,93098,93100,93102,93104,93106],{"class":70,"line":9510},[68,93096,93097],{"class":78},"          timer ",[68,93099,1685],{"class":316},[68,93101,92166],{"class":74},[68,93103,1640],{"class":78},[68,93105,55930],{"class":316},[68,93107,55933],{"class":78},[68,93109,93110,93113],{"class":70,"line":9522},[68,93111,93112],{"class":74},"            fn",[68,93114,3466],{"class":78},[68,93116,93117],{"class":70,"line":9534},[68,93118,93119],{"class":302},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[68,93121,93122],{"class":70,"line":9546},[68,93123,93124],{"class":302},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[68,93126,93127,93130,93132],{"class":70,"line":11204},[68,93128,93129],{"class":78},"            timer ",[68,93131,1685],{"class":316},[68,93133,93134],{"class":85}," null\n",[68,93136,93137],{"class":70,"line":11229},[68,93138,93139],{"class":302},"            \u002F\u002F 不能用clearTimeout(timer)\n",[68,93141,93142],{"class":70,"line":11252},[68,93143,93144],{"class":302},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[68,93146,93147],{"class":70,"line":11276},[68,93148,93149],{"class":78},"          }, t)\n",[68,93151,93152],{"class":70,"line":11281},[68,93153,4019],{"class":78},[68,93155,93156],{"class":70,"line":11286},[68,93157,53880],{"class":78},[68,93159,93160],{"class":70,"line":11291},[68,93161,3677],{"class":78},[68,93163,93164,93166,93168,93170,93172,93174,93176,93178,93180],{"class":70,"line":11300},[68,93165,91682],{"class":78},[68,93167,59291],{"class":74},[68,93169,1640],{"class":78},[68,93171,91689],{"class":1742},[68,93173,13923],{"class":78},[68,93175,92648],{"class":74},[68,93177,91698],{"class":78},[68,93179,66552],{"class":85},[68,93181,31981],{"class":78},[68,93183,93184,93186,93188],{"class":70,"line":11305},[68,93185,53899],{"class":78},[68,93187,53295],{"class":52784},[68,93189,52791],{"class":78},[68,93191,93192,93194,93196],{"class":70,"line":11311},[68,93193,53267],{"class":78},[68,93195,53282],{"class":52784},[68,93197,52791],{"class":78},[68,93199,93200],{"class":70,"line":11332},[68,93201,3890],{"emptyLinePlaceholder":1567},[68,93203,93204,93206,93208],{"class":70,"line":11338},[68,93205,53267],{"class":78},[68,93207,52119],{"class":52784},[68,93209,52791],{"class":78},[19,93211,93213],{"id":93212},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[58,93215,93217],{"className":54549,"code":93216,"language":54551,"meta":63,"style":63},"\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",[65,93218,93219,93227,93235,93240,93245,93250,93255,93259,93267],{"__ignoreMap":63},[68,93220,93221,93223,93225],{"class":70,"line":71},[68,93222,2537],{"class":78},[68,93224,53282],{"class":52784},[68,93226,52791],{"class":78},[68,93228,93229,93231,93233],{"class":70,"line":82},[68,93230,53626],{"class":78},[68,93232,53295],{"class":52784},[68,93234,52791],{"class":78},[68,93236,93237],{"class":70,"line":98},[68,93238,93239],{"class":78},"    let timer = null\n",[68,93241,93242],{"class":70,"line":104},[68,93243,93244],{"class":78},"    timer = setTimeout(() => {\n",[68,93246,93247],{"class":70,"line":112},[68,93248,93249],{"class":78},"      clearTimeout(timer)\n",[68,93251,93252],{"class":70,"line":124},[68,93253,93254],{"class":78},"      console.log(timer)\n",[68,93256,93257],{"class":70,"line":1496},[68,93258,61703],{"class":78},[68,93260,93261,93263,93265],{"class":70,"line":1502},[68,93262,53899],{"class":78},[68,93264,53295],{"class":52784},[68,93266,52791],{"class":78},[68,93268,93269,93271,93273],{"class":70,"line":1510},[68,93270,53267],{"class":78},[68,93272,53282],{"class":52784},[68,93274,52791],{"class":78},[170,93276,93277],{},"输出为1",[170,93279,93280],{},"在开启的定时器里边写清除定时器",[170,93282,93283],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,93285,93287],{"id":93286},"_4174-节流综合案例","4.17.4 节流综合案例",[170,93289,93290],{},"页面打开，可以记录上一次的视频播放位置",[170,93292,93293],{},[801,93294],{"alt":63,"src":93295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[170,93297,93298],{},[801,93299],{"alt":63,"src":93300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[58,93302,93304],{"className":52117,"code":93303,"language":52119,"meta":63,"style":63},"\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",[65,93305,93306,93316,93330,93334,93342,93356,93376,93396,93418,93431,93439,93445,93455,93465,93475,93479,93483,93490,93503,93515,93519,93523,93533,93545,93559,93563,93567,93574,93584,93597,93609,93619,93629,93645,93657,93661,93665,93673,93683,93695,93705,93715,93725,93729,93733,93743,93754,93758,93766,93774,93778,93786,93801,93816,93831,93852,93860,93868,93883,93905,93913,93928,93954,93980,94006,94014,94022,94041,94049,94054,94073,94078,94096,94101,94106,94114,94119,94133,94141,94146,94163,94167,94172,94194,94198,94206,94214,94218],{"__ignoreMap":63},[68,93307,93308,93310,93312,93314],{"class":70,"line":71},[68,93309,52781],{"class":78},[68,93311,52785],{"class":52784},[68,93313,52788],{"class":74},[68,93315,52791],{"class":78},[68,93317,93318,93320,93322,93324,93326,93328],{"class":70,"line":82},[68,93319,2537],{"class":78},[68,93321,52119],{"class":52784},[68,93323,52800],{"class":74},[68,93325,1685],{"class":78},[68,93327,52805],{"class":1742},[68,93329,52791],{"class":78},[68,93331,93332],{"class":70,"line":98},[68,93333,3890],{"emptyLinePlaceholder":1567},[68,93335,93336,93338,93340],{"class":70,"line":104},[68,93337,2537],{"class":78},[68,93339,52818],{"class":52784},[68,93341,52791],{"class":78},[68,93343,93344,93346,93348,93350,93352,93354],{"class":70,"line":112},[68,93345,53626],{"class":78},[68,93347,52828],{"class":52784},[68,93349,52831],{"class":74},[68,93351,1685],{"class":78},[68,93353,52836],{"class":1742},[68,93355,60605],{"class":78},[68,93357,93358,93360,93362,93364,93366,93368,93370,93372,93374],{"class":70,"line":124},[68,93359,53626],{"class":78},[68,93361,52828],{"class":52784},[68,93363,52847],{"class":74},[68,93365,1685],{"class":78},[68,93367,52852],{"class":1742},[68,93369,52855],{"class":74},[68,93371,1685],{"class":78},[68,93373,52860],{"class":1742},[68,93375,60605],{"class":78},[68,93377,93378,93380,93382,93384,93386,93388,93390,93392,93394],{"class":70,"line":1496},[68,93379,53626],{"class":78},[68,93381,52828],{"class":52784},[68,93383,16408],{"class":74},[68,93385,1685],{"class":78},[68,93387,52875],{"class":1742},[68,93389,52855],{"class":74},[68,93391,1685],{"class":78},[68,93393,52882],{"class":1742},[68,93395,60605],{"class":78},[68,93397,93398,93400,93402,93404,93406,93409,93411,93413,93416],{"class":70,"line":1502},[68,93399,53626],{"class":78},[68,93401,52828],{"class":52784},[68,93403,16408],{"class":74},[68,93405,1685],{"class":78},[68,93407,93408],{"class":1742},"\"referrer\"",[68,93410,52855],{"class":74},[68,93412,1685],{"class":78},[68,93414,93415],{"class":1742},"\"never\"",[68,93417,60605],{"class":78},[68,93419,93420,93422,93424,93427,93429],{"class":70,"line":1510},[68,93421,53626],{"class":78},[68,93423,52891],{"class":52784},[68,93425,93426],{"class":78},">综合案例\u003C\u002F",[68,93428,52891],{"class":52784},[68,93430,52791],{"class":78},[68,93432,93433,93435,93437],{"class":70,"line":1521},[68,93434,53626],{"class":78},[68,93436,1553],{"class":52784},[68,93438,52791],{"class":78},[68,93440,93441,93443],{"class":70,"line":3103},[68,93442,7892],{"class":52784},[68,93444,79],{"class":78},[68,93446,93447,93449,93451,93453],{"class":70,"line":3108},[68,93448,56176],{"class":85},[68,93450,89],{"class":78},[68,93452,1248],{"class":85},[68,93454,95],{"class":78},[68,93456,93457,93459,93461,93463],{"class":70,"line":3114},[68,93458,56187],{"class":85},[68,93460,89],{"class":78},[68,93462,1248],{"class":85},[68,93464,95],{"class":78},[68,93466,93467,93469,93471,93473],{"class":70,"line":3119},[68,93468,74073],{"class":85},[68,93470,89],{"class":78},[68,93472,61983],{"class":85},[68,93474,95],{"class":78},[68,93476,93477],{"class":70,"line":3133},[68,93478,3677],{"class":78},[68,93480,93481],{"class":70,"line":3138},[68,93482,3890],{"emptyLinePlaceholder":1567},[68,93484,93485,93488],{"class":70,"line":3144},[68,93486,93487],{"class":74},"    .container",[68,93489,79],{"class":78},[68,93491,93492,93494,93496,93499,93501],{"class":70,"line":3165},[68,93493,56250],{"class":85},[68,93495,89],{"class":78},[68,93497,93498],{"class":85},"1200",[68,93500,317],{"class":316},[68,93502,95],{"class":78},[68,93504,93505,93507,93509,93511,93513],{"class":70,"line":3170},[68,93506,56187],{"class":85},[68,93508,89],{"class":78},[68,93510,1248],{"class":85},[68,93512,53038],{"class":85},[68,93514,95],{"class":78},[68,93516,93517],{"class":70,"line":3184},[68,93518,3677],{"class":78},[68,93520,93521],{"class":70,"line":3189},[68,93522,3890],{"emptyLinePlaceholder":1567},[68,93524,93525,93528,93531],{"class":70,"line":3218},[68,93526,93527],{"class":74},"    .video",[68,93529,93530],{"class":52784}," video",[68,93532,79],{"class":78},[68,93534,93535,93537,93539,93541,93543],{"class":70,"line":3223},[68,93536,56250],{"class":85},[68,93538,89],{"class":78},[68,93540,1940],{"class":85},[68,93542,1957],{"class":316},[68,93544,95],{"class":78},[68,93546,93547,93549,93551,93553,93555,93557],{"class":70,"line":3240},[68,93548,56176],{"class":85},[68,93550,89],{"class":78},[68,93552,333],{"class":85},[68,93554,317],{"class":316},[68,93556,5583],{"class":85},[68,93558,95],{"class":78},[68,93560,93561],{"class":70,"line":3245},[68,93562,3677],{"class":78},[68,93564,93565],{"class":70,"line":3250},[68,93566,3890],{"emptyLinePlaceholder":1567},[68,93568,93569,93572],{"class":70,"line":3255},[68,93570,93571],{"class":74},"    .elevator",[68,93573,79],{"class":78},[68,93575,93576,93578,93580,93582],{"class":70,"line":3269},[68,93577,56239],{"class":85},[68,93579,89],{"class":78},[68,93581,387],{"class":85},[68,93583,95],{"class":78},[68,93585,93586,93588,93590,93593,93595],{"class":70,"line":3274},[68,93587,56425],{"class":85},[68,93589,89],{"class":78},[68,93591,93592],{"class":85},"280",[68,93594,317],{"class":316},[68,93596,95],{"class":78},[68,93598,93599,93601,93603,93605,93607],{"class":70,"line":4067},[68,93600,87902],{"class":85},[68,93602,89],{"class":78},[68,93604,333],{"class":85},[68,93606,317],{"class":316},[68,93608,95],{"class":78},[68,93610,93611,93613,93615,93617],{"class":70,"line":4081},[68,93612,87715],{"class":85},[68,93614,89],{"class":78},[68,93616,87720],{"class":85},[68,93618,95],{"class":78},[68,93620,93621,93623,93625,93627],{"class":70,"line":4089},[68,93622,63199],{"class":85},[68,93624,89],{"class":78},[68,93626,62320],{"class":85},[68,93628,95],{"class":78},[68,93630,93631,93633,93635,93637,93639,93641,93643],{"class":70,"line":4094},[68,93632,63455],{"class":85},[68,93634,89],{"class":78},[68,93636,1846],{"class":85},[68,93638,317],{"class":316},[68,93640,53003],{"class":85},[68,93642,63722],{"class":85},[68,93644,95],{"class":78},[68,93646,93647,93649,93651,93653,93655],{"class":70,"line":4100},[68,93648,56250],{"class":85},[68,93650,89],{"class":78},[68,93652,2534],{"class":85},[68,93654,317],{"class":316},[68,93656,95],{"class":78},[68,93658,93659],{"class":70,"line":4106},[68,93660,3677],{"class":78},[68,93662,93663],{"class":70,"line":4111},[68,93664,3890],{"emptyLinePlaceholder":1567},[68,93666,93667,93669,93671],{"class":70,"line":9437},[68,93668,93571],{"class":74},[68,93670,2891],{"class":52784},[68,93672,79],{"class":78},[68,93674,93675,93677,93679,93681],{"class":70,"line":9461},[68,93676,56487],{"class":85},[68,93678,89],{"class":78},[68,93680,62347],{"class":85},[68,93682,95],{"class":78},[68,93684,93685,93687,93689,93691,93693],{"class":70,"line":9466},[68,93686,56176],{"class":85},[68,93688,89],{"class":78},[68,93690,313],{"class":85},[68,93692,317],{"class":316},[68,93694,95],{"class":78},[68,93696,93697,93699,93701,93703],{"class":70,"line":9472},[68,93698,65448],{"class":85},[68,93700,89],{"class":78},[68,93702,151],{"class":85},[68,93704,95],{"class":78},[68,93706,93707,93709,93711,93713],{"class":70,"line":9499},[68,93708,58764],{"class":85},[68,93710,89],{"class":78},[68,93712,53074],{"class":85},[68,93714,95],{"class":78},[68,93716,93717,93719,93721,93723],{"class":70,"line":9504},[68,93718,58894],{"class":85},[68,93720,89],{"class":78},[68,93722,63548],{"class":85},[68,93724,95],{"class":78},[68,93726,93727],{"class":70,"line":9510},[68,93728,3677],{"class":78},[68,93730,93731],{"class":70,"line":9522},[68,93732,3890],{"emptyLinePlaceholder":1567},[68,93734,93735,93737,93739,93741],{"class":70,"line":9534},[68,93736,93571],{"class":74},[68,93738,2891],{"class":52784},[68,93740,65502],{"class":74},[68,93742,79],{"class":78},[68,93744,93745,93747,93749,93752],{"class":70,"line":9546},[68,93746,58894],{"class":85},[68,93748,89],{"class":78},[68,93750,93751],{"class":85},"#1286ff",[68,93753,95],{"class":78},[68,93755,93756],{"class":70,"line":11204},[68,93757,3677],{"class":78},[68,93759,93760,93762,93764],{"class":70,"line":11229},[68,93761,53899],{"class":78},[68,93763,1553],{"class":52784},[68,93765,52791],{"class":78},[68,93767,93768,93770,93772],{"class":70,"line":11252},[68,93769,53267],{"class":78},[68,93771,52818],{"class":52784},[68,93773,52791],{"class":78},[68,93775,93776],{"class":70,"line":11276},[68,93777,3890],{"emptyLinePlaceholder":1567},[68,93779,93780,93782,93784],{"class":70,"line":11281},[68,93781,2537],{"class":78},[68,93783,53282],{"class":52784},[68,93785,52791],{"class":78},[68,93787,93788,93790,93792,93794,93796,93799],{"class":70,"line":11286},[68,93789,53626],{"class":78},[68,93791,53093],{"class":52784},[68,93793,54968],{"class":74},[68,93795,1685],{"class":78},[68,93797,93798],{"class":1742},"\"container\"",[68,93800,52791],{"class":78},[68,93802,93803,93805,93807,93809,93811,93814],{"class":70,"line":11291},[68,93804,52825],{"class":78},[68,93806,53093],{"class":52784},[68,93808,54968],{"class":74},[68,93810,1685],{"class":78},[68,93812,93813],{"class":1742},"\"header\"",[68,93815,52791],{"class":78},[68,93817,93818,93820,93822,93824,93826,93829],{"class":70,"line":11300},[68,93819,56712],{"class":78},[68,93821,1867],{"class":52784},[68,93823,62535],{"class":74},[68,93825,1685],{"class":78},[68,93827,93828],{"class":1742},"\"http:\u002F\u002Fpip.itcast.cn\"",[68,93830,52791],{"class":78},[68,93832,93833,93835,93837,93839,93841,93844,93846,93848,93850],{"class":70,"line":11305},[68,93834,56780],{"class":78},[68,93836,801],{"class":52784},[68,93838,56717],{"class":74},[68,93840,1685],{"class":78},[68,93842,93843],{"class":1742},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[68,93845,56725],{"class":74},[68,93847,1685],{"class":78},[68,93849,9141],{"class":1742},[68,93851,60605],{"class":78},[68,93853,93854,93856,93858],{"class":70,"line":11311},[68,93855,56885],{"class":78},[68,93857,1867],{"class":52784},[68,93859,52791],{"class":78},[68,93861,93862,93864,93866],{"class":70,"line":11332},[68,93863,53258],{"class":78},[68,93865,53093],{"class":52784},[68,93867,52791],{"class":78},[68,93869,93870,93872,93874,93876,93878,93881],{"class":70,"line":11338},[68,93871,52825],{"class":78},[68,93873,53093],{"class":52784},[68,93875,54968],{"class":74},[68,93877,1685],{"class":78},[68,93879,93880],{"class":1742},"\"video\"",[68,93882,52791],{"class":78},[68,93884,93885,93887,93889,93891,93893,93896,93899,93901,93903],{"class":70,"line":11352},[68,93886,56712],{"class":78},[68,93888,29667],{"class":52784},[68,93890,56717],{"class":74},[68,93892,1685],{"class":78},[68,93894,93895],{"class":1742},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[68,93897,93898],{"class":74}," controls",[68,93900,56792],{"class":78},[68,93902,29667],{"class":52784},[68,93904,52791],{"class":78},[68,93906,93907,93909,93911],{"class":70,"line":11358},[68,93908,53258],{"class":78},[68,93910,53093],{"class":52784},[68,93912,52791],{"class":78},[68,93914,93915,93917,93919,93921,93923,93926],{"class":70,"line":11385},[68,93916,52825],{"class":78},[68,93918,53093],{"class":52784},[68,93920,54968],{"class":74},[68,93922,1685],{"class":78},[68,93924,93925],{"class":1742},"\"elevator\"",[68,93927,52791],{"class":78},[68,93929,93930,93932,93934,93936,93938,93940,93943,93945,93947,93950,93952],{"class":70,"line":11394},[68,93931,56712],{"class":78},[68,93933,1867],{"class":52784},[68,93935,62535],{"class":74},[68,93937,1685],{"class":78},[68,93939,65714],{"class":1742},[68,93941,93942],{"class":74}," data-ref",[68,93944,1685],{"class":78},[68,93946,93880],{"class":1742},[68,93948,93949],{"class":78},">视频介绍\u003C\u002F",[68,93951,1867],{"class":52784},[68,93953,52791],{"class":78},[68,93955,93956,93958,93960,93962,93964,93966,93968,93970,93973,93976,93978],{"class":70,"line":11400},[68,93957,56712],{"class":78},[68,93959,1867],{"class":52784},[68,93961,62535],{"class":74},[68,93963,1685],{"class":78},[68,93965,65714],{"class":1742},[68,93967,93942],{"class":74},[68,93969,1685],{"class":78},[68,93971,93972],{"class":1742},"\"intro\"",[68,93974,93975],{"class":78},">课程简介\u003C\u002F",[68,93977,1867],{"class":52784},[68,93979,52791],{"class":78},[68,93981,93982,93984,93986,93988,93990,93992,93994,93996,93999,94002,94004],{"class":70,"line":11408},[68,93983,56712],{"class":78},[68,93985,1867],{"class":52784},[68,93987,62535],{"class":74},[68,93989,1685],{"class":78},[68,93991,65714],{"class":1742},[68,93993,93942],{"class":74},[68,93995,1685],{"class":78},[68,93997,93998],{"class":1742},"\"outline\"",[68,94000,94001],{"class":78},">评论列表\u003C\u002F",[68,94003,1867],{"class":52784},[68,94005,52791],{"class":78},[68,94007,94008,94010,94012],{"class":70,"line":11413},[68,94009,53258],{"class":78},[68,94011,53093],{"class":52784},[68,94013,52791],{"class":78},[68,94015,94016,94018,94020],{"class":70,"line":18091},[68,94017,53899],{"class":78},[68,94019,53093],{"class":52784},[68,94021,52791],{"class":78},[68,94023,94024,94026,94028,94030,94032,94035,94037,94039],{"class":70,"line":18097},[68,94025,53626],{"class":78},[68,94027,53295],{"class":52784},[68,94029,56717],{"class":74},[68,94031,1685],{"class":78},[68,94033,94034],{"class":1742},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[68,94036,56792],{"class":78},[68,94038,53295],{"class":52784},[68,94040,52791],{"class":78},[68,94042,94043,94045,94047],{"class":70,"line":18120},[68,94044,53626],{"class":78},[68,94046,53295],{"class":52784},[68,94048,52791],{"class":78},[68,94050,94051],{"class":70,"line":18126},[68,94052,94053],{"class":302},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[68,94055,94056,94058,94060,94062,94064,94066,94068,94071],{"class":70,"line":18149},[68,94057,12709],{"class":316},[68,94059,93530],{"class":85},[68,94061,15052],{"class":316},[68,94063,55877],{"class":78},[68,94065,55880],{"class":74},[68,94067,1640],{"class":78},[68,94069,94070],{"class":1742},"'video'",[68,94072,1646],{"class":78},[68,94074,94075],{"class":70,"line":18163},[68,94076,94077],{"class":302},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[68,94079,94080,94083,94085,94087,94089,94092,94094],{"class":70,"line":18183},[68,94081,94082],{"class":78},"    video.ontimeupdate ",[68,94084,1685],{"class":316},[68,94086,89830],{"class":78},[68,94088,92648],{"class":74},[68,94090,94091],{"class":78},"(() ",[68,94093,86198],{"class":316},[68,94095,79],{"class":78},[68,94097,94098],{"class":70,"line":18189},[68,94099,94100],{"class":302},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[68,94102,94103],{"class":70,"line":18200},[68,94104,94105],{"class":302},"      \u002F\u002F 控制台输出当前的时间\n",[68,94107,94108,94111],{"class":70,"line":18223},[68,94109,94110],{"class":302},"      \u002F\u002F console.log(video.currentTime)",[68,94112,94113],{"class":302},"  \u002F\u002F获得当前的视频时间\n",[68,94115,94116],{"class":70,"line":18245},[68,94117,94118],{"class":302},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[68,94120,94121,94123,94125,94127,94130],{"class":70,"line":18250},[68,94122,76160],{"class":78},[68,94124,73132],{"class":74},[68,94126,1640],{"class":78},[68,94128,94129],{"class":1742},"'currentTime'",[68,94131,94132],{"class":78},", video.currentTime)\n",[68,94134,94135,94137,94139],{"class":70,"line":18256},[68,94136,56016],{"class":78},[68,94138,7899],{"class":85},[68,94140,1646],{"class":78},[68,94142,94143],{"class":70,"line":18270},[68,94144,94145],{"class":302},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[68,94147,94148,94151,94154,94156,94159,94161],{"class":70,"line":18283},[68,94149,94150],{"class":78},"    video.",[68,94152,94153],{"class":74},"onloadeddata",[68,94155,15052],{"class":316},[68,94157,94158],{"class":78}," () ",[68,94160,86198],{"class":316},[68,94162,79],{"class":78},[68,94164,94165],{"class":70,"line":18288},[68,94166,61490],{"class":302},[68,94168,94169],{"class":70,"line":18302},[68,94170,94171],{"class":302},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[68,94173,94174,94177,94179,94182,94184,94186,94188,94190,94192],{"class":70,"line":18307},[68,94175,94176],{"class":78},"      video.currentTime ",[68,94178,1685],{"class":316},[68,94180,94181],{"class":78}," localStorage.",[68,94183,73163],{"class":74},[68,94185,1640],{"class":78},[68,94187,94129],{"class":1742},[68,94189,15202],{"class":78},[68,94191,72835],{"class":316},[68,94193,48817],{"class":85},[68,94195,94196],{"class":70,"line":18313},[68,94197,3677],{"class":78},[68,94199,94200,94202,94204],{"class":70,"line":18318},[68,94201,53899],{"class":78},[68,94203,53295],{"class":52784},[68,94205,52791],{"class":78},[68,94207,94208,94210,94212],{"class":70,"line":18332},[68,94209,53267],{"class":78},[68,94211,53282],{"class":52784},[68,94213,52791],{"class":78},[68,94215,94216],{"class":70,"line":18337},[68,94217,3890],{"emptyLinePlaceholder":1567},[68,94219,94220,94222,94224],{"class":70,"line":18342},[68,94221,53267],{"class":78},[68,94223,52119],{"class":52784},[68,94225,52791],{"class":78},[1553,94227,94228],{},"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":63,"searchDepth":82,"depth":82,"links":94230},[94231,94236,94240,94241,94242,94247,94252,94253,94254,94255,94262,94267,94268,94278,94282,94283,94287],{"id":78168,"depth":82,"text":78169,"children":94232},[94233,94234,94235],{"id":78172,"depth":98,"text":78173},{"id":78197,"depth":98,"text":78198},{"id":78209,"depth":98,"text":78210},{"id":78221,"depth":82,"text":78222,"children":94237},[94238,94239],{"id":78225,"depth":98,"text":78226},{"id":78240,"depth":98,"text":78241},{"id":78292,"depth":82,"text":78293},{"id":78336,"depth":82,"text":78337},{"id":78353,"depth":82,"text":78354,"children":94243},[94244,94245,94246],{"id":78357,"depth":98,"text":78358},{"id":78370,"depth":98,"text":78371},{"id":78475,"depth":98,"text":78476},{"id":78764,"depth":82,"text":78765,"children":94248},[94249,94250,94251],{"id":78768,"depth":98,"text":78769},{"id":79211,"depth":98,"text":79212},{"id":79622,"depth":98,"text":79623},{"id":79685,"depth":82,"text":79686},{"id":79764,"depth":82,"text":79765},{"id":79857,"depth":82,"text":79858},{"id":81702,"depth":82,"text":81703,"children":94256},[94257,94258,94259,94260,94261],{"id":81706,"depth":98,"text":81707},{"id":81718,"depth":98,"text":81719},{"id":81937,"depth":98,"text":81938},{"id":81955,"depth":98,"text":81956},{"id":82015,"depth":98,"text":82016},{"id":86282,"depth":82,"text":86283,"children":94263},[94264,94265,94266],{"id":86286,"depth":98,"text":86287},{"id":86304,"depth":98,"text":86305},{"id":86330,"depth":98,"text":86331},{"id":86339,"depth":82,"text":86340},{"id":86361,"depth":82,"text":86362,"children":94269},[94270,94271,94272,94273,94274,94275,94276,94277],{"id":86365,"depth":98,"text":86366},{"id":86626,"depth":98,"text":86627},{"id":86812,"depth":98,"text":86813},{"id":87179,"depth":98,"text":87180},{"id":87295,"depth":98,"text":87296},{"id":87331,"depth":98,"text":87332},{"id":87378,"depth":98,"text":87379},{"id":87412,"depth":98,"text":87413},{"id":88774,"depth":82,"text":88775,"children":94279},[94280,94281],{"id":88778,"depth":98,"text":88779},{"id":88815,"depth":98,"text":88816},{"id":90170,"depth":82,"text":90171},{"id":90541,"depth":82,"text":90542,"children":94284},[94285,94286],{"id":90545,"depth":98,"text":90546},{"id":90579,"depth":98,"text":90580},{"id":91308,"depth":82,"text":91309,"children":94288},[94289,94290,94291,94292],{"id":91312,"depth":98,"text":91313},{"id":92270,"depth":98,"text":92271},{"id":93212,"depth":98,"text":93213},{"id":93286,"depth":98,"text":93287},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78157,"description":1564},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94299,"title":94300,"body":94301,"description":94312,"extension":1565,"meta":94313,"navigation":1567,"path":94315,"seo":94316,"stem":94317,"__hash__":94318},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94302,"toc":94310},[94303],[170,94304,94305,94306],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1867,94307,94308],{"href":94308,"rel":94309},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25350],{"title":63,"searchDepth":82,"depth":82,"links":94311},[],"三件套第三套学习",{"category":94314},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94300,"description":94312},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94320,"title":94321,"body":94322,"description":1564,"extension":1565,"meta":94427,"navigation":1567,"path":94428,"seo":94429,"stem":94430,"__hash__":94431},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94323,"toc":94422},[94324,94331,94334,94337,94340,94344,94353,94356,94359,94363,94372,94375,94379,94382,94402,94405,94419],[170,94325,94326],{},[1867,94327,94330],{"href":94328,"rel":94329},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25350],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94332,94321],{"id":94333},"_1安装",[170,94335,94336],{},"numpy是科学计算基础库,底层是C语言",[170,94338,94339],{},"三种方式：",[14,94341,94343],{"id":94342},"_11-通过pip安装","1.1 通过pip安装",[58,94345,94347],{"className":31862,"code":94346,"language":31864,"meta":63,"style":63},"pip install numpy\n",[65,94348,94349],{"__ignoreMap":63},[68,94350,94351],{"class":70,"line":71},[68,94352,94346],{"class":78},[170,94354,94355],{},"首选方式，自动处理依赖项",[170,94357,94358],{},"在提示系统命令符中使用cmd",[14,94360,94362],{"id":94361},"_12-通过anaconda安装","1.2 通过Anaconda安装",[58,94364,94366],{"className":31862,"code":94365,"language":31864,"meta":63,"style":63},"conda install numpy\n",[65,94367,94368],{"__ignoreMap":63},[68,94369,94370],{"class":70,"line":71},[68,94371,94365],{"class":78},[170,94373,94374],{},"自动解决环境依赖",[14,94376,94378],{"id":94377},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[170,94380,94381],{},"对于Debian\u002FUbuntu",[58,94383,94385],{"className":31862,"code":94384,"language":31864,"meta":63,"style":63},"sudo apt-get install python3-numpy\n",[65,94386,94387],{"__ignoreMap":63},[68,94388,94389,94392,94394,94397,94399],{"class":70,"line":71},[68,94390,94391],{"class":78},"sudo apt",[68,94393,2160],{"class":316},[68,94395,94396],{"class":78},"get install python3",[68,94398,2160],{"class":316},[68,94400,94401],{"class":78},"numpy\n",[170,94403,94404],{},"对于Fedora:",[58,94406,94408],{"className":31862,"code":94407,"language":31864,"meta":63,"style":63},"sudo dnf install python3-numpy\n",[65,94409,94410],{"__ignoreMap":63},[68,94411,94412,94415,94417],{"class":70,"line":71},[68,94413,94414],{"class":78},"sudo dnf install python3",[68,94416,2160],{"class":316},[68,94418,94401],{"class":78},[1553,94420,94421],{},"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":63,"searchDepth":82,"depth":82,"links":94423},[94424,94425,94426],{"id":94342,"depth":82,"text":94343},{"id":94361,"depth":82,"text":94362},{"id":94377,"depth":82,"text":94378},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94321,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94433,"title":94434,"body":94435,"description":1564,"extension":1565,"meta":94548,"navigation":1567,"path":94549,"seo":94550,"stem":94551,"__hash__":94552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94436,"toc":94546},[94437,94440,94443,94446,94449,94452,94455,94458,94461,94464,94540,94543],[10,94438,94434],{"id":94439},"_10算数函数",[170,94441,94442],{},"加减乘除运算跟python基础语法没区别",[170,94444,94445],{},"除了python那种方法外还可以使用函数",[170,94447,94448],{},"加：np.add(a,b)",[170,94450,94451],{},"减：np.subtract(a,b)",[170,94453,94454],{},"乘：np.multiply(a,b)",[170,94456,94457],{},"除：np.divide(a,b) == a\u002Fb",[170,94459,94460],{},"取余：np.mod(a,b) == a%b",[170,94462,94463],{},"必须会的用法：",[58,94465,94467],{"className":31862,"code":94466,"language":31864,"meta":63,"style":63},"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",[65,94468,94469,94491,94512,94522,94535],{"__ignoreMap":63},[68,94470,94471,94473,94475,94478,94480,94483,94485,94487,94489],{"class":70,"line":71},[68,94472,1867],{"class":78},[68,94474,1685],{"class":316},[68,94476,94477],{"class":78},"np.arange(",[68,94479,2049],{"class":85},[68,94481,94482],{"class":78},").reshape(",[68,94484,1709],{"class":85},[68,94486,2007],{"class":78},[68,94488,1709],{"class":85},[68,94490,1646],{"class":78},[68,94492,94493,94495,94497,94500,94502,94504,94506,94508,94510],{"class":70,"line":82},[68,94494,1892],{"class":78},[68,94496,1685],{"class":316},[68,94498,94499],{"class":78},"np.array([",[68,94501,313],{"class":85},[68,94503,2007],{"class":78},[68,94505,313],{"class":85},[68,94507,2007],{"class":78},[68,94509,313],{"class":85},[68,94511,6147],{"class":78},[68,94513,94514,94517,94519],{"class":70,"line":98},[68,94515,94516],{"class":78},"result",[68,94518,1685],{"class":316},[68,94520,94521],{"class":78},"np.empty_like(a)\n",[68,94523,94524,94527,94530,94532],{"class":70,"line":104},[68,94525,94526],{"class":78},"np.add(a,b,",[68,94528,94529],{"class":6705},"out",[68,94531,1685],{"class":316},[68,94533,94534],{"class":78},"result)\n",[68,94536,94537],{"class":70,"line":112},[68,94538,94539],{"class":78},"result\n",[170,94541,94542],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1553,94544,94545],{},"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":63,"searchDepth":82,"depth":82,"links":94547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94434,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94554,"title":94555,"body":94556,"description":1564,"extension":1565,"meta":95318,"navigation":1567,"path":95319,"seo":95320,"stem":95321,"__hash__":95322},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94557,"toc":95305},[94558,94561,94564,94567,94571,94610,94614,94658,94718,94722,94725,94764,94767,94812,94816,94852,94856,94925,94929,94993,94997,95000,95003,95006,95009,95045,95049,95089,95093,95165,95168,95172,95235,95239,95302],[10,94559,94555],{"id":94560},"_11统计函数",[170,94562,94563],{},"sum max min mean",[170,94565,94566],{},"这些有axis参数，可以指定方向",[14,94568,94570],{"id":94569},"_111-sum求和函数","11.1 sum()求和函数",[58,94572,94574],{"className":31862,"code":94573,"language":31864,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[65,94575,94576,94581,94602],{"__ignoreMap":63},[68,94577,94578],{"class":70,"line":71},[68,94579,94580],{"class":302},"#创建一维数组\n",[68,94582,94583,94585,94587,94590,94592,94594,94596,94598,94600],{"class":70,"line":82},[68,94584,1867],{"class":78},[68,94586,1685],{"class":316},[68,94588,94589],{"class":78},"np.random.randint(",[68,94591,1846],{"class":85},[68,94593,2007],{"class":78},[68,94595,1940],{"class":85},[68,94597,2007],{"class":78},[68,94599,333],{"class":85},[68,94601,1646],{"class":78},[68,94603,94604,94607],{"class":70,"line":98},[68,94605,94606],{"class":78},"np.sum(a)",[68,94608,94609],{"class":302},"#求和\n",[14,94611,94613],{"id":94612},"_112-max求最大值函数","11.2 max()求最大值函数",[58,94615,94617],{"className":31862,"code":94616,"language":31864,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[65,94618,94619,94623,94643,94648,94653],{"__ignoreMap":63},[68,94620,94621],{"class":70,"line":71},[68,94622,94580],{"class":302},[68,94624,94625,94627,94629,94631,94633,94635,94637,94639,94641],{"class":70,"line":82},[68,94626,1867],{"class":78},[68,94628,1685],{"class":316},[68,94630,94589],{"class":78},[68,94632,1846],{"class":85},[68,94634,2007],{"class":78},[68,94636,1940],{"class":85},[68,94638,2007],{"class":78},[68,94640,333],{"class":85},[68,94642,1646],{"class":78},[68,94644,94645],{"class":70,"line":98},[68,94646,94647],{"class":78},"np.max(a)\n",[68,94649,94650],{"class":70,"line":104},[68,94651,94652],{"class":302},"#最大索引(求最大元素的索引)arg\n",[68,94654,94655],{"class":70,"line":112},[68,94656,94657],{"class":78},"np.argmax(a)\n",[58,94659,94661],{"className":31862,"code":94660,"language":31864,"meta":63,"style":63},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[65,94662,94663,94684,94704,94708],{"__ignoreMap":63},[68,94664,94665,94667,94669,94672,94674,94676,94678,94680,94682],{"class":70,"line":71},[68,94666,12407],{"class":78},[68,94668,1685],{"class":316},[68,94670,94671],{"class":78}," np.array([",[68,94673,1846],{"class":85},[68,94675,13923],{"class":78},[68,94677,1948],{"class":85},[68,94679,13923],{"class":78},[68,94681,1709],{"class":85},[68,94683,6147],{"class":78},[68,94685,94686,94688,94690,94692,94694,94696,94698,94700,94702],{"class":70,"line":82},[68,94687,12433],{"class":78},[68,94689,1685],{"class":316},[68,94691,94671],{"class":78},[68,94693,1709],{"class":85},[68,94695,13923],{"class":78},[68,94697,1715],{"class":85},[68,94699,13923],{"class":78},[68,94701,1922],{"class":85},[68,94703,6147],{"class":78},[68,94705,94706],{"class":70,"line":98},[68,94707,3890],{"emptyLinePlaceholder":1567},[68,94709,94710,94712,94715],{"class":70,"line":104},[68,94711,31899],{"class":85},[68,94713,94714],{"class":78},"(np.maximum(a, b))   ",[68,94716,94717],{"class":302},"# [3 5 4]，每个位置上取较大值\n",[14,94719,94721],{"id":94720},"_113-mean求平均值函数","11.3 mean()求平均值函数",[170,94723,94724],{},"①一维数组：",[58,94726,94728],{"className":31862,"code":94727,"language":31864,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[65,94729,94730,94734,94754,94759],{"__ignoreMap":63},[68,94731,94732],{"class":70,"line":71},[68,94733,94580],{"class":302},[68,94735,94736,94738,94740,94742,94744,94746,94748,94750,94752],{"class":70,"line":82},[68,94737,1867],{"class":78},[68,94739,1685],{"class":316},[68,94741,94589],{"class":78},[68,94743,1846],{"class":85},[68,94745,2007],{"class":78},[68,94747,1940],{"class":85},[68,94749,2007],{"class":78},[68,94751,333],{"class":85},[68,94753,1646],{"class":78},[68,94755,94756],{"class":70,"line":98},[68,94757,94758],{"class":302},"#求平均值\n",[68,94760,94761],{"class":70,"line":104},[68,94762,94763],{"class":78},"np.mean(a)\n",[170,94765,94766],{},"②二维数组",[58,94768,94770],{"className":31862,"code":94769,"language":31864,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[65,94771,94772,94777,94802,94807],{"__ignoreMap":63},[68,94773,94774],{"class":70,"line":71},[68,94775,94776],{"class":302},"#二维数组\n",[68,94778,94779,94782,94784,94786,94788,94790,94792,94794,94796,94798,94800],{"class":70,"line":82},[68,94780,94781],{"class":78},"aa",[68,94783,1685],{"class":316},[68,94785,94477],{"class":78},[68,94787,1846],{"class":85},[68,94789,2007],{"class":78},[68,94791,2151],{"class":85},[68,94793,94482],{"class":78},[68,94795,1709],{"class":85},[68,94797,2007],{"class":78},[68,94799,1922],{"class":85},[68,94801,1646],{"class":78},[68,94803,94804],{"class":70,"line":98},[68,94805,94806],{"class":302},"#对数组中的所有数求平均\n",[68,94808,94809],{"class":70,"line":104},[68,94810,94811],{"class":78},"np.mean(aa)\n",[14,94813,94815],{"id":94814},"_114-median求中位数函数","11.4 median()求中位数函数",[58,94817,94819],{"className":31862,"code":94818,"language":31864,"meta":63,"style":63},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[65,94820,94821,94826,94842,94847],{"__ignoreMap":63},[68,94822,94823],{"class":70,"line":71},[68,94824,94825],{"class":302},"#求中位数\n",[68,94827,94828,94830,94832,94834,94836,94838,94840],{"class":70,"line":82},[68,94829,1892],{"class":78},[68,94831,1685],{"class":316},[68,94833,94477],{"class":78},[68,94835,1846],{"class":85},[68,94837,2007],{"class":78},[68,94839,313],{"class":85},[68,94841,1646],{"class":78},[68,94843,94844],{"class":70,"line":98},[68,94845,94846],{"class":78},"np.median(b)\n",[68,94848,94849],{"class":70,"line":104},[68,94850,94851],{"class":302},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94853,94855],{"id":94854},"_115-power求幂运算函数","11.5 power()求幂运算函数",[58,94857,94859],{"className":31862,"code":94858,"language":31864,"meta":63,"style":63},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[65,94860,94861,94877,94882,94887,94896,94901,94910],{"__ignoreMap":63},[68,94862,94863,94865,94867,94869,94871,94873,94875],{"class":70,"line":71},[68,94864,1892],{"class":78},[68,94866,1685],{"class":316},[68,94868,94477],{"class":78},[68,94870,1846],{"class":85},[68,94872,2007],{"class":78},[68,94874,313],{"class":85},[68,94876,1646],{"class":78},[68,94878,94879],{"class":70,"line":82},[68,94880,94881],{"class":302},"#幂运算\n",[68,94883,94884],{"class":70,"line":98},[68,94885,94886],{"class":302},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[68,94888,94889,94892,94894],{"class":70,"line":104},[68,94890,94891],{"class":78},"np.power(b,",[68,94893,1715],{"class":85},[68,94895,1646],{"class":78},[68,94897,94898],{"class":70,"line":112},[68,94899,94900],{"class":302},"#或者以下代码，将数据存储起来\n",[68,94902,94903,94905,94907],{"class":70,"line":124},[68,94904,2472],{"class":78},[68,94906,1685],{"class":316},[68,94908,94909],{"class":78},"np.empty_like(b)\n",[68,94911,94912,94914,94916,94918,94920,94922],{"class":70,"line":1496},[68,94913,94891],{"class":78},[68,94915,1715],{"class":85},[68,94917,2007],{"class":78},[68,94919,94529],{"class":6705},[68,94921,1685],{"class":316},[68,94923,94924],{"class":78},"y)\n",[14,94926,94928],{"id":94927},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[58,94930,94932],{"className":31862,"code":94931,"language":31864,"meta":63,"style":63},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[65,94933,94934,94950,94955,94960,94964,94982],{"__ignoreMap":63},[68,94935,94936,94938,94940,94942,94944,94946,94948],{"class":70,"line":71},[68,94937,1892],{"class":78},[68,94939,1685],{"class":316},[68,94941,94477],{"class":78},[68,94943,1846],{"class":85},[68,94945,2007],{"class":78},[68,94947,313],{"class":85},[68,94949,1646],{"class":78},[68,94951,94952],{"class":70,"line":82},[68,94953,94954],{"class":302},"#开方\n",[68,94956,94957],{"class":70,"line":98},[68,94958,94959],{"class":78},"np.sqrt(b)\n",[68,94961,94962],{"class":70,"line":104},[68,94963,94900],{"class":302},[68,94965,94966,94968,94970,94973,94976,94978,94980],{"class":70,"line":112},[68,94967,2472],{"class":78},[68,94969,1685],{"class":316},[68,94971,94972],{"class":78},"np.empty_like(b,",[68,94974,94975],{"class":6705},"dtype",[68,94977,1685],{"class":316},[68,94979,1679],{"class":85},[68,94981,1646],{"class":78},[68,94983,94984,94987,94989,94991],{"class":70,"line":124},[68,94985,94986],{"class":78},"np.sqrt(b,",[68,94988,94529],{"class":6705},[68,94990,1685],{"class":316},[68,94992,94924],{"class":78},[14,94994,94996],{"id":94995},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[170,94998,94999],{},"对数组中的元素累计求和，可指定轴",[170,95001,95002],{},"#累计求和的意思是：",[170,95004,95005],{},"a = np.array([1, 2, 3, 4])",[170,95007,95008],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[58,95010,95012],{"className":31862,"code":95011,"language":31864,"meta":63,"style":63},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[65,95013,95014,95030,95035,95040],{"__ignoreMap":63},[68,95015,95016,95018,95020,95022,95024,95026,95028],{"class":70,"line":71},[68,95017,1892],{"class":78},[68,95019,1685],{"class":316},[68,95021,94477],{"class":78},[68,95023,1846],{"class":85},[68,95025,2007],{"class":78},[68,95027,313],{"class":85},[68,95029,1646],{"class":78},[68,95031,95032],{"class":70,"line":82},[68,95033,95034],{"class":78},"np.cumsum(b)\n",[68,95036,95037],{"class":70,"line":98},[68,95038,95039],{"class":302},"#结果：\n",[68,95041,95042],{"class":70,"line":104},[68,95043,95044],{"class":302},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95046,95048],{"id":95047},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[58,95050,95052],{"className":31862,"code":95051,"language":31864,"meta":63,"style":63},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[65,95053,95054,95070,95075,95080,95084],{"__ignoreMap":63},[68,95055,95056,95058,95060,95062,95064,95066,95068],{"class":70,"line":71},[68,95057,1892],{"class":78},[68,95059,1685],{"class":316},[68,95061,94477],{"class":78},[68,95063,1846],{"class":85},[68,95065,2007],{"class":78},[68,95067,313],{"class":85},[68,95069,1646],{"class":78},[68,95071,95072],{"class":70,"line":82},[68,95073,95074],{"class":302},"#对数组中的元素累计求积，可指定轴\n",[68,95076,95077],{"class":70,"line":98},[68,95078,95079],{"class":78},"np.cumprod(b)\n",[68,95081,95082],{"class":70,"line":104},[68,95083,95039],{"class":302},[68,95085,95086],{"class":70,"line":112},[68,95087,95088],{"class":302},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95090,95092],{"id":95091},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[58,95094,95096],{"className":31862,"code":95095,"language":31864,"meta":63,"style":63},"#删除数组中的重复数据，并对数据进行排序\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",[65,95097,95098,95103,95151,95156,95160],{"__ignoreMap":63},[68,95099,95100],{"class":70,"line":71},[68,95101,95102],{"class":302},"#删除数组中的重复数据，并对数据进行排序\n",[68,95104,95105,95107,95109,95111,95113,95115,95117,95119,95121,95123,95125,95127,95129,95131,95133,95135,95137,95139,95141,95143,95145,95147,95149],{"class":70,"line":82},[68,95106,1867],{"class":78},[68,95108,1685],{"class":316},[68,95110,94499],{"class":78},[68,95112,1846],{"class":85},[68,95114,2007],{"class":78},[68,95116,1715],{"class":85},[68,95118,2007],{"class":78},[68,95120,1709],{"class":85},[68,95122,2007],{"class":78},[68,95124,2126],{"class":85},[68,95126,2007],{"class":78},[68,95128,1709],{"class":85},[68,95130,2007],{"class":78},[68,95132,313],{"class":85},[68,95134,2007],{"class":78},[68,95136,1826],{"class":85},[68,95138,2007],{"class":78},[68,95140,1248],{"class":85},[68,95142,2007],{"class":78},[68,95144,2402],{"class":85},[68,95146,2007],{"class":78},[68,95148,1922],{"class":85},[68,95150,6147],{"class":78},[68,95152,95153],{"class":70,"line":98},[68,95154,95155],{"class":78},"np.unique(a)\n",[68,95157,95158],{"class":70,"line":104},[68,95159,95039],{"class":302},[68,95161,95162],{"class":70,"line":112},[68,95163,95164],{"class":302},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[170,95166,95167],{},"升序形式排序",[14,95169,95171],{"id":95170},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[58,95173,95175],{"className":31862,"code":95174,"language":31864,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[65,95176,95177,95225,95230],{"__ignoreMap":63},[68,95178,95179,95181,95183,95185,95187,95189,95191,95193,95195,95197,95199,95201,95203,95205,95207,95209,95211,95213,95215,95217,95219,95221,95223],{"class":70,"line":71},[68,95180,1867],{"class":78},[68,95182,1685],{"class":316},[68,95184,94499],{"class":78},[68,95186,1846],{"class":85},[68,95188,2007],{"class":78},[68,95190,1715],{"class":85},[68,95192,2007],{"class":78},[68,95194,1709],{"class":85},[68,95196,2007],{"class":78},[68,95198,2126],{"class":85},[68,95200,2007],{"class":78},[68,95202,1709],{"class":85},[68,95204,2007],{"class":78},[68,95206,313],{"class":85},[68,95208,2007],{"class":78},[68,95210,1826],{"class":85},[68,95212,2007],{"class":78},[68,95214,1248],{"class":85},[68,95216,2007],{"class":78},[68,95218,2402],{"class":85},[68,95220,2007],{"class":78},[68,95222,1922],{"class":85},[68,95224,6147],{"class":78},[68,95226,95227],{"class":70,"line":82},[68,95228,95229],{"class":302},"#返回数组中非零元素的索引\n",[68,95231,95232],{"class":70,"line":98},[68,95233,95234],{"class":78},"np.nonzero(a)\n",[14,95236,95238],{"id":95237},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[58,95240,95242],{"className":31862,"code":95241,"language":31864,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[65,95243,95244,95292,95297],{"__ignoreMap":63},[68,95245,95246,95248,95250,95252,95254,95256,95258,95260,95262,95264,95266,95268,95270,95272,95274,95276,95278,95280,95282,95284,95286,95288,95290],{"class":70,"line":71},[68,95247,1867],{"class":78},[68,95249,1685],{"class":316},[68,95251,94499],{"class":78},[68,95253,1846],{"class":85},[68,95255,2007],{"class":78},[68,95257,1715],{"class":85},[68,95259,2007],{"class":78},[68,95261,1709],{"class":85},[68,95263,2007],{"class":78},[68,95265,2126],{"class":85},[68,95267,2007],{"class":78},[68,95269,1709],{"class":85},[68,95271,2007],{"class":78},[68,95273,313],{"class":85},[68,95275,2007],{"class":78},[68,95277,1826],{"class":85},[68,95279,2007],{"class":78},[68,95281,1248],{"class":85},[68,95283,2007],{"class":78},[68,95285,2402],{"class":85},[68,95287,2007],{"class":78},[68,95289,1922],{"class":85},[68,95291,6147],{"class":78},[68,95293,95294],{"class":70,"line":82},[68,95295,95296],{"class":302},"#计算一组数中最大值与最小值的差，可指定轴\n",[68,95298,95299],{"class":70,"line":98},[68,95300,95301],{"class":78},"np.ptp(a)\n",[1553,95303,95304],{},"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":63,"searchDepth":82,"depth":82,"links":95306},[95307,95308,95309,95310,95311,95312,95313,95314,95315,95316,95317],{"id":94569,"depth":82,"text":94570},{"id":94612,"depth":82,"text":94613},{"id":94720,"depth":82,"text":94721},{"id":94814,"depth":82,"text":94815},{"id":94854,"depth":82,"text":94855},{"id":94927,"depth":82,"text":94928},{"id":94995,"depth":82,"text":94996},{"id":95047,"depth":82,"text":95048},{"id":95091,"depth":82,"text":95092},{"id":95170,"depth":82,"text":95171},{"id":95237,"depth":82,"text":95238},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94555,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95324,"title":95325,"body":95326,"description":1564,"extension":1565,"meta":95981,"navigation":1567,"path":95982,"seo":95983,"stem":95984,"__hash__":95985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95327,"toc":95969},[95328,95331,95335,95338,95554,95558,95561,95770,95774,95840,95845,95849,95852,95855,95893,95897,95900,95905,95909,95912,95915,95920,95924,95927,95931,95934,95937,95942,95946,95949,95952,95957,95961,95966],[10,95329,95325],{"id":95330},"_12其他常用函数",[14,95332,95334],{"id":95333},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[170,95336,95337],{},"将数组的数据按照行列复制扩展",[58,95339,95341],{"className":31862,"code":95340,"language":31864,"meta":63,"style":63},"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",[65,95342,95343,95359,95368,95372,95377,95382,95395,95399,95404,95409,95414,95418,95423,95447,95459,95463,95467,95472,95477,95482,95487,95491,95504,95508,95512,95517,95522,95527,95532,95537,95541,95545,95550],{"__ignoreMap":63},[68,95344,95345,95347,95349,95351,95353,95355,95357],{"class":70,"line":71},[68,95346,1867],{"class":78},[68,95348,1685],{"class":316},[68,95350,94477],{"class":78},[68,95352,1846],{"class":85},[68,95354,2007],{"class":78},[68,95356,1948],{"class":85},[68,95358,1646],{"class":78},[68,95360,95361,95364,95366],{"class":70,"line":82},[68,95362,95363],{"class":78},"np.tile(a,",[68,95365,1715],{"class":85},[68,95367,1646],{"class":78},[68,95369,95370],{"class":70,"line":98},[68,95371,95039],{"class":302},[68,95373,95374],{"class":70,"line":104},[68,95375,95376],{"class":302},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[68,95378,95379],{"class":70,"line":112},[68,95380,95381],{"class":302},"#行复制两次，列复制三次\n",[68,95383,95384,95387,95389,95391,95393],{"class":70,"line":124},[68,95385,95386],{"class":78},"np.tile(a,(",[68,95388,1715],{"class":85},[68,95390,2007],{"class":78},[68,95392,1709],{"class":85},[68,95394,31981],{"class":78},[68,95396,95397],{"class":70,"line":1496},[68,95398,95039],{"class":302},[68,95400,95401],{"class":70,"line":1502},[68,95402,95403],{"class":1742},"'''\n",[68,95405,95406],{"class":70,"line":1510},[68,95407,95408],{"class":1742},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[68,95410,95411],{"class":70,"line":1521},[68,95412,95413],{"class":1742},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[68,95415,95416],{"class":70,"line":3103},[68,95417,95403],{"class":1742},[68,95419,95420],{"class":70,"line":3108},[68,95421,95422],{"class":302},"#创建二维数组\n",[68,95424,95425,95427,95429,95431,95433,95435,95437,95439,95441,95443,95445],{"class":70,"line":3114},[68,95426,94781],{"class":78},[68,95428,1685],{"class":316},[68,95430,94477],{"class":78},[68,95432,1846],{"class":85},[68,95434,2007],{"class":78},[68,95436,2151],{"class":85},[68,95438,94482],{"class":78},[68,95440,1922],{"class":85},[68,95442,2007],{"class":78},[68,95444,1709],{"class":85},[68,95446,1646],{"class":78},[68,95448,95449,95452,95454,95456],{"class":70,"line":3119},[68,95450,95451],{"class":78},"np.tile(aa,",[68,95453,1715],{"class":85},[68,95455,2058],{"class":78},[68,95457,95458],{"class":302},"#一个数的时候就是行\n",[68,95460,95461],{"class":70,"line":3133},[68,95462,95039],{"class":302},[68,95464,95465],{"class":70,"line":3138},[68,95466,95403],{"class":1742},[68,95468,95469],{"class":70,"line":3144},[68,95470,95471],{"class":1742},"array([[ 1,  2,  3,  1,  2,  3],\n",[68,95473,95474],{"class":70,"line":3165},[68,95475,95476],{"class":1742},"       [ 4,  5,  6,  4,  5,  6],\n",[68,95478,95479],{"class":70,"line":3170},[68,95480,95481],{"class":1742},"       [ 7,  8,  9,  7,  8,  9],\n",[68,95483,95484],{"class":70,"line":3184},[68,95485,95486],{"class":1742},"       [10, 11, 12, 10, 11, 12]])\n",[68,95488,95489],{"class":70,"line":3189},[68,95490,95403],{"class":1742},[68,95492,95493,95496,95498,95500,95502],{"class":70,"line":3218},[68,95494,95495],{"class":78},"np.tile(aa,(",[68,95497,1715],{"class":85},[68,95499,2007],{"class":78},[68,95501,1709],{"class":85},[68,95503,31981],{"class":78},[68,95505,95506],{"class":70,"line":3223},[68,95507,95039],{"class":302},[68,95509,95510],{"class":70,"line":3240},[68,95511,95403],{"class":1742},[68,95513,95514],{"class":70,"line":3245},[68,95515,95516],{"class":1742},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,95518,95519],{"class":70,"line":3250},[68,95520,95521],{"class":1742},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[68,95523,95524],{"class":70,"line":3255},[68,95525,95526],{"class":1742},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[68,95528,95529],{"class":70,"line":3269},[68,95530,95531],{"class":1742},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[68,95533,95534],{"class":70,"line":3274},[68,95535,95536],{"class":1742},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,95538,95539],{"class":70,"line":4067},[68,95540,95521],{"class":1742},[68,95542,95543],{"class":70,"line":4081},[68,95544,95526],{"class":1742},[68,95546,95547],{"class":70,"line":4089},[68,95548,95549],{"class":1742},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[68,95551,95552],{"class":70,"line":4094},[68,95553,95403],{"class":1742},[14,95555,95557],{"id":95556},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[170,95559,95560],{},"repeat()将数组中的每个元素重复若干次",[58,95562,95564],{"className":31862,"code":95563,"language":31864,"meta":63,"style":63},"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",[65,95565,95566,95582,95591,95595,95600,95624,95629,95638,95642,95647,95651,95656,95672,95676,95680,95685,95690,95695,95699,95704,95708,95713,95718,95722,95738,95742,95746,95751,95756,95761,95766],{"__ignoreMap":63},[68,95567,95568,95570,95572,95574,95576,95578,95580],{"class":70,"line":71},[68,95569,1867],{"class":78},[68,95571,1685],{"class":316},[68,95573,94477],{"class":78},[68,95575,1846],{"class":85},[68,95577,2007],{"class":78},[68,95579,1948],{"class":85},[68,95581,1646],{"class":78},[68,95583,95584,95587,95589],{"class":70,"line":82},[68,95585,95586],{"class":78},"np.repeat(a,",[68,95588,1709],{"class":85},[68,95590,1646],{"class":78},[68,95592,95593],{"class":70,"line":98},[68,95594,95039],{"class":302},[68,95596,95597],{"class":70,"line":104},[68,95598,95599],{"class":302},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[68,95601,95602,95604,95606,95608,95610,95612,95614,95616,95618,95620,95622],{"class":70,"line":112},[68,95603,94781],{"class":78},[68,95605,1685],{"class":316},[68,95607,94477],{"class":78},[68,95609,1846],{"class":85},[68,95611,2007],{"class":78},[68,95613,2151],{"class":85},[68,95615,94482],{"class":78},[68,95617,1922],{"class":85},[68,95619,2007],{"class":78},[68,95621,1709],{"class":85},[68,95623,1646],{"class":78},[68,95625,95626],{"class":70,"line":124},[68,95627,95628],{"class":302},"#这个重复之后二维变成一维\n",[68,95630,95631,95634,95636],{"class":70,"line":1496},[68,95632,95633],{"class":78},"np.repeat(aa,",[68,95635,1715],{"class":85},[68,95637,1646],{"class":78},[68,95639,95640],{"class":70,"line":1502},[68,95641,95403],{"class":1742},[68,95643,95644],{"class":70,"line":1510},[68,95645,95646],{"class":1742},"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",[68,95648,95649],{"class":70,"line":1521},[68,95650,95403],{"class":1742},[68,95652,95653],{"class":70,"line":3103},[68,95654,95655],{"class":302},"#指定axis\n",[68,95657,95658,95660,95662,95664,95666,95668,95670],{"class":70,"line":3108},[68,95659,95633],{"class":78},[68,95661,1715],{"class":85},[68,95663,2007],{"class":78},[68,95665,48998],{"class":6705},[68,95667,1685],{"class":316},[68,95669,1248],{"class":85},[68,95671,1646],{"class":78},[68,95673,95674],{"class":70,"line":3114},[68,95675,95039],{"class":302},[68,95677,95678],{"class":70,"line":3119},[68,95679,95403],{"class":1742},[68,95681,95682],{"class":70,"line":3133},[68,95683,95684],{"class":1742},"array([[ 1,  2,  3],\n",[68,95686,95687],{"class":70,"line":3138},[68,95688,95689],{"class":1742},"       [ 1,  2,  3],\n",[68,95691,95692],{"class":70,"line":3144},[68,95693,95694],{"class":1742},"       [ 4,  5,  6],\n",[68,95696,95697],{"class":70,"line":3165},[68,95698,95694],{"class":1742},[68,95700,95701],{"class":70,"line":3170},[68,95702,95703],{"class":1742},"       [ 7,  8,  9],\n",[68,95705,95706],{"class":70,"line":3184},[68,95707,95703],{"class":1742},[68,95709,95710],{"class":70,"line":3189},[68,95711,95712],{"class":1742},"       [10, 11, 12],\n",[68,95714,95715],{"class":70,"line":3218},[68,95716,95717],{"class":1742},"       [10, 11, 12]])\n",[68,95719,95720],{"class":70,"line":3223},[68,95721,95403],{"class":1742},[68,95723,95724,95726,95728,95730,95732,95734,95736],{"class":70,"line":3240},[68,95725,95633],{"class":78},[68,95727,1715],{"class":85},[68,95729,2007],{"class":78},[68,95731,48998],{"class":6705},[68,95733,1685],{"class":316},[68,95735,1846],{"class":85},[68,95737,1646],{"class":78},[68,95739,95740],{"class":70,"line":3245},[68,95741,95039],{"class":302},[68,95743,95744],{"class":70,"line":3250},[68,95745,95403],{"class":1742},[68,95747,95748],{"class":70,"line":3255},[68,95749,95750],{"class":1742},"array([[ 1,  1,  2,  2,  3,  3],\n",[68,95752,95753],{"class":70,"line":3269},[68,95754,95755],{"class":1742},"       [ 4,  4,  5,  5,  6,  6],\n",[68,95757,95758],{"class":70,"line":3274},[68,95759,95760],{"class":1742},"       [ 7,  7,  8,  8,  9,  9],\n",[68,95762,95763],{"class":70,"line":4067},[68,95764,95765],{"class":1742},"       [10, 10, 11, 11, 12, 12]])\n",[68,95767,95768],{"class":70,"line":4081},[68,95769,95403],{"class":1742},[14,95771,95773],{"id":95772},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[58,95775,95777],{"className":31862,"code":95776,"language":31864,"meta":63,"style":63},"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",[65,95778,95779,95795,95800,95812,95816,95821,95831,95835],{"__ignoreMap":63},[68,95780,95781,95783,95785,95787,95789,95791,95793],{"class":70,"line":71},[68,95782,1867],{"class":78},[68,95784,1685],{"class":316},[68,95786,94477],{"class":78},[68,95788,1846],{"class":85},[68,95790,2007],{"class":78},[68,95792,1948],{"class":85},[68,95794,1646],{"class":78},[68,95796,95797],{"class":70,"line":82},[68,95798,95799],{"class":302},"#array([，2，3，4])\n",[68,95801,95802,95805,95807,95809],{"class":70,"line":98},[68,95803,95804],{"class":78},"np.roll(a,",[68,95806,1715],{"class":85},[68,95808,2058],{"class":78},[68,95810,95811],{"class":302},"#传正数向后调多少位，传负数向前调多少位\n",[68,95813,95814],{"class":70,"line":104},[68,95815,95039],{"class":302},[68,95817,95818],{"class":70,"line":112},[68,95819,95820],{"class":302},"#array([3, 4, 1, 2])\n",[68,95822,95823,95825,95827,95829],{"class":70,"line":124},[68,95824,95804],{"class":78},[68,95826,2160],{"class":316},[68,95828,1846],{"class":85},[68,95830,1646],{"class":78},[68,95832,95833],{"class":70,"line":1496},[68,95834,95039],{"class":302},[68,95836,95837],{"class":70,"line":1502},[68,95838,95839],{"class":302},"#array([2, 3, 4, 1])\n",[170,95841,95842],{},[801,95843],{"alt":63,"src":95844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95846,95848],{"id":95847},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[170,95850,95851],{},"resize()重新调整数组的大小",[170,95853,95854],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[58,95856,95858],{"className":31862,"code":95857,"language":31864,"meta":63,"style":63},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[65,95859,95860,95865,95878],{"__ignoreMap":63},[68,95861,95862],{"class":70,"line":71},[68,95863,95864],{"class":302},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[68,95866,95867,95870,95872,95874,95876],{"class":70,"line":82},[68,95868,95869],{"class":78},"np.resize(aa,(",[68,95871,1715],{"class":85},[68,95873,2007],{"class":78},[68,95875,1973],{"class":85},[68,95877,31981],{"class":78},[68,95879,95880,95882,95884,95886,95888,95890],{"class":70,"line":98},[68,95881,95869],{"class":78},[68,95883,1715],{"class":85},[68,95885,2007],{"class":78},[68,95887,2049],{"class":85},[68,95889,84247],{"class":78},[68,95891,95892],{"class":302},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95894,95896],{"id":95895},"_125-placeput函数","12.5 place()\u002Fput()函数",[170,95898,95899],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[170,95901,95902],{},[801,95903],{"alt":63,"src":95904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95906,95908],{"id":95907},"_126-保存加载文件","12.6 保存加载文件",[170,95910,95911],{},"savetxt():将数据保存到txt文件中",[170,95913,95914],{},"loadtxt():从文件加载数据",[170,95916,95917],{},[801,95918],{"alt":63,"src":95919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95921,95923],{"id":95922},"_127-genfromtxt函数","12.7 genfromtxt()函数",[170,95925,95926],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95928,95930],{"id":95929},"_128-anyall函数","12.8 any()\u002Fall()函数",[170,95932,95933],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[170,95935,95936],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[170,95938,95939],{},[801,95940],{"alt":63,"src":95941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95943,95945],{"id":95944},"_129-where语句","12.9 where语句",[170,95947,95948],{},"np.where(条件,x,y)",[170,95950,95951],{},"如果条件为True,对应值为x,否则对应值为y",[170,95953,95954],{},[801,95955],{"alt":63,"src":95956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95958,95960],{"id":95959},"_1210-dot矩阵","12.10 dot()矩阵",[170,95962,95963],{},[801,95964],{"alt":63,"src":95965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1553,95967,95968],{},"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":63,"searchDepth":82,"depth":82,"links":95970},[95971,95972,95973,95974,95975,95976,95977,95978,95979,95980],{"id":95333,"depth":82,"text":95334},{"id":95556,"depth":82,"text":95557},{"id":95772,"depth":82,"text":95773},{"id":95847,"depth":82,"text":95848},{"id":95895,"depth":82,"text":95896},{"id":95907,"depth":82,"text":95908},{"id":95922,"depth":82,"text":95923},{"id":95929,"depth":82,"text":95930},{"id":95944,"depth":82,"text":95945},{"id":95959,"depth":82,"text":95960},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95325,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95987,"title":95988,"body":95989,"description":1564,"extension":1565,"meta":96342,"navigation":1567,"path":96343,"seo":96344,"stem":96345,"__hash__":96346},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95990,"toc":96340},[95991,95994,95997,96000,96003,96006,96071,96073,96337],[10,95992,95988],{"id":95993},"_13数组排序",[170,95995,95996],{},"排序主要用到的方法是np.sort和np.argsort",[170,95998,95999],{},"其中np.sort()对数组直接排序",[170,96001,96002],{},"而np.argsort()是返回排序后的原始索引",[170,96004,96005],{},"①一维数组",[58,96007,96009],{"className":31862,"code":96008,"language":31864,"meta":63,"style":63},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[65,96010,96011,96015,96055,96063],{"__ignoreMap":63},[68,96012,96013],{"class":70,"line":71},[68,96014,94580],{"class":302},[68,96016,96017,96019,96021,96023,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043,96045,96047,96049,96051,96053],{"class":70,"line":82},[68,96018,1867],{"class":78},[68,96020,1685],{"class":316},[68,96022,94499],{"class":78},[68,96024,1709],{"class":85},[68,96026,2007],{"class":78},[68,96028,2126],{"class":85},[68,96030,2007],{"class":78},[68,96032,2024],{"class":85},[68,96034,2007],{"class":78},[68,96036,2402],{"class":85},[68,96038,2007],{"class":78},[68,96040,1908],{"class":85},[68,96042,2007],{"class":78},[68,96044,2520],{"class":85},[68,96046,2007],{"class":78},[68,96048,1973],{"class":85},[68,96050,2007],{"class":78},[68,96052,313],{"class":85},[68,96054,6147],{"class":78},[68,96056,96057,96060],{"class":70,"line":98},[68,96058,96059],{"class":78},"np.sort(a)",[68,96061,96062],{"class":302},"#升序排序\n",[68,96064,96065,96068],{"class":70,"line":104},[68,96066,96067],{"class":78},"np.argsort(a)",[68,96069,96070],{"class":302},"#按照元素大小来索引排序\n",[170,96072,94766],{},[58,96074,96076],{"className":31862,"code":96075,"language":31864,"meta":63,"style":63},"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",[65,96077,96078,96090,96116,96121,96125,96130,96135,96140,96145,96149,96157,96161,96166,96171,96176,96181,96185,96190,96203,96207,96212,96217,96222,96227,96231,96236,96248,96252,96256,96260,96264,96268,96272,96277,96292,96297,96306,96311,96315,96319,96324,96328,96333],{"__ignoreMap":63},[68,96079,96080,96083,96085,96087],{"class":70,"line":71},[68,96081,96082],{"class":78},"np.random.seed(",[68,96084,1248],{"class":85},[68,96086,2058],{"class":78},[68,96088,96089],{"class":302},"#保证每次值一样\n",[68,96091,96092,96094,96096,96098,96100,96102,96104,96106,96108,96110,96112,96114],{"class":70,"line":82},[68,96093,94781],{"class":78},[68,96095,1685],{"class":316},[68,96097,94589],{"class":78},[68,96099,1940],{"class":85},[68,96101,2007],{"class":78},[68,96103,32980],{"class":6705},[68,96105,1685],{"class":316},[68,96107,1640],{"class":78},[68,96109,1922],{"class":85},[68,96111,2007],{"class":78},[68,96113,1973],{"class":85},[68,96115,31981],{"class":78},[68,96117,96118],{"class":70,"line":98},[68,96119,96120],{"class":302},"#原数组：\n",[68,96122,96123],{"class":70,"line":104},[68,96124,95403],{"class":1742},[68,96126,96127],{"class":70,"line":112},[68,96128,96129],{"class":1742},"array([[44, 47, 64, 67, 67,  9],\n",[68,96131,96132],{"class":70,"line":124},[68,96133,96134],{"class":1742},"       [83, 21, 36, 87, 70, 88],\n",[68,96136,96137],{"class":70,"line":1496},[68,96138,96139],{"class":1742},"       [88, 12, 58, 65, 39, 87],\n",[68,96141,96142],{"class":70,"line":1502},[68,96143,96144],{"class":1742},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[68,96146,96147],{"class":70,"line":1510},[68,96148,95403],{"class":1742},[68,96150,96151,96154],{"class":70,"line":1521},[68,96152,96153],{"class":78},"np.sort(aa)",[68,96155,96156],{"class":302},"#每行进行了排序\n",[68,96158,96159],{"class":70,"line":3103},[68,96160,95403],{"class":1742},[68,96162,96163],{"class":70,"line":3108},[68,96164,96165],{"class":1742},"array([[ 9, 44, 47, 64, 67, 67],\n",[68,96167,96168],{"class":70,"line":3114},[68,96169,96170],{"class":1742},"       [21, 36, 70, 83, 87, 88],\n",[68,96172,96173],{"class":70,"line":3119},[68,96174,96175],{"class":1742},"       [12, 39, 58, 65, 87, 88],\n",[68,96177,96178],{"class":70,"line":3133},[68,96179,96180],{"class":1742},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[68,96182,96183],{"class":70,"line":3138},[68,96184,95403],{"class":1742},[68,96186,96187],{"class":70,"line":3144},[68,96188,96189],{"class":302},"#axis=0时\n",[68,96191,96192,96195,96197,96199,96201],{"class":70,"line":3165},[68,96193,96194],{"class":78},"np.sort(aa,",[68,96196,48998],{"class":6705},[68,96198,1685],{"class":316},[68,96200,1248],{"class":85},[68,96202,1646],{"class":78},[68,96204,96205],{"class":70,"line":3170},[68,96206,95403],{"class":1742},[68,96208,96209],{"class":70,"line":3184},[68,96210,96211],{"class":1742},"array([[44, 12, 36, 37, 25,  9],\n",[68,96213,96214],{"class":70,"line":3189},[68,96215,96216],{"class":1742},"       [46, 21, 58, 65, 39, 77],\n",[68,96218,96219],{"class":70,"line":3218},[68,96220,96221],{"class":1742},"       [83, 47, 64, 67, 67, 87],\n",[68,96223,96224],{"class":70,"line":3223},[68,96225,96226],{"class":1742},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[68,96228,96229],{"class":70,"line":3240},[68,96230,95403],{"class":1742},[68,96232,96233],{"class":70,"line":3245},[68,96234,96235],{"class":302},"#axis=1时,为默认值\n",[68,96237,96238,96240,96242,96244,96246],{"class":70,"line":3250},[68,96239,96194],{"class":78},[68,96241,48998],{"class":6705},[68,96243,1685],{"class":316},[68,96245,1846],{"class":85},[68,96247,1646],{"class":78},[68,96249,96250],{"class":70,"line":3255},[68,96251,95403],{"class":1742},[68,96253,96254],{"class":70,"line":3269},[68,96255,96165],{"class":1742},[68,96257,96258],{"class":70,"line":3274},[68,96259,96170],{"class":1742},[68,96261,96262],{"class":70,"line":4067},[68,96263,96175],{"class":1742},[68,96265,96266],{"class":70,"line":4081},[68,96267,96180],{"class":1742},[68,96269,96270],{"class":70,"line":4089},[68,96271,95403],{"class":1742},[68,96273,96274],{"class":70,"line":4094},[68,96275,96276],{"class":302},"#按最后一列排序\n",[68,96278,96279,96281,96283,96286,96288,96290],{"class":70,"line":4100},[68,96280,1892],{"class":78},[68,96282,1685],{"class":316},[68,96284,96285],{"class":78},"aa[:,",[68,96287,2160],{"class":316},[68,96289,1846],{"class":85},[68,96291,34730],{"class":78},[68,96293,96294],{"class":70,"line":4106},[68,96295,96296],{"class":302},"#获取最后一列排好序的索引\n",[68,96298,96299,96301,96303],{"class":70,"line":4111},[68,96300,75535],{"class":78},[68,96302,1685],{"class":316},[68,96304,96305],{"class":78},"np.argsort(b)\n",[68,96307,96308],{"class":70,"line":9437},[68,96309,96310],{"class":78},"aa[index]\n",[68,96312,96313],{"class":70,"line":9461},[68,96314,95403],{"class":1742},[68,96316,96317],{"class":70,"line":9466},[68,96318,96129],{"class":1742},[68,96320,96321],{"class":70,"line":9472},[68,96322,96323],{"class":1742},"       [46, 88, 81, 37, 25, 77],\n",[68,96325,96326],{"class":70,"line":9499},[68,96327,96139],{"class":1742},[68,96329,96330],{"class":70,"line":9504},[68,96331,96332],{"class":1742},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[68,96334,96335],{"class":70,"line":9510},[68,96336,95403],{"class":1742},[1553,96338,96339],{},"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":63,"searchDepth":82,"depth":82,"links":96341},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95988,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96348,"title":96349,"body":96350,"description":1564,"extension":1565,"meta":96380,"navigation":1567,"path":96381,"seo":96382,"stem":96383,"__hash__":96384},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96351,"toc":96378},[96352,96355,96358,96361,96364,96367,96370,96373],[10,96353,96349],{"id":96354},"_14广播机制",[170,96356,96357],{},"广播的规则：",[170,96359,96360],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[170,96362,96363],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[170,96365,96366],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[170,96368,96369],{},"3.如果没有维度形状为1，则会引发异常",[170,96371,96372],{},"也就是只有维度或者个数为1才可以进行广播操作",[170,96374,96375],{},[801,96376],{"alt":63,"src":96377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":63,"searchDepth":82,"depth":82,"links":96379},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96349,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96386,"title":96387,"body":96388,"description":1564,"extension":1565,"meta":96486,"navigation":1567,"path":96487,"seo":96488,"stem":96489,"__hash__":96490},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96389,"toc":96484},[96390,96393,96396,96481],[10,96391,96387],{"id":96392},"_15比较掩码",[170,96394,96395],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[58,96397,96399],{"className":31862,"code":96398,"language":31864,"meta":63,"style":63},"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",[65,96400,96401,96447,96458,96472,96476],{"__ignoreMap":63},[68,96402,96403,96405,96407,96410,96412,96414,96416,96418,96420,96422,96424,96426,96428,96430,96432,96434,96436,96438,96440,96442,96444],{"class":70,"line":71},[68,96404,1867],{"class":78},[68,96406,1685],{"class":316},[68,96408,96409],{"class":78},"np.array([[",[68,96411,1846],{"class":85},[68,96413,2007],{"class":78},[68,96415,1715],{"class":85},[68,96417,2007],{"class":78},[68,96419,1709],{"class":85},[68,96421,49514],{"class":78},[68,96423,2100],{"class":85},[68,96425,2007],{"class":78},[68,96427,2126],{"class":85},[68,96429,2007],{"class":78},[68,96431,2151],{"class":85},[68,96433,49514],{"class":78},[68,96435,2352],{"class":85},[68,96437,2007],{"class":78},[68,96439,2377],{"class":85},[68,96441,2007],{"class":78},[68,96443,2402],{"class":85},[68,96445,96446],{"class":78},"]])\n",[68,96448,96449,96451,96453,96455],{"class":70,"line":82},[68,96450,1867],{"class":78},[68,96452,2537],{"class":316},[68,96454,333],{"class":85},[68,96456,96457],{"class":302},"#结果是一个由True,False组成的数组\n",[68,96459,96460,96463,96465,96467,96469],{"class":70,"line":98},[68,96461,96462],{"class":78},"a[a",[68,96464,2537],{"class":316},[68,96466,333],{"class":85},[68,96468,2567],{"class":78},[68,96470,96471],{"class":302},"#小于20的元素会存到这个数组中\n",[68,96473,96474],{"class":70,"line":104},[68,96475,95039],{"class":302},[68,96477,96478],{"class":70,"line":112},[68,96479,96480],{"class":302},"#array([ 1,  2,  3, 11, 12, 13])\n",[1553,96482,96483],{},"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":63,"searchDepth":82,"depth":82,"links":96485},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96387,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96492,"title":96493,"body":96494,"description":1564,"extension":1565,"meta":96586,"navigation":1567,"path":96587,"seo":96588,"stem":96589,"__hash__":96590},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96495,"toc":96584},[96496,96499,96502,96505,96508,96511,96576,96581],[10,96497,96493],{"id":96498},"_16魔法命令time",[170,96500,96501],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[170,96503,96504],{},"%:行模式",[170,96506,96507],{},"%%:单元格模式",[170,96509,96510],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[58,96512,96514],{"className":31862,"code":96513,"language":31864,"meta":63,"style":63},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[65,96515,96516,96521,96528,96533,96542,96555,96559,96567],{"__ignoreMap":63},[68,96517,96518],{"class":70,"line":71},[68,96519,96520],{"class":302},"#程序执行时间\n",[68,96522,96523,96525],{"class":70,"line":82},[68,96524,31876],{"class":316},[68,96526,96527],{"class":78}," time \n",[68,96529,96530],{"class":70,"line":98},[68,96531,96532],{"class":302},"#获取时间\n",[68,96534,96535,96538,96540],{"class":70,"line":104},[68,96536,96537],{"class":78},"start",[68,96539,1685],{"class":316},[68,96541,33902],{"class":78},[68,96543,96544,96547,96550,96552],{"class":70,"line":112},[68,96545,96546],{"class":78},"time.sleep(",[68,96548,96549],{"class":85},"0.4",[68,96551,2058],{"class":78},[68,96553,96554],{"class":302},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[68,96556,96557],{"class":70,"line":124},[68,96558,96532],{"class":302},[68,96560,96561,96563,96565],{"class":70,"line":1496},[68,96562,47285],{"class":78},[68,96564,1685],{"class":316},[68,96566,33902],{"class":78},[68,96568,96569,96571,96573],{"class":70,"line":1502},[68,96570,47285],{"class":78},[68,96572,2160],{"class":316},[68,96574,96575],{"class":78},"start\n",[170,96577,96578],{},[801,96579],{"alt":63,"src":96580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1553,96582,96583],{},"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":63,"searchDepth":82,"depth":82,"links":96585},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96493,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96592,"title":96593,"body":96594,"description":1564,"extension":1565,"meta":96629,"navigation":1567,"path":96630,"seo":96631,"stem":96632,"__hash__":96633},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96595,"toc":96627},[96596,96599,96602,96605,96608,96611,96614,96617,96622],[10,96597,96593],{"id":96598},"_17魔法命令timeit",[170,96600,96601],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[170,96603,96604],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[170,96606,96607],{},"单元格模式：",[170,96609,96610],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[170,96612,96613],{},"初始化语句执行次数由轮数来决定",[170,96615,96616],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[170,96618,96619],{},[801,96620],{"alt":63,"src":96621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[170,96623,96624],{},[801,96625],{"alt":63,"src":96626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":63,"searchDepth":82,"depth":82,"links":96628},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96593,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96635,"title":96636,"body":96637,"description":1564,"extension":1565,"meta":96655,"navigation":1567,"path":96656,"seo":96657,"stem":96658,"__hash__":96659},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96638,"toc":96653},[96639,96642,96645,96648],[10,96640,96636],{"id":96641},"_18魔法命令writefile和run",[170,96643,96644],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[170,96646,96647],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[170,96649,96650],{},[801,96651],{"alt":63,"src":96652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":63,"searchDepth":82,"depth":82,"links":96654},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96636,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96661,"title":96662,"body":96663,"description":1564,"extension":1565,"meta":96716,"navigation":1567,"path":96717,"seo":96718,"stem":96719,"__hash__":96720},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96664,"toc":96714},[96665,96668,96671,96673,96676,96679,96684,96687,96690,96693,96696,96699,96702,96705,96708,96711],[10,96666,96662],{"id":96667},"_19魔法命令memit",[170,96669,96670],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[170,96672,26085],{},[170,96674,96675],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[170,96677,96678],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[170,96680,96681],{},[801,96682],{"alt":63,"src":96683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[170,96685,96686],{},"补充：",[170,96688,96689],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[170,96691,96692],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[170,96694,96695],{},"解决方法：",[170,96697,96698],{},"1.cmd",[170,96700,96701],{},"2.依次输入以下代码：",[170,96703,96704],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[170,96706,96707],{},"pip install --upgrade ipython",[170,96709,96710],{},"#升级 memory_profiler 和 setuptools",[170,96712,96713],{},"pip install --upgrade memory_profiler setuptools",{"title":63,"searchDepth":82,"depth":82,"links":96715},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96662,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96722,"title":96723,"body":96724,"description":1564,"extension":1565,"meta":98370,"navigation":1567,"path":98371,"seo":98372,"stem":98373,"__hash__":98374},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96725,"toc":98340},[96726,96729,96733,96737,96798,96801,96806,96810,96815,96820,96825,96830,96833,96838,96842,96846,96879,96882,96885,96888,96940,96943,96979,96982,97024,97028,97049,97051,97088,97090,97095,97097,97102,97106,97109,97137,97141,97145,97198,97202,97294,97298,97302,97305,97310,97314,97339,97344,97348,97351,97354,97357,97360,97363,97366,97369,97381,97385,97389,97392,97424,97427,97450,97453,97479,97482,97508,97511,97545,97548,97610,97614,97617,97621,97624,97650,97653,97656,97661,97664,97733,97735,97740,97801,97804,97815,97821,97826,97830,97833,97846,97850,97865,97867,97890,97892,97918,97921,97924,97927,97975,97977,97982,97986,97990,98017,98021,98048,98051,98056,98061,98151,98155,98213,98218,98221,98224,98266,98270,98326,98331,98334,98337],[10,96727,96723],{"id":96728},"_2创建数组",[14,96730,96732],{"id":96731},"_21-array函数创建数组","2.1 array()函数创建数组",[19,96734,96736],{"id":96735},"_221-函数语句","2.2.1 函数语句",[58,96738,96740],{"className":31862,"code":96739,"language":31864,"meta":63,"style":63},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[65,96741,96742],{"__ignoreMap":63},[68,96743,96744,96747,96750,96752,96754,96756,96758,96760,96763,96765,96768,96770,96773,96775,96777,96779,96782,96784,96787,96789,96792,96794,96796],{"class":70,"line":71},[68,96745,96746],{"class":78},"numpy.array(",[68,96748,96749],{"class":85},"object",[68,96751,13923],{"class":78},[68,96753,94975],{"class":6705},[68,96755,15052],{"class":316},[68,96757,40417],{"class":85},[68,96759,13923],{"class":78},[68,96761,96762],{"class":6705},"copy",[68,96764,15052],{"class":316},[68,96766,96767],{"class":85}," True",[68,96769,13923],{"class":78},[68,96771,96772],{"class":6705},"order",[68,96774,15052],{"class":316},[68,96776,40417],{"class":85},[68,96778,13923],{"class":78},[68,96780,96781],{"class":6705},"subok",[68,96783,15052],{"class":316},[68,96785,96786],{"class":85}," False",[68,96788,13923],{"class":78},[68,96790,96791],{"class":6705},"ndmin",[68,96793,15052],{"class":316},[68,96795,5583],{"class":85},[68,96797,1646],{"class":78},[170,96799,96800],{},"参数：",[170,96802,96803],{},[801,96804],{"alt":63,"src":96805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,96807,96809],{"id":96808},"_222-实例","2.2.2 实例",[170,96811,96812],{},[801,96813],{"alt":63,"src":96814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[170,96816,96817],{},[801,96818],{"alt":63,"src":96819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[170,96821,96822],{},[801,96823],{"alt":63,"src":96824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[170,96826,96827],{},[801,96828],{"alt":63,"src":96829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[170,96831,96832],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[170,96834,96835],{},[801,96836],{"alt":63,"src":96837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96839,96841],{"id":96840},"_22-随机数创建数组","2.2 随机数创建数组",[19,96843,96845],{"id":96844},"_221-random语句","2.2.1 random语句",[58,96847,96849],{"className":31862,"code":96848,"language":31864,"meta":63,"style":63},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[65,96850,96851,96856,96861,96869,96874],{"__ignoreMap":63},[68,96852,96853],{"class":70,"line":71},[68,96854,96855],{"class":302},"#random.random()\n",[68,96857,96858],{"class":70,"line":82},[68,96859,96860],{"class":302},"#确定随机种子,就是每次运行结果是相同的\n",[68,96862,96863,96865,96867],{"class":70,"line":98},[68,96864,96082],{"class":78},[68,96866,1248],{"class":85},[68,96868,1646],{"class":78},[68,96870,96871],{"class":70,"line":104},[68,96872,96873],{"class":78},"np.random.random()\n",[68,96875,96876],{"class":70,"line":112},[68,96877,96878],{"class":302},"#生成一个随机的数目\n",[170,96880,96881],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[170,96883,96884],{},"可以指定数组形状 size",[170,96886,96887],{},"①生成一维数组",[58,96889,96891],{"className":31862,"code":96890,"language":31864,"meta":63,"style":63},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[65,96892,96893,96898,96911,96916,96932],{"__ignoreMap":63},[68,96894,96895],{"class":70,"line":71},[68,96896,96897],{"class":302},"#random.random(size())\n",[68,96899,96900,96903,96905,96907,96909],{"class":70,"line":82},[68,96901,96902],{"class":78},"np.random.random(",[68,96904,32980],{"class":6705},[68,96906,1685],{"class":316},[68,96908,1948],{"class":85},[68,96910,1646],{"class":78},[68,96912,96913],{"class":70,"line":98},[68,96914,96915],{"class":302},"#生成一位的五个元素\n",[68,96917,96918,96920,96922,96924,96926,96928,96930],{"class":70,"line":104},[68,96919,1867],{"class":78},[68,96921,1685],{"class":316},[68,96923,96902],{"class":78},[68,96925,32980],{"class":6705},[68,96927,1685],{"class":316},[68,96929,1922],{"class":85},[68,96931,1646],{"class":78},[68,96933,96934,96937],{"class":70,"line":112},[68,96935,96936],{"class":78},"a.shape ",[68,96938,96939],{"class":302},"#输出数组形状\n",[170,96941,96942],{},"②生成二维数组",[58,96944,96946],{"className":31862,"code":96945,"language":31864,"meta":63,"style":63},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[65,96947,96948,96952,96974],{"__ignoreMap":63},[68,96949,96950],{"class":70,"line":71},[68,96951,94776],{"class":302},[68,96953,96954,96956,96958,96960,96962,96964,96966,96968,96970,96972],{"class":70,"line":82},[68,96955,94781],{"class":78},[68,96957,1685],{"class":316},[68,96959,96902],{"class":78},[68,96961,32980],{"class":6705},[68,96963,1685],{"class":316},[68,96965,1640],{"class":78},[68,96967,1922],{"class":85},[68,96969,2007],{"class":78},[68,96971,1948],{"class":85},[68,96973,31981],{"class":78},[68,96975,96976],{"class":70,"line":98},[68,96977,96978],{"class":302},"#生成四行五列的数组\n",[170,96980,96981],{},"③生成三维数组",[58,96983,96985],{"className":31862,"code":96984,"language":31864,"meta":63,"style":63},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[65,96986,96987,96992,97019],{"__ignoreMap":63},[68,96988,96989],{"class":70,"line":71},[68,96990,96991],{"class":302},"#三维数组\n",[68,96993,96994,96997,96999,97001,97003,97005,97007,97009,97011,97013,97015,97017],{"class":70,"line":82},[68,96995,96996],{"class":78},"aaa",[68,96998,1685],{"class":316},[68,97000,96902],{"class":78},[68,97002,32980],{"class":6705},[68,97004,1685],{"class":316},[68,97006,1640],{"class":78},[68,97008,1715],{"class":85},[68,97010,2007],{"class":78},[68,97012,1709],{"class":85},[68,97014,2007],{"class":78},[68,97016,1922],{"class":85},[68,97018,31981],{"class":78},[68,97020,97021],{"class":70,"line":98},[68,97022,97023],{"class":78},"aaa.shape\n",[19,97025,97027],{"id":97026},"_222-randint语句","2.2.2 randint语句",[58,97029,97031],{"className":31862,"code":97030,"language":31864,"meta":63,"style":63},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[65,97032,97033,97038],{"__ignoreMap":63},[68,97034,97035],{"class":70,"line":71},[68,97036,97037],{"class":302},"#生成随机的整数 random.randint(low,high,size)\n",[68,97039,97040,97042,97044,97046],{"class":70,"line":82},[68,97041,94589],{"class":78},[68,97043,1948],{"class":85},[68,97045,15202],{"class":78},[68,97047,97048],{"class":302},"#0~5中的随机一个数\n",[170,97050,96887],{},[58,97052,97054],{"className":31862,"code":97053,"language":31864,"meta":63,"style":63},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[65,97055,97056,97061,97083],{"__ignoreMap":63},[68,97057,97058],{"class":70,"line":71},[68,97059,97060],{"class":302},"#一维\n",[68,97062,97063,97065,97067,97069,97071,97073,97075,97077,97079,97081],{"class":70,"line":82},[68,97064,94589],{"class":78},[68,97066,1846],{"class":85},[68,97068,2007],{"class":78},[68,97070,2100],{"class":85},[68,97072,2007],{"class":78},[68,97074,32980],{"class":6705},[68,97076,1685],{"class":316},[68,97078,1640],{"class":78},[68,97080,313],{"class":85},[68,97082,31981],{"class":78},[68,97084,97085],{"class":70,"line":98},[68,97086,97087],{"class":302},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[170,97089,96942],{},[170,97091,97092],{},[801,97093],{"alt":63,"src":97094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[170,97096,96981],{},[170,97098,97099],{},[801,97100],{"alt":63,"src":97101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,97103,97105],{"id":97104},"_222-rand语句","2.2.2 rand语句",[170,97107,97108],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[58,97110,97112],{"className":31862,"code":97111,"language":31864,"meta":63,"style":63},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[65,97113,97114,97127,97132],{"__ignoreMap":63},[68,97115,97116,97119,97121,97123,97125],{"class":70,"line":71},[68,97117,97118],{"class":78},"np.random.rand(",[68,97120,1940],{"class":85},[68,97122,2007],{"class":78},[68,97124,313],{"class":85},[68,97126,1646],{"class":78},[68,97128,97129],{"class":70,"line":82},[68,97130,97131],{"class":302},"#第一个参数100：行数，表示有100个样本\n",[68,97133,97134],{"class":70,"line":98},[68,97135,97136],{"class":302},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97138,97140],{"id":97139},"_23-arange创建数组","2.3 arange()创建数组",[19,97142,97144],{"id":97143},"_231-函数语句","2.3.1 函数语句",[58,97146,97148],{"className":31862,"code":97147,"language":31864,"meta":63,"style":63},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[65,97149,97150,97164,97169,97174,97179,97184,97189,97194],{"__ignoreMap":63},[68,97151,97152,97155,97157,97159,97162],{"class":70,"line":71},[68,97153,97154],{"class":78},"numpy.arange([start,] stop[, step], ",[68,97156,94975],{"class":6705},[68,97158,1685],{"class":316},[68,97160,97161],{"class":85},"None",[68,97163,1646],{"class":78},[68,97165,97166],{"class":70,"line":82},[68,97167,97168],{"class":302},"#参数\n",[68,97170,97171],{"class":70,"line":98},[68,97172,97173],{"class":1742},"\"\"\"\n",[68,97175,97176],{"class":70,"line":104},[68,97177,97178],{"class":1742},"start:起始值，可选，默认从 0 开始。\n",[68,97180,97181],{"class":70,"line":112},[68,97182,97183],{"class":1742},"stop:结束值（不包含该值）。\n",[68,97185,97186],{"class":70,"line":124},[68,97187,97188],{"class":1742},"step:步长，可选，默认是 1。可以为浮点数。\n",[68,97190,97191],{"class":70,"line":1496},[68,97192,97193],{"class":1742},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[68,97195,97196],{"class":70,"line":1502},[68,97197,97173],{"class":1742},[19,97199,97201],{"id":97200},"_232-实例","2.3.2 实例",[58,97203,97205],{"className":31862,"code":97204,"language":31864,"meta":63,"style":63},"#创建一维数组\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",[65,97206,97207,97211,97235,97240,97245,97249,97272,97276,97280,97285,97290],{"__ignoreMap":63},[68,97208,97209],{"class":70,"line":71},[68,97210,94580],{"class":302},[68,97212,97213,97215,97217,97219,97221,97223,97225,97227,97229,97231,97233],{"class":70,"line":82},[68,97214,94477],{"class":78},[68,97216,1846],{"class":85},[68,97218,2007],{"class":78},[68,97220,2352],{"class":85},[68,97222,2007],{"class":78},[68,97224,1846],{"class":85},[68,97226,2007],{"class":78},[68,97228,94975],{"class":6705},[68,97230,1685],{"class":316},[68,97232,1643],{"class":85},[68,97234,1646],{"class":78},[68,97236,97237],{"class":70,"line":98},[68,97238,97239],{"class":302},"#输出结果：\n",[68,97241,97242],{"class":70,"line":104},[68,97243,97244],{"class":302},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[68,97246,97247],{"class":70,"line":112},[68,97248,95422],{"class":302},[68,97250,97251,97254,97256,97258,97260,97263,97265,97267,97269],{"class":70,"line":124},[68,97252,97253],{"class":78},"np.array([np.arange(",[68,97255,1846],{"class":85},[68,97257,2007],{"class":78},[68,97259,1922],{"class":85},[68,97261,97262],{"class":78},"),np.arange(",[68,97264,1922],{"class":85},[68,97266,2007],{"class":78},[68,97268,1998],{"class":85},[68,97270,97271],{"class":78},")])\n",[68,97273,97274],{"class":70,"line":1496},[68,97275,95039],{"class":302},[68,97277,97278],{"class":70,"line":1502},[68,97279,97173],{"class":1742},[68,97281,97282],{"class":70,"line":1510},[68,97283,97284],{"class":1742},"array([[1, 2, 3],\n",[68,97286,97287],{"class":70,"line":1521},[68,97288,97289],{"class":1742},"       [4, 5, 6]])\n",[68,97291,97292],{"class":70,"line":3103},[68,97293,97173],{"class":1742},[14,97295,97297],{"id":97296},"_24-生态分布","2.4 生态分布",[19,97299,97301],{"id":97300},"_241-标准正态分布","2.4.1 标准正态分布",[170,97303,97304],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[170,97306,97307],{},[801,97308],{"alt":63,"src":97309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,97311,97313],{"id":97312},"_242-常规正态分布","2.4.2 常规正态分布",[58,97315,97317],{"className":31862,"code":97316,"language":31864,"meta":63,"style":63},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[65,97318,97319,97324,97329,97334],{"__ignoreMap":63},[68,97320,97321],{"class":70,"line":71},[68,97322,97323],{"class":78},"random.normal(loc,scale,size)也可以生成正态分布\n",[68,97325,97326],{"class":70,"line":82},[68,97327,97328],{"class":302},"#loc:期望\n",[68,97330,97331],{"class":70,"line":98},[68,97332,97333],{"class":302},"#scale:方差\n",[68,97335,97336],{"class":70,"line":104},[68,97337,97338],{"class":302},"#size:用于确定是几维的数列\n",[170,97340,97341],{},[801,97342],{"alt":63,"src":97343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97345,97347],{"id":97346},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[170,97349,97350],{},"ndim:秩，维度个数",[170,97352,97353],{},"size:数组元素的个数",[170,97355,97356],{},"shape:数组的形状",[170,97358,97359],{},"dtype:数组元素的类型",[170,97361,97362],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[170,97364,97365],{},"他们都是属性，通过数组.属性的形式来确定",[170,97367,97368],{},"如果需要输出多个可以通过以下方式：",[58,97370,97372],{"className":31862,"code":97371,"language":31864,"meta":63,"style":63},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[65,97373,97374],{"__ignoreMap":63},[68,97375,97376,97378],{"class":70,"line":71},[68,97377,31899],{"class":85},[68,97379,97380],{"class":78},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97382,97384],{"id":97383},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,97386,97388],{"id":97387},"_261-zeros创建数组","2.6.1 zeros()创建数组",[170,97390,97391],{},"①创建一维数组",[58,97393,97395],{"className":31862,"code":97394,"language":31864,"meta":63,"style":63},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[65,97396,97397,97406,97410,97415,97420],{"__ignoreMap":63},[68,97398,97399,97402,97404],{"class":70,"line":71},[68,97400,97401],{"class":78},"np.zeros(",[68,97403,313],{"class":85},[68,97405,1646],{"class":78},[68,97407,97408],{"class":70,"line":82},[68,97409,97173],{"class":1742},[68,97411,97412],{"class":70,"line":98},[68,97413,97414],{"class":1742},"输出结果：\n",[68,97416,97417],{"class":70,"line":104},[68,97418,97419],{"class":1742},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[68,97421,97422],{"class":70,"line":112},[68,97423,97173],{"class":1742},[170,97425,97426],{},"上方代码等价于：",[58,97428,97430],{"className":31862,"code":97429,"language":31864,"meta":63,"style":63},"np.zeros(shape=(10))#创建10个元素的0数组\n",[65,97431,97432],{"__ignoreMap":63},[68,97433,97434,97436,97439,97441,97443,97445,97447],{"class":70,"line":71},[68,97435,97401],{"class":78},[68,97437,97438],{"class":6705},"shape",[68,97440,1685],{"class":316},[68,97442,1640],{"class":78},[68,97444,313],{"class":85},[68,97446,84247],{"class":78},[68,97448,97449],{"class":302},"#创建10个元素的0数组\n",[170,97451,97452],{},"也可以指定类型",[58,97454,97456],{"className":31862,"code":97455,"language":31864,"meta":63,"style":63},"#指定类型\nnp.zeros(5,dtype=int)\n",[65,97457,97458,97463],{"__ignoreMap":63},[68,97459,97460],{"class":70,"line":71},[68,97461,97462],{"class":302},"#指定类型\n",[68,97464,97465,97467,97469,97471,97473,97475,97477],{"class":70,"line":82},[68,97466,97401],{"class":78},[68,97468,1948],{"class":85},[68,97470,2007],{"class":78},[68,97472,94975],{"class":6705},[68,97474,1685],{"class":316},[68,97476,1643],{"class":85},[68,97478,1646],{"class":78},[170,97480,97481],{},"②创建二维数组",[58,97483,97485],{"className":31862,"code":97484,"language":31864,"meta":63,"style":63},"np.zeros((3,4),dtype=int)\n",[65,97486,97487],{"__ignoreMap":63},[68,97488,97489,97492,97494,97496,97498,97500,97502,97504,97506],{"class":70,"line":71},[68,97490,97491],{"class":78},"np.zeros((",[68,97493,1709],{"class":85},[68,97495,2007],{"class":78},[68,97497,1922],{"class":85},[68,97499,43740],{"class":78},[68,97501,94975],{"class":6705},[68,97503,1685],{"class":316},[68,97505,1643],{"class":85},[68,97507,1646],{"class":78},[170,97509,97510],{},"③创建三维数组",[58,97512,97514],{"className":31862,"code":97513,"language":31864,"meta":63,"style":63},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[65,97515,97516,97521],{"__ignoreMap":63},[68,97517,97518],{"class":70,"line":71},[68,97519,97520],{"class":302},"#创建三维数组\n",[68,97522,97523,97525,97527,97529,97531,97533,97535,97537,97539,97541,97543],{"class":70,"line":82},[68,97524,97491],{"class":78},[68,97526,1709],{"class":85},[68,97528,2007],{"class":78},[68,97530,1922],{"class":85},[68,97532,2007],{"class":78},[68,97534,1948],{"class":85},[68,97536,43740],{"class":78},[68,97538,94975],{"class":6705},[68,97540,1685],{"class":316},[68,97542,1643],{"class":85},[68,97544,1646],{"class":78},[170,97546,97547],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[58,97549,97551],{"className":31862,"code":97550,"language":31864,"meta":63,"style":63},"#使用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",[65,97552,97553,97558,97573,97578,97583,97605],{"__ignoreMap":63},[68,97554,97555],{"class":70,"line":71},[68,97556,97557],{"class":302},"#使用zeros_like将创建的一维数组变成全0的数组\n",[68,97559,97560,97562,97564,97566,97568,97570],{"class":70,"line":82},[68,97561,1867],{"class":78},[68,97563,1685],{"class":316},[68,97565,94477],{"class":78},[68,97567,1922],{"class":85},[68,97569,2058],{"class":78},[68,97571,97572],{"class":302},"#这个得到的结果：一维数组0，1，2，3\n",[68,97574,97575],{"class":70,"line":98},[68,97576,97577],{"class":78},"np.zeros_like(a)\n",[68,97579,97580],{"class":70,"line":104},[68,97581,97582],{"class":302},"#使用zeros_like将创建的二维数组变成全0的数组\n",[68,97584,97585,97587,97589,97591,97593,97595,97597,97599,97601,97603],{"class":70,"line":112},[68,97586,94781],{"class":78},[68,97588,1685],{"class":316},[68,97590,96902],{"class":78},[68,97592,32980],{"class":6705},[68,97594,1685],{"class":316},[68,97596,1640],{"class":78},[68,97598,1922],{"class":85},[68,97600,2007],{"class":78},[68,97602,1948],{"class":85},[68,97604,31981],{"class":78},[68,97606,97607],{"class":70,"line":124},[68,97608,97609],{"class":78},"np.zeros_like(aa)\n",[19,97611,97613],{"id":97612},"_262-ones创建数组","2.6.2 ones()创建数组",[170,97615,97616],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,97618,97620],{"id":97619},"_263-empty创建数组","2.6.3 empty()创建数组",[170,97622,97623],{},"①empty()用法",[58,97625,97627],{"className":31862,"code":97626,"language":31864,"meta":63,"style":63},"numpy.empty(shape,dtype=float,order='c')\n",[65,97628,97629],{"__ignoreMap":63},[68,97630,97631,97634,97636,97638,97640,97642,97644,97646,97648],{"class":70,"line":71},[68,97632,97633],{"class":78},"numpy.empty(shape,",[68,97635,94975],{"class":6705},[68,97637,1685],{"class":316},[68,97639,1679],{"class":85},[68,97641,2007],{"class":78},[68,97643,96772],{"class":6705},[68,97645,1685],{"class":316},[68,97647,77505],{"class":1742},[68,97649,1646],{"class":78},[170,97651,97652],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[170,97654,97655],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[170,97657,97658],{},[801,97659],{"alt":63,"src":97660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[170,97662,97663],{},"②empty()用法",[58,97665,97667],{"className":31862,"code":97666,"language":31864,"meta":63,"style":63},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[65,97668,97669,97690,97702,97723,97728],{"__ignoreMap":63},[68,97670,97671,97673,97675,97678,97680,97682,97684,97686,97688],{"class":70,"line":71},[68,97672,2472],{"class":78},[68,97674,1685],{"class":316},[68,97676,97677],{"class":78},"np.empty(",[68,97679,313],{"class":85},[68,97681,2007],{"class":78},[68,97683,94975],{"class":6705},[68,97685,1685],{"class":316},[68,97687,1643],{"class":85},[68,97689,1646],{"class":78},[68,97691,97692,97694,97696,97698,97700],{"class":70,"line":82},[68,97693,2447],{"class":78},[68,97695,1685],{"class":316},[68,97697,94477],{"class":78},[68,97699,1948],{"class":85},[68,97701,1646],{"class":78},[68,97703,97704,97707,97709,97712,97714,97716,97719,97721],{"class":70,"line":98},[68,97705,97706],{"class":78},"np.add(",[68,97708,1715],{"class":85},[68,97710,97711],{"class":78},",x,",[68,97713,94529],{"class":6705},[68,97715,1685],{"class":316},[68,97717,97718],{"class":78},"y[:",[68,97720,1948],{"class":85},[68,97722,6147],{"class":78},[68,97724,97725],{"class":70,"line":104},[68,97726,97727],{"class":302},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[68,97729,97730],{"class":70,"line":112},[68,97731,97732],{"class":78},"y\n",[170,97734,13002],{},[170,97736,97737],{},[801,97738],{"alt":63,"src":97739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[58,97741,97743],{"className":31862,"code":97742,"language":31864,"meta":63,"style":63},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[65,97744,97745,97761,97781,97796],{"__ignoreMap":63},[68,97746,97747,97749,97751,97753,97755,97757,97759],{"class":70,"line":71},[68,97748,2447],{"class":78},[68,97750,1685],{"class":316},[68,97752,94477],{"class":78},[68,97754,1846],{"class":85},[68,97756,2007],{"class":78},[68,97758,1973],{"class":85},[68,97760,1646],{"class":78},[68,97762,97763,97765,97767,97769,97771,97773,97775,97777,97779],{"class":70,"line":82},[68,97764,2472],{"class":78},[68,97766,1685],{"class":316},[68,97768,97677],{"class":78},[68,97770,1948],{"class":85},[68,97772,2007],{"class":78},[68,97774,94975],{"class":6705},[68,97776,1685],{"class":316},[68,97778,1643],{"class":85},[68,97780,1646],{"class":78},[68,97782,97783,97786,97788,97790,97792,97794],{"class":70,"line":98},[68,97784,97785],{"class":78},"np.add(x,",[68,97787,1715],{"class":85},[68,97789,2007],{"class":78},[68,97791,94529],{"class":6705},[68,97793,1685],{"class":316},[68,97795,94924],{"class":78},[68,97797,97798],{"class":70,"line":104},[68,97799,97800],{"class":302},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[170,97802,97803],{},"③empty_like()",[170,97805,97806],{},[268,97807,97808,97809,97814],{},"创建一个",[268,97810,97811],{},[268,97812,97813],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[170,97816,97817,97820],{},[65,97818,97819],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[170,97822,97823],{},[801,97824],{"alt":63,"src":97825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,97827,97829],{"id":97828},"_264-用法","2.6.4 ？？用法",[170,97831,97832],{},"当想查看一个函数的参数时，可以通过？？来实现",[58,97834,97836],{"className":31862,"code":97835,"language":31864,"meta":63,"style":63},"np.full??\n",[65,97837,97838],{"__ignoreMap":63},[68,97839,97840,97843],{"class":70,"line":71},[68,97841,97842],{"class":78},"np.full",[68,97844,97845],{"class":78880},"??\n",[19,97847,97849],{"id":97848},"_265-full创建数组","2.6.5 full()创建数组",[58,97851,97853],{"className":31862,"code":97852,"language":31864,"meta":63,"style":63},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[65,97854,97855,97860],{"__ignoreMap":63},[68,97856,97857],{"class":70,"line":71},[68,97858,97859],{"class":78},"full(shape,fill_value)\n",[68,97861,97862],{"class":70,"line":82},[68,97863,97864],{"class":78},"创建全为某个指定值的数组\n",[170,97866,96005],{},[58,97868,97870],{"className":31862,"code":97869,"language":31864,"meta":63,"style":63},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[65,97871,97872,97877],{"__ignoreMap":63},[68,97873,97874],{"class":70,"line":71},[68,97875,97876],{"class":302},"#创建一个一维数组,以20进行填充\n",[68,97878,97879,97882,97884,97886,97888],{"class":70,"line":82},[68,97880,97881],{"class":78},"np.full(",[68,97883,313],{"class":85},[68,97885,2007],{"class":78},[68,97887,333],{"class":85},[68,97889,1646],{"class":78},[170,97891,94766],{},[58,97893,97895],{"className":31862,"code":97894,"language":31864,"meta":63,"style":63},"#创建二维数组\nnp.full((3,5),11)\n",[65,97896,97897,97901],{"__ignoreMap":63},[68,97898,97899],{"class":70,"line":71},[68,97900,95422],{"class":302},[68,97902,97903,97906,97908,97910,97912,97914,97916],{"class":70,"line":82},[68,97904,97905],{"class":78},"np.full((",[68,97907,1709],{"class":85},[68,97909,2007],{"class":78},[68,97911,1948],{"class":85},[68,97913,43740],{"class":78},[68,97915,2100],{"class":85},[68,97917,1646],{"class":78},[170,97919,97920],{},"③full_like用法",[170,97922,97923],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[170,97925,97926],{},"这里是指定填充而已",[58,97928,97930],{"className":31862,"code":97929,"language":31864,"meta":63,"style":63},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[65,97931,97932,97937,97961,97966],{"__ignoreMap":63},[68,97933,97934],{"class":70,"line":71},[68,97935,97936],{"class":302},"#创建一个指定形状数组\n",[68,97938,97939,97941,97943,97945,97947,97949,97951,97953,97955,97957,97959],{"class":70,"line":82},[68,97940,1867],{"class":78},[68,97942,1685],{"class":316},[68,97944,94477],{"class":78},[68,97946,1846],{"class":85},[68,97948,2007],{"class":78},[68,97950,1954],{"class":85},[68,97952,94482],{"class":78},[68,97954,1922],{"class":85},[68,97956,2007],{"class":78},[68,97958,2049],{"class":85},[68,97960,1646],{"class":78},[68,97962,97963],{"class":70,"line":98},[68,97964,97965],{"class":302},"#进行指定填充\n",[68,97967,97968,97971,97973],{"class":70,"line":104},[68,97969,97970],{"class":78},"np.full_like(a,",[68,97972,313],{"class":85},[68,97974,1646],{"class":78},[170,97976,13002],{},[170,97978,97979],{},[801,97980],{"alt":63,"src":97981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,97983,97985],{"id":97984},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[245,97987,97989],{"id":97988},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[58,97991,97993],{"className":31862,"code":97992,"language":31864,"meta":63,"style":63},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[65,97994,97995,98012],{"__ignoreMap":63},[68,97996,97997,98000,98002,98004,98006,98008,98010],{"class":70,"line":71},[68,97998,97999],{"class":78},"np.eye(",[68,98001,1922],{"class":85},[68,98003,2007],{"class":78},[68,98005,94975],{"class":6705},[68,98007,1685],{"class":316},[68,98009,1643],{"class":85},[68,98011,1646],{"class":78},[68,98013,98014],{"class":70,"line":82},[68,98015,98016],{"class":302},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[245,98018,98020],{"id":98019},"_2662-法2identity","2.6.6.2 法2：identity()",[58,98022,98024],{"className":31862,"code":98023,"language":31864,"meta":63,"style":63},"#identity()\nnp.identity(5,dtype=int)\n",[65,98025,98026,98031],{"__ignoreMap":63},[68,98027,98028],{"class":70,"line":71},[68,98029,98030],{"class":302},"#identity()\n",[68,98032,98033,98036,98038,98040,98042,98044,98046],{"class":70,"line":82},[68,98034,98035],{"class":78},"np.identity(",[68,98037,1948],{"class":85},[68,98039,2007],{"class":78},[68,98041,94975],{"class":6705},[68,98043,1685],{"class":316},[68,98045,1643],{"class":85},[68,98047,1646],{"class":78},[170,98049,98050],{},"两个函数是有区别的",[170,98052,98053],{},[801,98054],{"alt":63,"src":98055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[170,98057,98058],{},[801,98059],{"alt":63,"src":98060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[58,98062,98064],{"className":31862,"code":98063,"language":31864,"meta":63,"style":63},"# 创建一个 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",[65,98065,98066,98071,98083,98088,98093,98098,98103,98107,98112,98132,98136,98141,98146],{"__ignoreMap":63},[68,98067,98068],{"class":70,"line":71},[68,98069,98070],{"class":302},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[68,98072,98073,98075,98077,98079,98081],{"class":70,"line":82},[68,98074,97999],{"class":78},[68,98076,1709],{"class":85},[68,98078,13923],{"class":78},[68,98080,1922],{"class":85},[68,98082,1646],{"class":78},[68,98084,98085],{"class":70,"line":98},[68,98086,98087],{"class":302},"# 输出:\n",[68,98089,98090],{"class":70,"line":104},[68,98091,98092],{"class":302},"# [[1. 0. 0. 0.]\n",[68,98094,98095],{"class":70,"line":112},[68,98096,98097],{"class":302},"#  [0. 1. 0. 0.]\n",[68,98099,98100],{"class":70,"line":124},[68,98101,98102],{"class":302},"#  [0. 0. 1. 0.]]\n",[68,98104,98105],{"class":70,"line":1496},[68,98106,3890],{"emptyLinePlaceholder":1567},[68,98108,98109],{"class":70,"line":1502},[68,98110,98111],{"class":302},"# 对角线向上偏移1\n",[68,98113,98114,98116,98118,98120,98122,98124,98126,98128,98130],{"class":70,"line":1510},[68,98115,97999],{"class":78},[68,98117,1709],{"class":85},[68,98119,13923],{"class":78},[68,98121,1922],{"class":85},[68,98123,13923],{"class":78},[68,98125,2121],{"class":6705},[68,98127,1685],{"class":316},[68,98129,1846],{"class":85},[68,98131,1646],{"class":78},[68,98133,98134],{"class":70,"line":1521},[68,98135,98087],{"class":302},[68,98137,98138],{"class":70,"line":3103},[68,98139,98140],{"class":302},"# [[0. 1. 0. 0.]\n",[68,98142,98143],{"class":70,"line":3108},[68,98144,98145],{"class":302},"#  [0. 0. 1. 0.]\n",[68,98147,98148],{"class":70,"line":3114},[68,98149,98150],{"class":302},"#  [0. 0. 0. 1.]]\n",[19,98152,98154],{"id":98153},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[58,98156,98158],{"className":31862,"code":98157,"language":31864,"meta":63,"style":63},"#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",[65,98159,98160,98165,98169,98174,98179,98184,98189,98194,98199,98204,98209],{"__ignoreMap":63},[68,98161,98162],{"class":70,"line":71},[68,98163,98164],{"class":302},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[68,98166,98167],{"class":70,"line":82},[68,98168,97173],{"class":1742},[68,98170,98171],{"class":70,"line":98},[68,98172,98173],{"class":1742},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[68,98175,98176],{"class":70,"line":104},[68,98177,98178],{"class":1742},"参数介绍：\n",[68,98180,98181],{"class":70,"line":112},[68,98182,98183],{"class":1742},"start：序列的起始值\n",[68,98185,98186],{"class":70,"line":124},[68,98187,98188],{"class":1742},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[68,98190,98191],{"class":70,"line":1496},[68,98192,98193],{"class":1742},"num：要生长的等步长的样本数量，默认为50\n",[68,98195,98196],{"class":70,"line":1502},[68,98197,98198],{"class":1742},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[68,98200,98201],{"class":70,"line":1510},[68,98202,98203],{"class":1742},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[68,98205,98206],{"class":70,"line":1521},[68,98207,98208],{"class":1742},"dtype：ndarry的数据类型\n",[68,98210,98211],{"class":70,"line":3103},[68,98212,97173],{"class":1742},[170,98214,98215],{},[801,98216],{"alt":63,"src":98217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[170,98219,98220],{},"这里num=是可以省略的",[170,98222,98223],{},"也就是下方两行代码结果是一模一样的",[58,98225,98227],{"className":31862,"code":98226,"language":31864,"meta":63,"style":63},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[65,98228,98229,98246],{"__ignoreMap":63},[68,98230,98231,98234,98236,98238,98240,98242,98244],{"class":70,"line":71},[68,98232,98233],{"class":78},"np.linspace(",[68,98235,1846],{"class":85},[68,98237,2007],{"class":78},[68,98239,1948],{"class":85},[68,98241,2007],{"class":78},[68,98243,1948],{"class":85},[68,98245,1646],{"class":78},[68,98247,98248,98250,98252,98254,98256,98258,98260,98262,98264],{"class":70,"line":82},[68,98249,98233],{"class":78},[68,98251,1846],{"class":85},[68,98253,2007],{"class":78},[68,98255,1948],{"class":85},[68,98257,2007],{"class":78},[68,98259,3156],{"class":6705},[68,98261,1685],{"class":316},[68,98263,1948],{"class":85},[68,98265,1646],{"class":78},[19,98267,98269],{"id":98268},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[58,98271,98273],{"className":31862,"code":98272,"language":31864,"meta":63,"style":63},"#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",[65,98274,98275,98280,98284,98289,98294,98299,98304,98308,98313,98318,98322],{"__ignoreMap":63},[68,98276,98277],{"class":70,"line":71},[68,98278,98279],{"class":302},"#logspace函数用于创建一个等比数列，格式如下：\n",[68,98281,98282],{"class":70,"line":82},[68,98283,97173],{"class":1742},[68,98285,98286],{"class":70,"line":98},[68,98287,98288],{"class":1742},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[68,98290,98291],{"class":70,"line":104},[68,98292,98293],{"class":1742},"参数为：\n",[68,98295,98296],{"class":70,"line":112},[68,98297,98298],{"class":1742},"start:序列的起始位置为：base**start\n",[68,98300,98301],{"class":70,"line":124},[68,98302,98303],{"class":1742},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[68,98305,98306],{"class":70,"line":1496},[68,98307,98193],{"class":1742},[68,98309,98310],{"class":70,"line":1502},[68,98311,98312],{"class":1742},"endpoint：是否包含 stop 这个值，默认是 True\n",[68,98314,98315],{"class":70,"line":1510},[68,98316,98317],{"class":1742},"base：对数的底数，默认是 10（常见对数）\n",[68,98319,98320],{"class":70,"line":1521},[68,98321,98208],{"class":1742},[68,98323,98324],{"class":70,"line":3103},[68,98325,97173],{"class":1742},[170,98327,98328],{},[801,98329],{"alt":63,"src":98330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[170,98332,98333],{},"logspace()函数中的num参数也是可以不写num=的",[170,98335,98336],{},"endpoint是不可以省略的",[1553,98338,98339],{},"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":63,"searchDepth":82,"depth":82,"links":98341},[98342,98346,98351,98355,98359,98360],{"id":96731,"depth":82,"text":96732,"children":98343},[98344,98345],{"id":96735,"depth":98,"text":96736},{"id":96808,"depth":98,"text":96809},{"id":96840,"depth":82,"text":96841,"children":98347},[98348,98349,98350],{"id":96844,"depth":98,"text":96845},{"id":97026,"depth":98,"text":97027},{"id":97104,"depth":98,"text":97105},{"id":97139,"depth":82,"text":97140,"children":98352},[98353,98354],{"id":97143,"depth":98,"text":97144},{"id":97200,"depth":98,"text":97201},{"id":97296,"depth":82,"text":97297,"children":98356},[98357,98358],{"id":97300,"depth":98,"text":97301},{"id":97312,"depth":98,"text":97313},{"id":97346,"depth":82,"text":97347},{"id":97383,"depth":82,"text":97384,"children":98361},[98362,98363,98364,98365,98366,98367,98368,98369],{"id":97387,"depth":98,"text":97388},{"id":97612,"depth":98,"text":97613},{"id":97619,"depth":98,"text":97620},{"id":97828,"depth":98,"text":97829},{"id":97848,"depth":98,"text":97849},{"id":97984,"depth":98,"text":97985},{"id":98153,"depth":98,"text":98154},{"id":98268,"depth":98,"text":98269},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96723,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98376,"title":98377,"body":98378,"description":1564,"extension":1565,"meta":98471,"navigation":1567,"path":98472,"seo":98473,"stem":98474,"__hash__":98475},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98379,"toc":98469},[98380,98383,98386,98389,98392,98395,98398,98401,98404,98407,98410,98413,98415,98418,98421,98426,98429,98432,98466],[10,98381,98377],{"id":98382},"_20魔法命令mprun",[170,98384,98385],{},"逐行分析数据内存的使用情况",[170,98387,98388],{},"语法格式：",[170,98390,98391],{},"%mprun -f 模块名.函数名 模块名.函数名()",[170,98393,98394],{},"分析结果列如下：",[170,98396,98397],{},"Line行号",[170,98399,98400],{},"Mem usage内存使用大小",[170,98402,98403],{},"increment内存增量",[170,98405,98406],{},"Line content代码内容",[170,98408,98409],{},"补充说明：",[170,98411,98412],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[170,98414,96678],{},[170,98416,98417],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[170,98419,98420],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[170,98422,98423],{},[801,98424],{"alt":63,"src":98425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[170,98427,98428],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[170,98430,98431],{},"这时候需要重新加载模块",[58,98433,98435],{"className":31862,"code":98434,"language":31864,"meta":63,"style":63},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[65,98436,98437,98442,98449,98454],{"__ignoreMap":63},[68,98438,98439],{"class":70,"line":71},[68,98440,98441],{"class":302},"#重新加载模块\n",[68,98443,98444,98446],{"class":70,"line":82},[68,98445,31876],{"class":316},[68,98447,98448],{"class":78}," importlib\n",[68,98450,98451],{"class":70,"line":98},[68,98452,98453],{"class":78},"importlib.reload(mprun_test)\n",[68,98455,98456,98458,98461,98463],{"class":70,"line":104},[68,98457,1957],{"class":316},[68,98459,98460],{"class":78},"mprun ",[68,98462,2160],{"class":316},[68,98464,98465],{"class":78},"f mprun_test.fun_test mprun_test.fun_test()\n",[1553,98467,98468],{},"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":63,"searchDepth":82,"depth":82,"links":98470},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98377,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98477,"title":98478,"body":98479,"description":1564,"extension":1565,"meta":98496,"navigation":1567,"path":98497,"seo":98498,"stem":98499,"__hash__":98500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98480,"toc":98494},[98481,98484,98489],[10,98482,98478],{"id":98483},"_3一维数组的索引和切片",[170,98485,98486],{},[801,98487],{"alt":63,"src":98488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[170,98490,98491],{},[801,98492],{"alt":63,"src":98493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":63,"searchDepth":82,"depth":82,"links":98495},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98478,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98502,"title":98503,"body":98504,"description":1564,"extension":1565,"meta":98987,"navigation":1567,"path":98988,"seo":98989,"stem":98990,"__hash__":98991},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98505,"toc":98985},[98506,98509,98512,98517,98550,98553,98591,98594,98628,98631,98736,98739,98776,98779,98880,98883,98934,98937,98979,98982],[10,98507,98503],{"id":98508},"_4二维数组的索引与切片",[170,98510,98511],{},"①获取指定单个元素",[170,98513,98514],{},[801,98515],{"alt":63,"src":98516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[58,98518,98520],{"className":31862,"code":98519,"language":31864,"meta":63,"style":63},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[65,98521,98522,98527,98532,98537],{"__ignoreMap":63},[68,98523,98524],{"class":70,"line":71},[68,98525,98526],{"class":302},"#获取元素9\n",[68,98528,98529],{"class":70,"line":82},[68,98530,98531],{"class":302},"#先获取所在行，再获取所在列\n",[68,98533,98534],{"class":70,"line":98},[68,98535,98536],{"class":302},"#数组[行索引号，列索引号]\n",[68,98538,98539,98542,98544,98546,98548],{"class":70,"line":104},[68,98540,98541],{"class":78},"a[",[68,98543,1846],{"class":85},[68,98545,2007],{"class":78},[68,98547,1715],{"class":85},[68,98549,34730],{"class":78},[170,98551,98552],{},"②获取整行元素",[58,98554,98556],{"className":31862,"code":98555,"language":31864,"meta":63,"style":63},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[65,98557,98558,98563,98568,98576,98581],{"__ignoreMap":63},[68,98559,98560],{"class":70,"line":71},[68,98561,98562],{"class":302},"#获取整行 数组[行索引号]\n",[68,98564,98565],{"class":70,"line":82},[68,98566,98567],{"class":302},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[68,98569,98570,98572,98574],{"class":70,"line":98},[68,98571,98541],{"class":78},[68,98573,1715],{"class":85},[68,98575,34730],{"class":78},[68,98577,98578],{"class":70,"line":104},[68,98579,98580],{"class":302},"#也可以负索引获取一行\n",[68,98582,98583,98585,98587,98589],{"class":70,"line":112},[68,98584,98541],{"class":78},[68,98586,2160],{"class":316},[68,98588,1846],{"class":85},[68,98590,34730],{"class":78},[170,98592,98593],{},"③获取整列元素",[58,98595,98597],{"className":31862,"code":98596,"language":31864,"meta":63,"style":63},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[65,98598,98599,98604,98613,98618],{"__ignoreMap":63},[68,98600,98601],{"class":70,"line":71},[68,98602,98603],{"class":302},"#获取整列 数组名[:,列索引]\n",[68,98605,98606,98609,98611],{"class":70,"line":82},[68,98607,98608],{"class":78},"a[:,",[68,98610,1715],{"class":85},[68,98612,34730],{"class":78},[68,98614,98615],{"class":70,"line":98},[68,98616,98617],{"class":302},"#也可以负索引获取一列\n",[68,98619,98620,98622,98624,98626],{"class":70,"line":104},[68,98621,98608],{"class":78},[68,98623,2160],{"class":316},[68,98625,1846],{"class":85},[68,98627,34730],{"class":78},[170,98629,98630],{},"④部分行部分列的元素",[58,98632,98634],{"className":31862,"code":98633,"language":31864,"meta":63,"style":63},"#部分行部分列 数组名[行切片，列切片]\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",[65,98635,98636,98641,98651,98655,98659,98664,98669,98673,98685,98689,98693,98698,98703,98708,98713,98717,98722],{"__ignoreMap":63},[68,98637,98638],{"class":70,"line":71},[68,98639,98640],{"class":302},"#部分行部分列 数组名[行切片，列切片]\n",[68,98642,98643,98646,98648],{"class":70,"line":82},[68,98644,98645],{"class":78},"a[:",[68,98647,1715],{"class":85},[68,98649,98650],{"class":78},",:]\n",[68,98652,98653],{"class":70,"line":98},[68,98654,95039],{"class":302},[68,98656,98657],{"class":70,"line":104},[68,98658,95403],{"class":1742},[68,98660,98661],{"class":70,"line":112},[68,98662,98663],{"class":1742},"array([[ 1,  2,  3,  4,  5,  6],\n",[68,98665,98666],{"class":70,"line":124},[68,98667,98668],{"class":1742},"       [ 7,  8,  9, 10, 11, 12]])\n",[68,98670,98671],{"class":70,"line":1496},[68,98672,95403],{"class":1742},[68,98674,98675,98677,98679,98681,98683],{"class":70,"line":1502},[68,98676,98608],{"class":78},[68,98678,1846],{"class":85},[68,98680,2486],{"class":78},[68,98682,1922],{"class":85},[68,98684,34730],{"class":78},[68,98686,98687],{"class":70,"line":1510},[68,98688,95039],{"class":302},[68,98690,98691],{"class":70,"line":1521},[68,98692,95403],{"class":1742},[68,98694,98695],{"class":70,"line":3103},[68,98696,98697],{"class":1742},"array([[ 2,  3,  4],\n",[68,98699,98700],{"class":70,"line":3108},[68,98701,98702],{"class":1742},"       [ 8,  9, 10],\n",[68,98704,98705],{"class":70,"line":3114},[68,98706,98707],{"class":1742},"       [14, 15, 16],\n",[68,98709,98710],{"class":70,"line":3119},[68,98711,98712],{"class":1742},"       [20, 21, 22]])\n",[68,98714,98715],{"class":70,"line":3133},[68,98716,95403],{"class":1742},[68,98718,98719],{"class":70,"line":3138},[68,98720,98721],{"class":302},"#对列行同时进行切片，使用了step参数\n",[68,98723,98724,98727,98729,98732,98734],{"class":70,"line":3144},[68,98725,98726],{"class":78},"a[::",[68,98728,1715],{"class":85},[68,98730,98731],{"class":78},",::",[68,98733,1715],{"class":85},[68,98735,34730],{"class":78},[170,98737,98738],{},"⑤同时获取两个元素",[58,98740,98742],{"className":31862,"code":98741,"language":31864,"meta":63,"style":63},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[65,98743,98744,98749,98754],{"__ignoreMap":63},[68,98745,98746],{"class":70,"line":71},[68,98747,98748],{"class":302},"#同时获取第三行第二列，第四行第一列\n",[68,98750,98751],{"class":70,"line":82},[68,98752,98753],{"class":302},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[68,98755,98756,98759,98761,98763,98765,98767,98769,98771,98773],{"class":70,"line":98},[68,98757,98758],{"class":78},"a[(",[68,98760,1715],{"class":85},[68,98762,2007],{"class":78},[68,98764,1709],{"class":85},[68,98766,43731],{"class":78},[68,98768,1846],{"class":85},[68,98770,2007],{"class":78},[68,98772,1248],{"class":85},[68,98774,98775],{"class":78},")]\n",[170,98777,98778],{},"⑥切片，对行进行反向获取",[58,98780,98782],{"className":31862,"code":98781,"language":31864,"meta":63,"style":63},"#切片 对所有行进行反向获取\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",[65,98783,98784,98789,98799,98803,98807,98812,98817,98822,98827,98831,98836,98852,98856,98861,98866,98871,98876],{"__ignoreMap":63},[68,98785,98786],{"class":70,"line":71},[68,98787,98788],{"class":302},"#切片 对所有行进行反向获取\n",[68,98790,98791,98793,98795,98797],{"class":70,"line":82},[68,98792,98726],{"class":78},[68,98794,2160],{"class":316},[68,98796,1846],{"class":85},[68,98798,34730],{"class":78},[68,98800,98801],{"class":70,"line":98},[68,98802,95039],{"class":302},[68,98804,98805],{"class":70,"line":104},[68,98806,95403],{"class":1742},[68,98808,98809],{"class":70,"line":112},[68,98810,98811],{"class":1742},"array([[19, 20, 21, 22, 23, 24],\n",[68,98813,98814],{"class":70,"line":124},[68,98815,98816],{"class":1742},"       [13, 14, 15, 16, 17, 18],\n",[68,98818,98819],{"class":70,"line":1496},[68,98820,98821],{"class":1742},"       [ 7,  8,  9, 10, 11, 12],\n",[68,98823,98824],{"class":70,"line":1502},[68,98825,98826],{"class":1742},"       [ 1,  2,  3,  4,  5,  6]])\n",[68,98828,98829],{"class":70,"line":1510},[68,98830,95403],{"class":1742},[68,98832,98833],{"class":70,"line":1521},[68,98834,98835],{"class":302},"#对行列都进行反向切片获取\n",[68,98837,98838,98840,98842,98844,98846,98848,98850],{"class":70,"line":3103},[68,98839,98726],{"class":78},[68,98841,2160],{"class":316},[68,98843,1846],{"class":85},[68,98845,98731],{"class":78},[68,98847,2160],{"class":316},[68,98849,1846],{"class":85},[68,98851,34730],{"class":78},[68,98853,98854],{"class":70,"line":3108},[68,98855,95403],{"class":1742},[68,98857,98858],{"class":70,"line":3114},[68,98859,98860],{"class":1742},"array([[24, 23, 22, 21, 20, 19],\n",[68,98862,98863],{"class":70,"line":3119},[68,98864,98865],{"class":1742},"       [18, 17, 16, 15, 14, 13],\n",[68,98867,98868],{"class":70,"line":3133},[68,98869,98870],{"class":1742},"       [12, 11, 10,  9,  8,  7],\n",[68,98872,98873],{"class":70,"line":3138},[68,98874,98875],{"class":1742},"       [ 6,  5,  4,  3,  2,  1]])\n",[68,98877,98878],{"class":70,"line":3144},[68,98879,95403],{"class":1742},[170,98881,98882],{},"⑦修改元素",[58,98884,98886],{"className":31862,"code":98885,"language":31864,"meta":63,"style":63},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[65,98887,98888,98893,98911,98916],{"__ignoreMap":63},[68,98889,98890],{"class":70,"line":71},[68,98891,98892],{"class":302},"#获取前两行和前两列\n",[68,98894,98895,98898,98900,98902,98904,98907,98909],{"class":70,"line":82},[68,98896,98897],{"class":78},"sub_a",[68,98899,1685],{"class":316},[68,98901,98645],{"class":78},[68,98903,1715],{"class":85},[68,98905,98906],{"class":78},",:",[68,98908,1715],{"class":85},[68,98910,34730],{"class":78},[68,98912,98913],{"class":70,"line":98},[68,98914,98915],{"class":302},"#修改sub_a第一个元素的值\n",[68,98917,98918,98921,98923,98925,98927,98929,98931],{"class":70,"line":104},[68,98919,98920],{"class":78},"sub_a[",[68,98922,1248],{"class":85},[68,98924,2007],{"class":78},[68,98926,1248],{"class":85},[68,98928,2567],{"class":78},[68,98930,1685],{"class":316},[68,98932,98933],{"class":85},"100\n",[170,98935,98936],{},"⑧数组复制copy()",[58,98938,98940],{"className":31862,"code":98939,"language":31864,"meta":63,"style":63},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[65,98941,98942,98947,98957,98962],{"__ignoreMap":63},[68,98943,98944],{"class":70,"line":71},[68,98945,98946],{"class":302},"#数组复制\n",[68,98948,98949,98952,98954],{"class":70,"line":82},[68,98950,98951],{"class":78},"copy_a",[68,98953,1685],{"class":316},[68,98955,98956],{"class":78},"np.copy(sub_a)\n",[68,98958,98959],{"class":70,"line":98},[68,98960,98961],{"class":302},"#修改copy_a后不影响原数组\n",[68,98963,98964,98967,98969,98971,98973,98975,98977],{"class":70,"line":104},[68,98965,98966],{"class":78},"copy_a[",[68,98968,1248],{"class":85},[68,98970,2007],{"class":78},[68,98972,1248],{"class":85},[68,98974,2567],{"class":78},[68,98976,1685],{"class":316},[68,98978,98933],{"class":85},[170,98980,98981],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1553,98983,98984],{},"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":63,"searchDepth":82,"depth":82,"links":98986},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98503,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98993,"title":98994,"body":98995,"description":1564,"extension":1565,"meta":99487,"navigation":1567,"path":99488,"seo":99489,"stem":99490,"__hash__":99491},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98996,"toc":99479},[98997,99000,99004,99007,99010,99063,99066,99091,99094,99113,99133,99136,99152,99156,99202,99206,99248,99252,99255,99258,99261,99264,99267,99329,99389,99393,99396,99453,99457,99462,99471,99476],[10,98998,98994],{"id":98999},"_5改变数组的维度",[14,99001,99003],{"id":99002},"_51-使用reshape","5.1 使用reshape()",[170,99005,99006],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[170,99008,99009],{},"①一维数组转换为二维数组",[58,99011,99013],{"className":31862,"code":99012,"language":31864,"meta":63,"style":63},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[65,99014,99015,99031,99036,99041,99046],{"__ignoreMap":63},[68,99016,99017,99019,99021,99023,99025,99027,99029],{"class":70,"line":71},[68,99018,1867],{"class":78},[68,99020,1685],{"class":316},[68,99022,94477],{"class":78},[68,99024,1846],{"class":85},[68,99026,2007],{"class":78},[68,99028,2151],{"class":85},[68,99030,1646],{"class":78},[68,99032,99033],{"class":70,"line":82},[68,99034,99035],{"class":302},"#将一维数组进行转换\n",[68,99037,99038],{"class":70,"line":98},[68,99039,99040],{"class":302},"#注意点：元素个数不可以变\n",[68,99042,99043],{"class":70,"line":104},[68,99044,99045],{"class":302},"#转换维度要保持一致，不一致就异常！！！\n",[68,99047,99048,99050,99052,99055,99057,99059,99061],{"class":70,"line":112},[68,99049,94781],{"class":78},[68,99051,1685],{"class":316},[68,99053,99054],{"class":78},"a.reshape(",[68,99056,1715],{"class":85},[68,99058,2007],{"class":78},[68,99060,1973],{"class":85},[68,99062,1646],{"class":78},[170,99064,99065],{},"②一维数组转换为三维数组",[58,99067,99069],{"className":31862,"code":99068,"language":31864,"meta":63,"style":63},"aaa=a.reshape(2,3,2)\n",[65,99070,99071],{"__ignoreMap":63},[68,99072,99073,99075,99077,99079,99081,99083,99085,99087,99089],{"class":70,"line":71},[68,99074,96996],{"class":78},[68,99076,1685],{"class":316},[68,99078,99054],{"class":78},[68,99080,1715],{"class":85},[68,99082,2007],{"class":78},[68,99084,1709],{"class":85},[68,99086,2007],{"class":78},[68,99088,1715],{"class":85},[68,99090,1646],{"class":78},[170,99092,99093],{},"③二维数组转化为一维数组",[58,99095,99097],{"className":31862,"code":99096,"language":31864,"meta":63,"style":63},"#知道元素个数：\naa.reshape(12)\n",[65,99098,99099,99104],{"__ignoreMap":63},[68,99100,99101],{"class":70,"line":71},[68,99102,99103],{"class":302},"#知道元素个数：\n",[68,99105,99106,99109,99111],{"class":70,"line":82},[68,99107,99108],{"class":78},"aa.reshape(",[68,99110,2126],{"class":85},[68,99112,1646],{"class":78},[58,99114,99116],{"className":31862,"code":99115,"language":31864,"meta":63,"style":63},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[65,99117,99118,99123],{"__ignoreMap":63},[68,99119,99120],{"class":70,"line":71},[68,99121,99122],{"class":302},"#不知道元素个数，参数传递-1\n",[68,99124,99125,99127,99129,99131],{"class":70,"line":82},[68,99126,99108],{"class":78},[68,99128,2160],{"class":316},[68,99130,1846],{"class":85},[68,99132,1646],{"class":78},[170,99134,99135],{},"④三维数组转换为一维数组",[58,99137,99139],{"className":31862,"code":99138,"language":31864,"meta":63,"style":63},"aaa.reshape(-1)\n",[65,99140,99141],{"__ignoreMap":63},[68,99142,99143,99146,99148,99150],{"class":70,"line":71},[68,99144,99145],{"class":78},"aaa.reshape(",[68,99147,2160],{"class":316},[68,99149,1846],{"class":85},[68,99151,1646],{"class":78},[14,99153,99155],{"id":99154},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[58,99157,99159],{"className":31862,"code":99158,"language":31864,"meta":63,"style":63},"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",[65,99160,99161,99188,99193,99197],{"__ignoreMap":63},[68,99162,99163,99165,99167,99169,99171,99173,99175,99177,99179,99181,99183,99185],{"class":70,"line":71},[68,99164,94781],{"class":78},[68,99166,1685],{"class":316},[68,99168,94477],{"class":78},[68,99170,1846],{"class":85},[68,99172,2007],{"class":78},[68,99174,2151],{"class":85},[68,99176,94482],{"class":78},[68,99178,1715],{"class":85},[68,99180,2007],{"class":78},[68,99182,1973],{"class":85},[68,99184,2058],{"class":78},[68,99186,99187],{"class":302},"#转换为2行6列的数组\n",[68,99189,99190],{"class":70,"line":82},[68,99191,99192],{"class":78},"aa.revel()\n",[68,99194,99195],{"class":70,"line":98},[68,99196,95039],{"class":302},[68,99198,99199],{"class":70,"line":104},[68,99200,99201],{"class":302},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99203,99205],{"id":99204},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[58,99207,99209],{"className":31862,"code":99208,"language":31864,"meta":63,"style":63},"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",[65,99210,99211,99235,99240,99244],{"__ignoreMap":63},[68,99212,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233],{"class":70,"line":71},[68,99214,94781],{"class":78},[68,99216,1685],{"class":316},[68,99218,94477],{"class":78},[68,99220,1846],{"class":85},[68,99222,2007],{"class":78},[68,99224,2151],{"class":85},[68,99226,94482],{"class":78},[68,99228,1715],{"class":85},[68,99230,2007],{"class":78},[68,99232,1973],{"class":85},[68,99234,1646],{"class":78},[68,99236,99237],{"class":70,"line":82},[68,99238,99239],{"class":78},"aa.flatten()\n",[68,99241,99242],{"class":70,"line":98},[68,99243,95039],{"class":302},[68,99245,99246],{"class":70,"line":104},[68,99247,99201],{"class":302},[14,99249,99251],{"id":99250},"_54-使用resize","5.4 使用resize()",[170,99253,99254],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[170,99256,99257],{},"通过resize方法可以改变数组的维度",[170,99259,99260],{},"#resize修改数组维度",[170,99262,99263],{},"#以元组的形式指定形状",[170,99265,99266],{},"#改变的是原数组",[58,99268,99270],{"className":31862,"code":99269,"language":31864,"meta":63,"style":63},"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",[65,99271,99272,99288,99308,99321,99325],{"__ignoreMap":63},[68,99273,99274,99276,99278,99280,99282,99284,99286],{"class":70,"line":71},[68,99275,1867],{"class":78},[68,99277,1685],{"class":316},[68,99279,94477],{"class":78},[68,99281,1846],{"class":85},[68,99283,2007],{"class":78},[68,99285,2151],{"class":85},[68,99287,1646],{"class":78},[68,99289,99290,99293,99295,99297,99299,99301,99303,99305],{"class":70,"line":82},[68,99291,99292],{"class":78},"a.shape",[68,99294,1685],{"class":316},[68,99296,1640],{"class":78},[68,99298,1715],{"class":85},[68,99300,2007],{"class":78},[68,99302,1973],{"class":85},[68,99304,2058],{"class":78},[68,99306,99307],{"class":302},"#改变了原数组\n",[68,99309,99310,99312,99314,99317,99319],{"class":70,"line":98},[68,99311,1867],{"class":78},[68,99313,1685],{"class":316},[68,99315,99316],{"class":78},"resize((",[68,99318,2126],{"class":85},[68,99320,31981],{"class":78},[68,99322,99323],{"class":70,"line":104},[68,99324,95039],{"class":302},[68,99326,99327],{"class":70,"line":112},[68,99328,99201],{"class":302},[58,99330,99332],{"className":31862,"code":99331,"language":31864,"meta":63,"style":63},"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",[65,99333,99334,99347,99351,99355,99360,99365,99370,99375,99380,99385],{"__ignoreMap":63},[68,99335,99336,99339,99341,99343,99345],{"class":70,"line":71},[68,99337,99338],{"class":78},"a.resize((",[68,99340,1973],{"class":85},[68,99342,2007],{"class":78},[68,99344,1715],{"class":85},[68,99346,31981],{"class":78},[68,99348,99349],{"class":70,"line":82},[68,99350,95039],{"class":302},[68,99352,99353],{"class":70,"line":98},[68,99354,95403],{"class":1742},[68,99356,99357],{"class":70,"line":104},[68,99358,99359],{"class":1742},"array([[ 1,  2],\n",[68,99361,99362],{"class":70,"line":112},[68,99363,99364],{"class":1742},"       [ 3,  4],\n",[68,99366,99367],{"class":70,"line":124},[68,99368,99369],{"class":1742},"       [ 5,  6],\n",[68,99371,99372],{"class":70,"line":1496},[68,99373,99374],{"class":1742},"       [ 7,  8],\n",[68,99376,99377],{"class":70,"line":1502},[68,99378,99379],{"class":1742},"       [ 9, 10],\n",[68,99381,99382],{"class":70,"line":1510},[68,99383,99384],{"class":1742},"       [11, 12]])\n",[68,99386,99387],{"class":70,"line":1521},[68,99388,95403],{"class":1742},[14,99390,99392],{"id":99391},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[170,99394,99395],{},"改变了原数组",[58,99397,99399],{"className":31862,"code":99398,"language":31864,"meta":63,"style":63},"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",[65,99400,99401,99417,99433,99437,99441,99445,99449],{"__ignoreMap":63},[68,99402,99403,99405,99407,99409,99411,99413,99415],{"class":70,"line":71},[68,99404,1867],{"class":78},[68,99406,1685],{"class":316},[68,99408,94477],{"class":78},[68,99410,1846],{"class":85},[68,99412,2007],{"class":78},[68,99414,2151],{"class":85},[68,99416,1646],{"class":78},[68,99418,99419,99421,99423,99425,99427,99429,99431],{"class":70,"line":82},[68,99420,99292],{"class":78},[68,99422,1685],{"class":316},[68,99424,1640],{"class":78},[68,99426,1715],{"class":85},[68,99428,2007],{"class":78},[68,99430,1973],{"class":85},[68,99432,1646],{"class":78},[68,99434,99435],{"class":70,"line":98},[68,99436,95039],{"class":302},[68,99438,99439],{"class":70,"line":104},[68,99440,95403],{"class":1742},[68,99442,99443],{"class":70,"line":112},[68,99444,98663],{"class":1742},[68,99446,99447],{"class":70,"line":124},[68,99448,98668],{"class":1742},[68,99450,99451],{"class":70,"line":1496},[68,99452,95403],{"class":1742},[14,99454,99456],{"id":99455},"_56-重要比较","5.6 重要比较：",[170,99458,99459],{},[801,99460],{"alt":63,"src":99461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[170,99463,99464,99465,99467,99468,99470],{},"口诀：NumPy 函数要么用 ",[65,99466,97438],{},"，要么用 ",[65,99469,32980],{},"，创建结构用 shape，造数据用 size",[170,99472,99473],{},[801,99474],{"alt":63,"src":99475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1553,99477,99478],{},"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":63,"searchDepth":82,"depth":82,"links":99480},[99481,99482,99483,99484,99485,99486],{"id":99002,"depth":82,"text":99003},{"id":99154,"depth":82,"text":99155},{"id":99204,"depth":82,"text":99205},{"id":99250,"depth":82,"text":99251},{"id":99391,"depth":82,"text":99392},{"id":99455,"depth":82,"text":99456},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98994,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99493,"title":99494,"body":99495,"description":1564,"extension":1565,"meta":100567,"navigation":1567,"path":100568,"seo":100569,"stem":100570,"__hash__":100571},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99496,"toc":100561},[99497,99500,99504,99507,99510,99513,99578,99581,99621,99624,99706,99709,99714,99736,99738,99743,99748,99751,99754,99909,99912,100114,100118,100121,100124,100192,100194,100199,100202,100205,100285,100289,100292,100294,100367,100369,100374,100376,100456,100460,100463,100466,100469,100472,100475,100478,100558],[10,99498,99494],{"id":99499},"_6数组的拼接",[14,99501,99503],{"id":99502},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[170,99505,99506],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[170,99508,99509],{},"函数内部传两个数列构成的数列或者元组",[170,99511,99512],{},"①一维数组的拼接",[58,99514,99516],{"className":31862,"code":99515,"language":31864,"meta":63,"style":63},"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",[65,99517,99518,99538,99558,99563,99568,99573],{"__ignoreMap":63},[68,99519,99520,99522,99524,99526,99528,99530,99532,99534,99536],{"class":70,"line":71},[68,99521,1867],{"class":78},[68,99523,1685],{"class":316},[68,99525,94499],{"class":78},[68,99527,1846],{"class":85},[68,99529,2007],{"class":78},[68,99531,1715],{"class":85},[68,99533,2007],{"class":78},[68,99535,1709],{"class":85},[68,99537,6147],{"class":78},[68,99539,99540,99542,99544,99546,99548,99550,99552,99554,99556],{"class":70,"line":82},[68,99541,1892],{"class":78},[68,99543,1685],{"class":316},[68,99545,94499],{"class":78},[68,99547,1922],{"class":85},[68,99549,2007],{"class":78},[68,99551,1948],{"class":85},[68,99553,2007],{"class":78},[68,99555,1973],{"class":85},[68,99557,6147],{"class":78},[68,99559,99560],{"class":70,"line":98},[68,99561,99562],{"class":302},"#调用concatenate进行数组拼接\n",[68,99564,99565],{"class":70,"line":104},[68,99566,99567],{"class":78},"np.concatenate((a,b))\n",[68,99569,99570],{"class":70,"line":112},[68,99571,99572],{"class":302},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[68,99574,99575],{"class":70,"line":124},[68,99576,99577],{"class":302},"#np.concatenate([a,b])\n",[170,99579,99580],{},"②一维多个数组拼接",[58,99582,99584],{"className":31862,"code":99583,"language":31864,"meta":63,"style":63},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[65,99585,99586,99591,99611,99616],{"__ignoreMap":63},[68,99587,99588],{"class":70,"line":71},[68,99589,99590],{"class":302},"#也可以多个数组进行拼接\n",[68,99592,99593,99595,99597,99599,99601,99603,99605,99607,99609],{"class":70,"line":82},[68,99594,1917],{"class":78},[68,99596,1685],{"class":316},[68,99598,94499],{"class":78},[68,99600,313],{"class":85},[68,99602,2007],{"class":78},[68,99604,2100],{"class":85},[68,99606,2007],{"class":78},[68,99608,2151],{"class":85},[68,99610,6147],{"class":78},[68,99612,99613],{"class":70,"line":98},[68,99614,99615],{"class":78},"c\n",[68,99617,99618],{"class":70,"line":104},[68,99619,99620],{"class":78},"np.concatenate((a,b,c))\n",[170,99622,99623],{},"③二维数组拼接",[58,99625,99627],{"className":31862,"code":99626,"language":31864,"meta":63,"style":63},"#二维数组使用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",[65,99628,99629,99634,99658,99683,99688,99693],{"__ignoreMap":63},[68,99630,99631],{"class":70,"line":71},[68,99632,99633],{"class":302},"#二维数组使用concatenate进行拼接\n",[68,99635,99636,99638,99640,99642,99644,99646,99648,99650,99652,99654,99656],{"class":70,"line":82},[68,99637,94781],{"class":78},[68,99639,1685],{"class":316},[68,99641,94477],{"class":78},[68,99643,1846],{"class":85},[68,99645,2007],{"class":78},[68,99647,2151],{"class":85},[68,99649,94482],{"class":78},[68,99651,1709],{"class":85},[68,99653,2007],{"class":78},[68,99655,1922],{"class":85},[68,99657,1646],{"class":78},[68,99659,99660,99663,99665,99667,99669,99671,99673,99675,99677,99679,99681],{"class":70,"line":98},[68,99661,99662],{"class":78},"bb",[68,99664,1685],{"class":316},[68,99666,94477],{"class":78},[68,99668,1966],{"class":85},[68,99670,2007],{"class":78},[68,99672,2270],{"class":85},[68,99674,94482],{"class":78},[68,99676,1709],{"class":85},[68,99678,2007],{"class":78},[68,99680,1922],{"class":85},[68,99682,1646],{"class":78},[68,99684,99685],{"class":70,"line":104},[68,99686,99687],{"class":302},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[68,99689,99690],{"class":70,"line":112},[68,99691,99692],{"class":302},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[68,99694,99695,99698,99700,99702,99704],{"class":70,"line":124},[68,99696,99697],{"class":78},"np.concatenate((aa,bb),",[68,99699,48998],{"class":6705},[68,99701,1685],{"class":316},[68,99703,1248],{"class":85},[68,99705,1646],{"class":78},[170,99707,99708],{},"结果：",[170,99710,99711],{},[801,99712],{"alt":63,"src":99713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[58,99715,99717],{"className":31862,"code":99716,"language":31864,"meta":63,"style":63},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[65,99718,99719,99724],{"__ignoreMap":63},[68,99720,99721],{"class":70,"line":71},[68,99722,99723],{"class":302},"#指定axis为1进行拼接\n",[68,99725,99726,99728,99730,99732,99734],{"class":70,"line":82},[68,99727,99697],{"class":78},[68,99729,48998],{"class":6705},[68,99731,1685],{"class":316},[68,99733,1846],{"class":85},[68,99735,1646],{"class":78},[170,99737,99708],{},[170,99739,99740],{},[801,99741],{"alt":63,"src":99742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[170,99744,99745],{},[268,99746,99747],{},"二维数组总结：0竖着方向，1横着方向",[170,99749,99750],{},"④三维数组拼接",[170,99752,99753],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[58,99755,99757],{"className":31862,"code":99756,"language":31864,"meta":63,"style":63},"#两个三行六列\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",[65,99758,99759,99764,99792,99822,99827,99844,99849,99854,99859,99876,99881,99886,99891,99904],{"__ignoreMap":63},[68,99760,99761],{"class":70,"line":71},[68,99762,99763],{"class":302},"#两个三行六列\n",[68,99765,99766,99768,99770,99772,99774,99776,99778,99780,99782,99784,99786,99788,99790],{"class":70,"line":82},[68,99767,96996],{"class":78},[68,99769,1685],{"class":316},[68,99771,94477],{"class":78},[68,99773,1846],{"class":85},[68,99775,2007],{"class":78},[68,99777,1954],{"class":85},[68,99779,94482],{"class":78},[68,99781,1715],{"class":85},[68,99783,2007],{"class":78},[68,99785,1709],{"class":85},[68,99787,2007],{"class":78},[68,99789,1973],{"class":85},[68,99791,1646],{"class":78},[68,99793,99794,99797,99799,99801,99803,99805,99808,99810,99812,99814,99816,99818,99820],{"class":70,"line":98},[68,99795,99796],{"class":78},"bbb",[68,99798,1685],{"class":316},[68,99800,94477],{"class":78},[68,99802,1966],{"class":85},[68,99804,2007],{"class":78},[68,99806,99807],{"class":85},"137",[68,99809,94482],{"class":78},[68,99811,1715],{"class":85},[68,99813,2007],{"class":78},[68,99815,1709],{"class":85},[68,99817,2007],{"class":78},[68,99819,1973],{"class":85},[68,99821,1646],{"class":78},[68,99823,99824],{"class":70,"line":104},[68,99825,99826],{"class":302},"#axis=0\n",[68,99828,99829,99831,99833,99836,99838,99840,99842],{"class":70,"line":112},[68,99830,2323],{"class":78},[68,99832,1685],{"class":316},[68,99834,99835],{"class":78},"np.concatenate((aaa,bbb),",[68,99837,48998],{"class":6705},[68,99839,1685],{"class":316},[68,99841,1248],{"class":85},[68,99843,1646],{"class":78},[68,99845,99846],{"class":70,"line":124},[68,99847,99848],{"class":78},"s.shape\n",[68,99850,99851],{"class":70,"line":1496},[68,99852,99853],{"class":302},"#输出：(4,3,6)\n",[68,99855,99856],{"class":70,"line":1502},[68,99857,99858],{"class":302},"#axis=1\n",[68,99860,99861,99864,99866,99868,99870,99872,99874],{"class":70,"line":1510},[68,99862,99863],{"class":78},"ss",[68,99865,1685],{"class":316},[68,99867,99835],{"class":78},[68,99869,48998],{"class":6705},[68,99871,1685],{"class":316},[68,99873,1846],{"class":85},[68,99875,1646],{"class":78},[68,99877,99878],{"class":70,"line":1521},[68,99879,99880],{"class":78},"ss.shape\n",[68,99882,99883],{"class":70,"line":3103},[68,99884,99885],{"class":302},"#输出：(2,6,6)\n",[68,99887,99888],{"class":70,"line":3108},[68,99889,99890],{"class":302},"#axis=2\n",[68,99892,99893,99895,99897,99899,99901],{"class":70,"line":3114},[68,99894,99835],{"class":78},[68,99896,48998],{"class":6705},[68,99898,1685],{"class":316},[68,99900,1715],{"class":85},[68,99902,99903],{"class":78},").shape\n",[68,99905,99906],{"class":70,"line":3119},[68,99907,99908],{"class":302},"#输出：（2，3，12）\n",[170,99910,99911],{},"⑤四维数组拼接",[58,99913,99915],{"className":31862,"code":99914,"language":31864,"meta":63,"style":63},"#两个三行六列\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",[65,99916,99917,99921,99949,99977,100002,100028,100032,100045,100050,100054,100066,100071,100075,100087,100092,100097,100109],{"__ignoreMap":63},[68,99918,99919],{"class":70,"line":71},[68,99920,99763],{"class":302},[68,99922,99923,99925,99927,99929,99931,99933,99935,99937,99939,99941,99943,99945,99947],{"class":70,"line":82},[68,99924,96996],{"class":78},[68,99926,1685],{"class":316},[68,99928,94477],{"class":78},[68,99930,1846],{"class":85},[68,99932,2007],{"class":78},[68,99934,1954],{"class":85},[68,99936,94482],{"class":78},[68,99938,1715],{"class":85},[68,99940,2007],{"class":78},[68,99942,1709],{"class":85},[68,99944,2007],{"class":78},[68,99946,1973],{"class":85},[68,99948,1646],{"class":78},[68,99950,99951,99953,99955,99957,99959,99961,99963,99965,99967,99969,99971,99973,99975],{"class":70,"line":98},[68,99952,99796],{"class":78},[68,99954,1685],{"class":316},[68,99956,94477],{"class":78},[68,99958,1966],{"class":85},[68,99960,2007],{"class":78},[68,99962,99807],{"class":85},[68,99964,94482],{"class":78},[68,99966,1715],{"class":85},[68,99968,2007],{"class":78},[68,99970,1709],{"class":85},[68,99972,2007],{"class":78},[68,99974,1973],{"class":85},[68,99976,1646],{"class":78},[68,99978,99979,99982,99984,99986,99988,99990,99992,99994,99996,99998,100000],{"class":70,"line":104},[68,99980,99981],{"class":78},"aaaa",[68,99983,1685],{"class":316},[68,99985,99145],{"class":78},[68,99987,1715],{"class":85},[68,99989,2007],{"class":78},[68,99991,1709],{"class":85},[68,99993,2007],{"class":78},[68,99995,1709],{"class":85},[68,99997,2007],{"class":78},[68,99999,1715],{"class":85},[68,100001,1646],{"class":78},[68,100003,100004,100007,100009,100012,100014,100016,100018,100020,100022,100024,100026],{"class":70,"line":112},[68,100005,100006],{"class":78},"bbbb",[68,100008,1685],{"class":316},[68,100010,100011],{"class":78},"bbb.reshape(",[68,100013,1715],{"class":85},[68,100015,2007],{"class":78},[68,100017,1709],{"class":85},[68,100019,2007],{"class":78},[68,100021,1709],{"class":85},[68,100023,2007],{"class":78},[68,100025,1715],{"class":85},[68,100027,1646],{"class":78},[68,100029,100030],{"class":70,"line":124},[68,100031,99826],{"class":302},[68,100033,100034,100037,100039,100041,100043],{"class":70,"line":1496},[68,100035,100036],{"class":78},"np.concatenate((aaaa,bbbb),",[68,100038,48998],{"class":6705},[68,100040,1685],{"class":316},[68,100042,1248],{"class":85},[68,100044,99903],{"class":78},[68,100046,100047],{"class":70,"line":1502},[68,100048,100049],{"class":302},"#结果：（4，3，3，2）\n",[68,100051,100052],{"class":70,"line":1510},[68,100053,99858],{"class":302},[68,100055,100056,100058,100060,100062,100064],{"class":70,"line":1521},[68,100057,100036],{"class":78},[68,100059,48998],{"class":6705},[68,100061,1685],{"class":316},[68,100063,1846],{"class":85},[68,100065,99903],{"class":78},[68,100067,100068],{"class":70,"line":3103},[68,100069,100070],{"class":302},"#结果：（2，6，3，2）\n",[68,100072,100073],{"class":70,"line":3108},[68,100074,99890],{"class":302},[68,100076,100077,100079,100081,100083,100085],{"class":70,"line":3114},[68,100078,100036],{"class":78},[68,100080,48998],{"class":6705},[68,100082,1685],{"class":316},[68,100084,1715],{"class":85},[68,100086,99903],{"class":78},[68,100088,100089],{"class":70,"line":3119},[68,100090,100091],{"class":302},"#结果：（2，3，6，2）\n",[68,100093,100094],{"class":70,"line":3133},[68,100095,100096],{"class":302},"#axis=3\n",[68,100098,100099,100101,100103,100105,100107],{"class":70,"line":3138},[68,100100,100036],{"class":78},[68,100102,48998],{"class":6705},[68,100104,1685],{"class":316},[68,100106,1709],{"class":85},[68,100108,99903],{"class":78},[68,100110,100111],{"class":70,"line":3144},[68,100112,100113],{"class":302},"#结果：（2，3，3，4）\n",[14,100115,100117],{"id":100116},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[170,100119,100120],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[170,100122,100123],{},"①二维数组",[58,100125,100127],{"className":31862,"code":100126,"language":31864,"meta":63,"style":63},"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",[65,100128,100129,100153,100177,100182,100187],{"__ignoreMap":63},[68,100130,100131,100133,100135,100137,100139,100141,100143,100145,100147,100149,100151],{"class":70,"line":71},[68,100132,94781],{"class":78},[68,100134,1685],{"class":316},[68,100136,94477],{"class":78},[68,100138,1846],{"class":85},[68,100140,2007],{"class":78},[68,100142,2151],{"class":85},[68,100144,94482],{"class":78},[68,100146,1709],{"class":85},[68,100148,2007],{"class":78},[68,100150,1922],{"class":85},[68,100152,1646],{"class":78},[68,100154,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175],{"class":70,"line":82},[68,100156,99662],{"class":78},[68,100158,1685],{"class":316},[68,100160,94477],{"class":78},[68,100162,1966],{"class":85},[68,100164,2007],{"class":78},[68,100166,2270],{"class":85},[68,100168,94482],{"class":78},[68,100170,1709],{"class":85},[68,100172,2007],{"class":78},[68,100174,1922],{"class":85},[68,100176,1646],{"class":78},[68,100178,100179],{"class":70,"line":98},[68,100180,100181],{"class":78},"np.hstack((aa,bb))\n",[68,100183,100184],{"class":70,"line":104},[68,100185,100186],{"class":302},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[68,100188,100189],{"class":70,"line":112},[68,100190,100191],{"class":302},"#np.hstack([aa,bb])\n",[170,100193,99708],{},[170,100195,100196],{},[801,100197],{"alt":63,"src":100198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[170,100200,100201],{},"等效于concatenate()函数中axis=1时的情况",[170,100203,100204],{},"②三维数组",[58,100206,100208],{"className":31862,"code":100207,"language":31864,"meta":63,"style":63},"#两个三行六列\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",[65,100209,100210,100214,100242,100270,100275,100280],{"__ignoreMap":63},[68,100211,100212],{"class":70,"line":71},[68,100213,99763],{"class":302},[68,100215,100216,100218,100220,100222,100224,100226,100228,100230,100232,100234,100236,100238,100240],{"class":70,"line":82},[68,100217,96996],{"class":78},[68,100219,1685],{"class":316},[68,100221,94477],{"class":78},[68,100223,1846],{"class":85},[68,100225,2007],{"class":78},[68,100227,1954],{"class":85},[68,100229,94482],{"class":78},[68,100231,1715],{"class":85},[68,100233,2007],{"class":78},[68,100235,1709],{"class":85},[68,100237,2007],{"class":78},[68,100239,1973],{"class":85},[68,100241,1646],{"class":78},[68,100243,100244,100246,100248,100250,100252,100254,100256,100258,100260,100262,100264,100266,100268],{"class":70,"line":98},[68,100245,99796],{"class":78},[68,100247,1685],{"class":316},[68,100249,94477],{"class":78},[68,100251,1966],{"class":85},[68,100253,2007],{"class":78},[68,100255,99807],{"class":85},[68,100257,94482],{"class":78},[68,100259,1715],{"class":85},[68,100261,2007],{"class":78},[68,100263,1709],{"class":85},[68,100265,2007],{"class":78},[68,100267,1973],{"class":85},[68,100269,1646],{"class":78},[68,100271,100272],{"class":70,"line":104},[68,100273,100274],{"class":302},"#使用hstack\n",[68,100276,100277],{"class":70,"line":112},[68,100278,100279],{"class":78},"np.hstack((aaa,bbb)).shape\n",[68,100281,100282],{"class":70,"line":124},[68,100283,100284],{"class":302},"#输出：（2，6，6）\n",[14,100286,100288],{"id":100287},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[170,100290,100291],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[170,100293,100123],{},[58,100295,100297],{"className":31862,"code":100296,"language":31864,"meta":63,"style":63},"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",[65,100298,100299,100323,100347,100352,100357,100362],{"__ignoreMap":63},[68,100300,100301,100303,100305,100307,100309,100311,100313,100315,100317,100319,100321],{"class":70,"line":71},[68,100302,94781],{"class":78},[68,100304,1685],{"class":316},[68,100306,94477],{"class":78},[68,100308,1846],{"class":85},[68,100310,2007],{"class":78},[68,100312,2151],{"class":85},[68,100314,94482],{"class":78},[68,100316,1709],{"class":85},[68,100318,2007],{"class":78},[68,100320,1922],{"class":85},[68,100322,1646],{"class":78},[68,100324,100325,100327,100329,100331,100333,100335,100337,100339,100341,100343,100345],{"class":70,"line":82},[68,100326,99662],{"class":78},[68,100328,1685],{"class":316},[68,100330,94477],{"class":78},[68,100332,1966],{"class":85},[68,100334,2007],{"class":78},[68,100336,2270],{"class":85},[68,100338,94482],{"class":78},[68,100340,1709],{"class":85},[68,100342,2007],{"class":78},[68,100344,1922],{"class":85},[68,100346,1646],{"class":78},[68,100348,100349],{"class":70,"line":98},[68,100350,100351],{"class":302},"#vstack 垂直方向进行堆叠\n",[68,100353,100354],{"class":70,"line":104},[68,100355,100356],{"class":78},"np.vstack((aa,bb))\n",[68,100358,100359],{"class":70,"line":112},[68,100360,100361],{"class":302},"#与hstack传的参数类似，等价于：\n",[68,100363,100364],{"class":70,"line":124},[68,100365,100366],{"class":78},"np.vstack([aa,bb])\n",[170,100368,99708],{},[170,100370,100371],{},[801,100372],{"alt":63,"src":100373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[170,100375,100204],{},[58,100377,100379],{"className":31862,"code":100378,"language":31864,"meta":63,"style":63},"#两个三行六列\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",[65,100380,100381,100385,100413,100441,100446,100451],{"__ignoreMap":63},[68,100382,100383],{"class":70,"line":71},[68,100384,99763],{"class":302},[68,100386,100387,100389,100391,100393,100395,100397,100399,100401,100403,100405,100407,100409,100411],{"class":70,"line":82},[68,100388,96996],{"class":78},[68,100390,1685],{"class":316},[68,100392,94477],{"class":78},[68,100394,1846],{"class":85},[68,100396,2007],{"class":78},[68,100398,1954],{"class":85},[68,100400,94482],{"class":78},[68,100402,1715],{"class":85},[68,100404,2007],{"class":78},[68,100406,1709],{"class":85},[68,100408,2007],{"class":78},[68,100410,1973],{"class":85},[68,100412,1646],{"class":78},[68,100414,100415,100417,100419,100421,100423,100425,100427,100429,100431,100433,100435,100437,100439],{"class":70,"line":98},[68,100416,99796],{"class":78},[68,100418,1685],{"class":316},[68,100420,94477],{"class":78},[68,100422,1966],{"class":85},[68,100424,2007],{"class":78},[68,100426,99807],{"class":85},[68,100428,94482],{"class":78},[68,100430,1715],{"class":85},[68,100432,2007],{"class":78},[68,100434,1709],{"class":85},[68,100436,2007],{"class":78},[68,100438,1973],{"class":85},[68,100440,1646],{"class":78},[68,100442,100443],{"class":70,"line":104},[68,100444,100445],{"class":302},"#使用vstack\n",[68,100447,100448],{"class":70,"line":112},[68,100449,100450],{"class":78},"np.vstack((aaa,bbb)).shape\n",[68,100452,100453],{"class":70,"line":124},[68,100454,100455],{"class":302},"#输出：（4，3，6）\n",[14,100457,100459],{"id":100458},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[170,100461,100462],{},"该方法是三维数组特有的方法",[170,100464,100465],{},"也就是说",[170,100467,100468],{},"一维数组拼接方法用：concatenate()",[170,100470,100471],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[170,100473,100474],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[170,100476,100477],{},"四维数组及多维数组只能用concatenate进行拼接",[58,100479,100481],{"className":31862,"code":100480,"language":31864,"meta":63,"style":63},"#两个三行六列\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",[65,100482,100483,100487,100515,100543,100548,100553],{"__ignoreMap":63},[68,100484,100485],{"class":70,"line":71},[68,100486,99763],{"class":302},[68,100488,100489,100491,100493,100495,100497,100499,100501,100503,100505,100507,100509,100511,100513],{"class":70,"line":82},[68,100490,96996],{"class":78},[68,100492,1685],{"class":316},[68,100494,94477],{"class":78},[68,100496,1846],{"class":85},[68,100498,2007],{"class":78},[68,100500,1954],{"class":85},[68,100502,94482],{"class":78},[68,100504,1715],{"class":85},[68,100506,2007],{"class":78},[68,100508,1709],{"class":85},[68,100510,2007],{"class":78},[68,100512,1973],{"class":85},[68,100514,1646],{"class":78},[68,100516,100517,100519,100521,100523,100525,100527,100529,100531,100533,100535,100537,100539,100541],{"class":70,"line":98},[68,100518,99796],{"class":78},[68,100520,1685],{"class":316},[68,100522,94477],{"class":78},[68,100524,1966],{"class":85},[68,100526,2007],{"class":78},[68,100528,99807],{"class":85},[68,100530,94482],{"class":78},[68,100532,1715],{"class":85},[68,100534,2007],{"class":78},[68,100536,1709],{"class":85},[68,100538,2007],{"class":78},[68,100540,1973],{"class":85},[68,100542,1646],{"class":78},[68,100544,100545],{"class":70,"line":104},[68,100546,100547],{"class":302},"#使用dstack\n",[68,100549,100550],{"class":70,"line":112},[68,100551,100552],{"class":78},"np.dstack((aaa,bbb)).shape\n",[68,100554,100555],{"class":70,"line":124},[68,100556,100557],{"class":302},"#结果：（2，3，12）\n",[1553,100559,100560],{},"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":63,"searchDepth":82,"depth":82,"links":100562},[100563,100564,100565,100566],{"id":99502,"depth":82,"text":99503},{"id":100116,"depth":82,"text":100117},{"id":100287,"depth":82,"text":100288},{"id":100458,"depth":82,"text":100459},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99494,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100573,"title":100574,"body":100575,"description":1564,"extension":1565,"meta":100850,"navigation":1567,"path":100851,"seo":100852,"stem":100853,"__hash__":100854},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100576,"toc":100848},[100577,100580,100583,100677,100680,100683,100686,100689,100692,100695,100698,100701,100845],[10,100578,100574],{"id":100579},"_7数组转置",[170,100581,100582],{},"使用transpose()函数",[58,100584,100586],{"className":31862,"code":100585,"language":31864,"meta":63,"style":63},"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",[65,100587,100588,100598,100622,100627,100632,100637,100642,100650,100654,100658,100663,100668,100673],{"__ignoreMap":63},[68,100589,100590,100592,100594,100596],{"class":70,"line":71},[68,100591,31876],{"class":316},[68,100593,32864],{"class":78},[68,100595,32867],{"class":316},[68,100597,32870],{"class":78},[68,100599,100600,100602,100604,100606,100608,100610,100612,100614,100616,100618,100620],{"class":70,"line":82},[68,100601,1867],{"class":78},[68,100603,1685],{"class":316},[68,100605,33201],{"class":78},[68,100607,1846],{"class":85},[68,100609,2007],{"class":78},[68,100611,2151],{"class":85},[68,100613,94482],{"class":78},[68,100615,1922],{"class":85},[68,100617,2007],{"class":78},[68,100619,1709],{"class":85},[68,100621,1646],{"class":78},[68,100623,100624],{"class":70,"line":98},[68,100625,100626],{"class":302},"#二维数组转置\n",[68,100628,100629],{"class":70,"line":104},[68,100630,100631],{"class":302},"#调用transpose()函数\n",[68,100633,100634],{"class":70,"line":112},[68,100635,100636],{"class":78},"a.transpose()\n",[68,100638,100639],{"class":70,"line":124},[68,100640,100641],{"class":302},"#对于二维数组也可以采用.T来实现\n",[68,100643,100644,100647],{"class":70,"line":1496},[68,100645,100646],{"class":78},"a.T",[68,100648,100649],{"class":302},"#与上述代码一样\n",[68,100651,100652],{"class":70,"line":1502},[68,100653,95039],{"class":302},[68,100655,100656],{"class":70,"line":1510},[68,100657,95403],{"class":1742},[68,100659,100660],{"class":70,"line":1521},[68,100661,100662],{"class":1742},"array([[ 1,  4,  7, 10],\n",[68,100664,100665],{"class":70,"line":3103},[68,100666,100667],{"class":1742},"       [ 2,  5,  8, 11],\n",[68,100669,100670],{"class":70,"line":3108},[68,100671,100672],{"class":1742},"       [ 3,  6,  9, 12]])\n",[68,100674,100675],{"class":70,"line":3114},[68,100676,95403],{"class":1742},[170,100678,100679],{},"也可以使用np.transpose()的形式",[170,100681,100682],{},"#多维数组进行转置 np.transpose()",[170,100684,100685],{},"#对二维数组也可以使用np.transpose()进行转置",[170,100687,100688],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[170,100690,100691],{},"第二个参数，维度可以理解为用axis中的数来理解",[170,100693,100694],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[170,100696,100697],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[170,100699,100700],{},"四维及以上的数组也是一样的道理",[58,100702,100704],{"className":31862,"code":100703,"language":31864,"meta":63,"style":63},"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",[65,100705,100706,100734,100739,100744,100749,100767,100772,100804,100809,100814,100819,100840],{"__ignoreMap":63},[68,100707,100708,100710,100712,100714,100716,100718,100720,100722,100724,100726,100728,100730,100732],{"class":70,"line":71},[68,100709,2447],{"class":78},[68,100711,1685],{"class":316},[68,100713,94477],{"class":78},[68,100715,1846],{"class":85},[68,100717,2007],{"class":78},[68,100719,1954],{"class":85},[68,100721,94482],{"class":78},[68,100723,1709],{"class":85},[68,100725,2007],{"class":78},[68,100727,1973],{"class":85},[68,100729,2007],{"class":78},[68,100731,1715],{"class":85},[68,100733,1646],{"class":78},[68,100735,100736],{"class":70,"line":82},[68,100737,100738],{"class":78},"x.shape\n",[68,100740,100741],{"class":70,"line":98},[68,100742,100743],{"class":302},"#结果：（3,6,2）\n",[68,100745,100746],{"class":70,"line":104},[68,100747,100748],{"class":302},"#使用np.transpose()进行转置 变为(2,6,3)\n",[68,100750,100751,100754,100756,100758,100760,100762,100764],{"class":70,"line":112},[68,100752,100753],{"class":78},"np.transpose(x,(",[68,100755,1715],{"class":85},[68,100757,2007],{"class":78},[68,100759,1846],{"class":85},[68,100761,2007],{"class":78},[68,100763,1248],{"class":85},[68,100765,100766],{"class":78},")).shape\n",[68,100768,100769],{"class":70,"line":124},[68,100770,100771],{"class":302},"#结果：(2,6,3)\n",[68,100773,100774,100776,100778,100780,100782,100784,100786,100788,100790,100792,100794,100796,100798,100800,100802],{"class":70,"line":1496},[68,100775,99981],{"class":78},[68,100777,1685],{"class":316},[68,100779,94477],{"class":78},[68,100781,1846],{"class":85},[68,100783,2007],{"class":78},[68,100785,1954],{"class":85},[68,100787,94482],{"class":78},[68,100789,1709],{"class":85},[68,100791,2007],{"class":78},[68,100793,1715],{"class":85},[68,100795,2007],{"class":78},[68,100797,1846],{"class":85},[68,100799,2007],{"class":78},[68,100801,1973],{"class":85},[68,100803,1646],{"class":78},[68,100805,100806],{"class":70,"line":1502},[68,100807,100808],{"class":78},"aaaa.shape\n",[68,100810,100811],{"class":70,"line":1510},[68,100812,100813],{"class":302},"#结果：（3，2，1，6）\n",[68,100815,100816],{"class":70,"line":1521},[68,100817,100818],{"class":302},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[68,100820,100821,100824,100826,100828,100830,100832,100834,100836,100838],{"class":70,"line":3103},[68,100822,100823],{"class":78},"np.transpose(aaaa,(",[68,100825,1846],{"class":85},[68,100827,2007],{"class":78},[68,100829,1715],{"class":85},[68,100831,2007],{"class":78},[68,100833,1248],{"class":85},[68,100835,2007],{"class":78},[68,100837,1709],{"class":85},[68,100839,100766],{"class":78},[68,100841,100842],{"class":70,"line":3108},[68,100843,100844],{"class":302},"#结果：(2,1,3,6)\n",[1553,100846,100847],{},"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":63,"searchDepth":82,"depth":82,"links":100849},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100574,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100856,"title":100857,"body":100858,"description":1564,"extension":1565,"meta":101592,"navigation":1567,"path":101593,"seo":101594,"stem":101595,"__hash__":101596},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100859,"toc":101590},[100860,100863,100866,100869,100872,100875,100878,100881,100884,100993,100996,100999,101587],[10,100861,100857],{"id":100862},"_8数组分割",[170,100864,100865],{},"split分割",[170,100867,100868],{},"numpy.split(ary,indics_or_sections,axis)",[170,100870,100871],{},"解释：",[170,100873,100874],{},"ary:被分割的数组",[170,100876,100877],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[170,100879,100880],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[170,100882,100883],{},"①一维数组的分割",[58,100885,100887],{"className":31862,"code":100886,"language":31864,"meta":63,"style":63},"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",[65,100888,100889,100905,100910,100919,100923,100928,100936,100940,100945,100950,100963,100967,100972,100984,100988],{"__ignoreMap":63},[68,100890,100891,100893,100895,100897,100899,100901,100903],{"class":70,"line":71},[68,100892,1867],{"class":78},[68,100894,1685],{"class":316},[68,100896,94477],{"class":78},[68,100898,1846],{"class":85},[68,100900,2007],{"class":78},[68,100902,2049],{"class":85},[68,100904,1646],{"class":78},[68,100906,100907],{"class":70,"line":82},[68,100908,100909],{"class":302},"#如果传入整数，必须能够平分，否则会报错\n",[68,100911,100912,100915,100917],{"class":70,"line":98},[68,100913,100914],{"class":78},"np.split(a,",[68,100916,1715],{"class":85},[68,100918,1646],{"class":78},[68,100920,100921],{"class":70,"line":104},[68,100922,95039],{"class":302},[68,100924,100925],{"class":70,"line":112},[68,100926,100927],{"class":302},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[68,100929,100930,100932,100934],{"class":70,"line":124},[68,100931,100914],{"class":78},[68,100933,1922],{"class":85},[68,100935,1646],{"class":78},[68,100937,100938],{"class":70,"line":1496},[68,100939,95039],{"class":302},[68,100941,100942],{"class":70,"line":1502},[68,100943,100944],{"class":302},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[68,100946,100947],{"class":70,"line":1510},[68,100948,100949],{"class":302},"#传入数组\n",[68,100951,100952,100955,100957,100959,100961],{"class":70,"line":1521},[68,100953,100954],{"class":78},"np.split(a,[",[68,100956,1709],{"class":85},[68,100958,2007],{"class":78},[68,100960,1948],{"class":85},[68,100962,6147],{"class":78},[68,100964,100965],{"class":70,"line":3103},[68,100966,95039],{"class":302},[68,100968,100969],{"class":70,"line":3108},[68,100970,100971],{"class":302},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[68,100973,100974,100976,100978,100980,100982],{"class":70,"line":3114},[68,100975,100954],{"class":78},[68,100977,1948],{"class":85},[68,100979,2007],{"class":78},[68,100981,1998],{"class":85},[68,100983,6147],{"class":78},[68,100985,100986],{"class":70,"line":3119},[68,100987,95039],{"class":302},[68,100989,100990],{"class":70,"line":3133},[68,100991,100992],{"class":302},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[170,100994,100995],{},"②二维数组的分割",[170,100997,100998],{},"使用split()",[58,101000,101002],{"className":31862,"code":101001,"language":31864,"meta":63,"style":63},"#二维数组分割\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",[65,101003,101004,101009,101033,101038,101047,101051,101055,101060,101065,101070,101075,101080,101085,101090,101094,101107,101111,101115,101119,101123,101127,101132,101137,101142,101146,101151,101167,101171,101175,101180,101185,101190,101195,101200,101205,101210,101215,101220,101225,101230,101235,101240,101245,101250,101255,101260,101265,101269,101273,101293,101297,101301,101306,101311,101316,101321,101326,101331,101336,101341,101346,101351,101356,101361,101366,101371,101376,101381,101386,101391,101395,101400,101409,101413,101417,101421,101425,101429,101433,101437,101441,101445,101454,101458,101462,101466,101470,101474,101478,101482,101486,101490,101494,101498,101502,101506,101510,101514,101518,101522,101526,101530,101534,101538,101551,101555,101559,101563,101567,101571,101575,101579,101583],{"__ignoreMap":63},[68,101005,101006],{"class":70,"line":71},[68,101007,101008],{"class":302},"#二维数组分割\n",[68,101010,101011,101013,101015,101017,101019,101021,101023,101025,101027,101029,101031],{"class":70,"line":82},[68,101012,94781],{"class":78},[68,101014,1685],{"class":316},[68,101016,94477],{"class":78},[68,101018,1846],{"class":85},[68,101020,2007],{"class":78},[68,101022,1954],{"class":85},[68,101024,94482],{"class":78},[68,101026,1973],{"class":85},[68,101028,2007],{"class":78},[68,101030,1973],{"class":85},[68,101032,1646],{"class":78},[68,101034,101035],{"class":70,"line":98},[68,101036,101037],{"class":302},"#默认axis=0  传入整数平均分,按行来的\n",[68,101039,101040,101043,101045],{"class":70,"line":104},[68,101041,101042],{"class":78},"np.split(aa,",[68,101044,1709],{"class":85},[68,101046,1646],{"class":78},[68,101048,101049],{"class":70,"line":112},[68,101050,97239],{"class":302},[68,101052,101053],{"class":70,"line":124},[68,101054,95403],{"class":1742},[68,101056,101057],{"class":70,"line":1496},[68,101058,101059],{"class":1742},"[array([[ 1,  2,  3,  4,  5,  6],\n",[68,101061,101062],{"class":70,"line":1502},[68,101063,101064],{"class":1742},"        [ 7,  8,  9, 10, 11, 12]]),\n",[68,101066,101067],{"class":70,"line":1510},[68,101068,101069],{"class":1742}," array([[13, 14, 15, 16, 17, 18],\n",[68,101071,101072],{"class":70,"line":1521},[68,101073,101074],{"class":1742},"        [19, 20, 21, 22, 23, 24]]),\n",[68,101076,101077],{"class":70,"line":3103},[68,101078,101079],{"class":1742}," array([[25, 26, 27, 28, 29, 30],\n",[68,101081,101082],{"class":70,"line":3108},[68,101083,101084],{"class":1742},"        [31, 32, 33, 34, 35, 36]])]\n",[68,101086,101087],{"class":70,"line":3114},[68,101088,101089],{"class":1742}," '''\n",[68,101091,101092],{"class":70,"line":3119},[68,101093,100949],{"class":302},[68,101095,101096,101099,101101,101103,101105],{"class":70,"line":3133},[68,101097,101098],{"class":78},"np.split(aa,[",[68,101100,1715],{"class":85},[68,101102,2007],{"class":78},[68,101104,1948],{"class":85},[68,101106,6147],{"class":78},[68,101108,101109],{"class":70,"line":3138},[68,101110,97239],{"class":302},[68,101112,101113],{"class":70,"line":3144},[68,101114,95403],{"class":1742},[68,101116,101117],{"class":70,"line":3165},[68,101118,101059],{"class":1742},[68,101120,101121],{"class":70,"line":3170},[68,101122,101064],{"class":1742},[68,101124,101125],{"class":70,"line":3184},[68,101126,101069],{"class":1742},[68,101128,101129],{"class":70,"line":3189},[68,101130,101131],{"class":1742},"        [19, 20, 21, 22, 23, 24],\n",[68,101133,101134],{"class":70,"line":3218},[68,101135,101136],{"class":1742},"        [25, 26, 27, 28, 29, 30]]),\n",[68,101138,101139],{"class":70,"line":3223},[68,101140,101141],{"class":1742}," array([[31, 32, 33, 34, 35, 36]])]\n",[68,101143,101144],{"class":70,"line":3240},[68,101145,95403],{"class":1742},[68,101147,101148],{"class":70,"line":3245},[68,101149,101150],{"class":302},"#axis=1 按照列来分\n",[68,101152,101153,101155,101157,101159,101161,101163,101165],{"class":70,"line":3250},[68,101154,101042],{"class":78},[68,101156,1709],{"class":85},[68,101158,2007],{"class":78},[68,101160,48998],{"class":6705},[68,101162,1685],{"class":316},[68,101164,1846],{"class":85},[68,101166,1646],{"class":78},[68,101168,101169],{"class":70,"line":3255},[68,101170,97239],{"class":302},[68,101172,101173],{"class":70,"line":3269},[68,101174,95403],{"class":1742},[68,101176,101177],{"class":70,"line":3274},[68,101178,101179],{"class":1742},"[array([[ 1,  2],\n",[68,101181,101182],{"class":70,"line":4067},[68,101183,101184],{"class":1742},"        [ 7,  8],\n",[68,101186,101187],{"class":70,"line":4081},[68,101188,101189],{"class":1742},"        [13, 14],\n",[68,101191,101192],{"class":70,"line":4089},[68,101193,101194],{"class":1742},"        [19, 20],\n",[68,101196,101197],{"class":70,"line":4094},[68,101198,101199],{"class":1742},"        [25, 26],\n",[68,101201,101202],{"class":70,"line":4100},[68,101203,101204],{"class":1742},"        [31, 32]]),\n",[68,101206,101207],{"class":70,"line":4106},[68,101208,101209],{"class":1742}," array([[ 3,  4],\n",[68,101211,101212],{"class":70,"line":4111},[68,101213,101214],{"class":1742},"        [ 9, 10],\n",[68,101216,101217],{"class":70,"line":9437},[68,101218,101219],{"class":1742},"        [15, 16],\n",[68,101221,101222],{"class":70,"line":9461},[68,101223,101224],{"class":1742},"        [21, 22],\n",[68,101226,101227],{"class":70,"line":9466},[68,101228,101229],{"class":1742},"        [27, 28],\n",[68,101231,101232],{"class":70,"line":9472},[68,101233,101234],{"class":1742},"        [33, 34]]),\n",[68,101236,101237],{"class":70,"line":9499},[68,101238,101239],{"class":1742}," array([[ 5,  6],\n",[68,101241,101242],{"class":70,"line":9504},[68,101243,101244],{"class":1742},"        [11, 12],\n",[68,101246,101247],{"class":70,"line":9510},[68,101248,101249],{"class":1742},"        [17, 18],\n",[68,101251,101252],{"class":70,"line":9522},[68,101253,101254],{"class":1742},"        [23, 24],\n",[68,101256,101257],{"class":70,"line":9534},[68,101258,101259],{"class":1742},"        [29, 30],\n",[68,101261,101262],{"class":70,"line":9546},[68,101263,101264],{"class":1742},"        [35, 36]])]\n",[68,101266,101267],{"class":70,"line":11204},[68,101268,101089],{"class":1742},[68,101270,101271],{"class":70,"line":11229},[68,101272,100949],{"class":302},[68,101274,101275,101277,101279,101281,101283,101285,101287,101289,101291],{"class":70,"line":11252},[68,101276,101098],{"class":78},[68,101278,1846],{"class":85},[68,101280,2007],{"class":78},[68,101282,1715],{"class":85},[68,101284,43093],{"class":78},[68,101286,48998],{"class":6705},[68,101288,1685],{"class":316},[68,101290,1846],{"class":85},[68,101292,1646],{"class":78},[68,101294,101295],{"class":70,"line":11276},[68,101296,95039],{"class":302},[68,101298,101299],{"class":70,"line":11281},[68,101300,95403],{"class":1742},[68,101302,101303],{"class":70,"line":11286},[68,101304,101305],{"class":1742},"[array([[ 1],\n",[68,101307,101308],{"class":70,"line":11291},[68,101309,101310],{"class":1742},"        [ 7],\n",[68,101312,101313],{"class":70,"line":11300},[68,101314,101315],{"class":1742},"        [13],\n",[68,101317,101318],{"class":70,"line":11305},[68,101319,101320],{"class":1742},"        [19],\n",[68,101322,101323],{"class":70,"line":11311},[68,101324,101325],{"class":1742},"        [25],\n",[68,101327,101328],{"class":70,"line":11332},[68,101329,101330],{"class":1742},"        [31]]),\n",[68,101332,101333],{"class":70,"line":11338},[68,101334,101335],{"class":1742}," array([[ 2],\n",[68,101337,101338],{"class":70,"line":11352},[68,101339,101340],{"class":1742},"        [ 8],\n",[68,101342,101343],{"class":70,"line":11358},[68,101344,101345],{"class":1742},"        [14],\n",[68,101347,101348],{"class":70,"line":11385},[68,101349,101350],{"class":1742},"        [20],\n",[68,101352,101353],{"class":70,"line":11394},[68,101354,101355],{"class":1742},"        [26],\n",[68,101357,101358],{"class":70,"line":11400},[68,101359,101360],{"class":1742},"        [32]]),\n",[68,101362,101363],{"class":70,"line":11408},[68,101364,101365],{"class":1742}," array([[ 3,  4,  5,  6],\n",[68,101367,101368],{"class":70,"line":11413},[68,101369,101370],{"class":1742},"        [ 9, 10, 11, 12],\n",[68,101372,101373],{"class":70,"line":18091},[68,101374,101375],{"class":1742},"        [15, 16, 17, 18],\n",[68,101377,101378],{"class":70,"line":18097},[68,101379,101380],{"class":1742},"        [21, 22, 23, 24],\n",[68,101382,101383],{"class":70,"line":18120},[68,101384,101385],{"class":1742},"        [27, 28, 29, 30],\n",[68,101387,101388],{"class":70,"line":18126},[68,101389,101390],{"class":1742},"        [33, 34, 35, 36]])]\n",[68,101392,101393],{"class":70,"line":18149},[68,101394,95403],{"class":1742},[68,101396,101397],{"class":70,"line":18163},[68,101398,101399],{"class":302},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[68,101401,101402,101405,101407],{"class":70,"line":18183},[68,101403,101404],{"class":78},"np.vsplit(aa,",[68,101406,1709],{"class":85},[68,101408,1646],{"class":78},[68,101410,101411],{"class":70,"line":18189},[68,101412,95039],{"class":302},[68,101414,101415],{"class":70,"line":18200},[68,101416,95403],{"class":1742},[68,101418,101419],{"class":70,"line":18223},[68,101420,101059],{"class":1742},[68,101422,101423],{"class":70,"line":18245},[68,101424,101064],{"class":1742},[68,101426,101427],{"class":70,"line":18250},[68,101428,101069],{"class":1742},[68,101430,101431],{"class":70,"line":18256},[68,101432,101074],{"class":1742},[68,101434,101435],{"class":70,"line":18270},[68,101436,101079],{"class":1742},[68,101438,101439],{"class":70,"line":18283},[68,101440,101084],{"class":1742},[68,101442,101443],{"class":70,"line":18288},[68,101444,95403],{"class":1742},[68,101446,101447,101450,101452],{"class":70,"line":18302},[68,101448,101449],{"class":78},"np.hsplit(aa,",[68,101451,1709],{"class":85},[68,101453,1646],{"class":78},[68,101455,101456],{"class":70,"line":18307},[68,101457,95039],{"class":302},[68,101459,101460],{"class":70,"line":18313},[68,101461,95403],{"class":1742},[68,101463,101464],{"class":70,"line":18318},[68,101465,101179],{"class":1742},[68,101467,101468],{"class":70,"line":18332},[68,101469,101184],{"class":1742},[68,101471,101472],{"class":70,"line":18337},[68,101473,101189],{"class":1742},[68,101475,101476],{"class":70,"line":18342},[68,101477,101194],{"class":1742},[68,101479,101480],{"class":70,"line":18356},[68,101481,101199],{"class":1742},[68,101483,101484],{"class":70,"line":18368},[68,101485,101204],{"class":1742},[68,101487,101488],{"class":70,"line":18373},[68,101489,101209],{"class":1742},[68,101491,101492],{"class":70,"line":18386},[68,101493,101214],{"class":1742},[68,101495,101496],{"class":70,"line":18391},[68,101497,101219],{"class":1742},[68,101499,101500],{"class":70,"line":18396},[68,101501,101224],{"class":1742},[68,101503,101504],{"class":70,"line":18401},[68,101505,101229],{"class":1742},[68,101507,101508],{"class":70,"line":18414},[68,101509,101234],{"class":1742},[68,101511,101512],{"class":70,"line":18419},[68,101513,101239],{"class":1742},[68,101515,101516],{"class":70,"line":34117},[68,101517,101244],{"class":1742},[68,101519,101520],{"class":70,"line":34123},[68,101521,101249],{"class":1742},[68,101523,101524],{"class":70,"line":34129},[68,101525,101254],{"class":1742},[68,101527,101528],{"class":70,"line":34135},[68,101529,101259],{"class":1742},[68,101531,101532],{"class":70,"line":34141},[68,101533,101264],{"class":1742},[68,101535,101536],{"class":70,"line":34152},[68,101537,95403],{"class":1742},[68,101539,101540,101543,101545,101547,101549],{"class":70,"line":34158},[68,101541,101542],{"class":78},"np.vsplit(aa,[",[68,101544,1715],{"class":85},[68,101546,2007],{"class":78},[68,101548,1948],{"class":85},[68,101550,6147],{"class":78},[68,101552,101553],{"class":70,"line":34178},[68,101554,95039],{"class":302},[68,101556,101557],{"class":70,"line":34184},[68,101558,95403],{"class":1742},[68,101560,101561],{"class":70,"line":34195},[68,101562,101059],{"class":1742},[68,101564,101565],{"class":70,"line":34201},[68,101566,101064],{"class":1742},[68,101568,101569],{"class":70,"line":34207},[68,101570,101069],{"class":1742},[68,101572,101573],{"class":70,"line":34213},[68,101574,101131],{"class":1742},[68,101576,101577],{"class":70,"line":34219},[68,101578,101136],{"class":1742},[68,101580,101581],{"class":70,"line":34225},[68,101582,101141],{"class":1742},[68,101584,101585],{"class":70,"line":34231},[68,101586,101089],{"class":1742},[1553,101588,101589],{},"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":63,"searchDepth":82,"depth":82,"links":101591},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100857,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101598,"title":101599,"body":101600,"description":1564,"extension":1565,"meta":102094,"navigation":1567,"path":102095,"seo":102096,"stem":102097,"__hash__":102098},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101601,"toc":102085},[101602,101605,101608,101633,101637,101696,101748,101752,101754,101790,101844,101846,101884,101955,101959,101964,101968,101971,102004,102007,102011,102014,102017,102020,102023,102028,102032,102035,102038,102041,102044,102049,102053,102058,102061,102082],[10,101603,101599],{"id":101604},"_9数学函数",[170,101606,101607],{},"补充回顾：python的列表推导式",[58,101609,101611],{"className":31862,"code":101610,"language":31864,"meta":63,"style":63},"[1\u002Fi for i in a]\n",[65,101612,101613],{"__ignoreMap":63},[68,101614,101615,101617,101619,101621,101624,101626,101628,101630],{"class":70,"line":71},[68,101616,2517],{"class":78},[68,101618,1846],{"class":85},[68,101620,2212],{"class":316},[68,101622,101623],{"class":78},"i ",[68,101625,4515],{"class":316},[68,101627,10926],{"class":78},[68,101629,27529],{"class":316},[68,101631,101632],{"class":78}," a]\n",[14,101634,101636],{"id":101635},"_91-求倒数","9.1 求倒数",[58,101638,101640],{"className":31862,"code":101639,"language":31864,"meta":63,"style":63},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[65,101641,101642,101647,101675,101687],{"__ignoreMap":63},[68,101643,101644],{"class":70,"line":71},[68,101645,101646],{"class":302},"#数组求倒数\n",[68,101648,101649,101651,101653,101655,101657,101659,101661,101663,101665,101667,101669,101671,101673],{"class":70,"line":82},[68,101650,1867],{"class":78},[68,101652,1685],{"class":316},[68,101654,2517],{"class":78},[68,101656,1846],{"class":85},[68,101658,2007],{"class":78},[68,101660,1715],{"class":85},[68,101662,2007],{"class":78},[68,101664,1709],{"class":85},[68,101666,2007],{"class":78},[68,101668,1922],{"class":85},[68,101670,2007],{"class":78},[68,101672,1948],{"class":85},[68,101674,34730],{"class":78},[68,101676,101677,101679,101681,101684],{"class":70,"line":98},[68,101678,1892],{"class":78},[68,101680,1685],{"class":316},[68,101682,101683],{"class":78},"np.array(a)",[68,101685,101686],{"class":302},"#将列表转换为数组\n",[68,101688,101689,101691,101693],{"class":70,"line":104},[68,101690,1846],{"class":85},[68,101692,2212],{"class":316},[68,101694,101695],{"class":78},"b\n",[58,101697,101699],{"className":31862,"code":101698,"language":31864,"meta":63,"style":63},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[65,101700,101701,101729,101738,101743],{"__ignoreMap":63},[68,101702,101703,101705,101707,101709,101711,101713,101715,101717,101719,101721,101723,101725,101727],{"class":70,"line":71},[68,101704,1867],{"class":78},[68,101706,1685],{"class":316},[68,101708,2517],{"class":78},[68,101710,1846],{"class":85},[68,101712,2007],{"class":78},[68,101714,1715],{"class":85},[68,101716,2007],{"class":78},[68,101718,1709],{"class":85},[68,101720,2007],{"class":78},[68,101722,1922],{"class":85},[68,101724,2007],{"class":78},[68,101726,1948],{"class":85},[68,101728,34730],{"class":78},[68,101730,101731,101733,101735],{"class":70,"line":82},[68,101732,1892],{"class":78},[68,101734,1685],{"class":316},[68,101736,101737],{"class":78},"np.array(a)\n",[68,101739,101740],{"class":70,"line":98},[68,101741,101742],{"class":302},"#调用numpy中的函数reciprocal()\n",[68,101744,101745],{"class":70,"line":104},[68,101746,101747],{"class":78},"np.reciprocal(b)\n",[14,101749,101751],{"id":101750},"_92-求平方","9.2 求平方",[170,101753,96005],{},[58,101755,101757],{"className":31862,"code":101756,"language":31864,"meta":63,"style":63},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[65,101758,101759,101764,101769,101785],{"__ignoreMap":63},[68,101760,101761],{"class":70,"line":71},[68,101762,101763],{"class":302},"#square()，求平方\n",[68,101765,101766],{"class":70,"line":82},[68,101767,101768],{"class":302},"#一维数组\n",[68,101770,101771,101773,101775,101777,101779,101781,101783],{"class":70,"line":98},[68,101772,1867],{"class":78},[68,101774,1685],{"class":316},[68,101776,94477],{"class":78},[68,101778,1846],{"class":85},[68,101780,2007],{"class":78},[68,101782,313],{"class":85},[68,101784,1646],{"class":78},[68,101786,101787],{"class":70,"line":104},[68,101788,101789],{"class":78},"np.square(a)\n",[58,101791,101793],{"className":31862,"code":101792,"language":31864,"meta":63,"style":63},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[65,101794,101795,101800,101805,101826],{"__ignoreMap":63},[68,101796,101797],{"class":70,"line":71},[68,101798,101799],{"class":302},"#或者通过循环遍历的形式来计算\n",[68,101801,101802],{"class":70,"line":82},[68,101803,101804],{"class":302},"#这是一个列表\n",[68,101806,101807,101810,101812,101814,101816,101818,101820,101823],{"class":70,"line":98},[68,101808,101809],{"class":78},"[i",[68,101811,2083],{"class":316},[68,101813,101623],{"class":78},[68,101815,4515],{"class":316},[68,101817,10926],{"class":78},[68,101819,27529],{"class":316},[68,101821,101822],{"class":78}," a]",[68,101824,101825],{"class":302},"#这个求完之后在数列当中\n",[68,101827,101828,101831,101833,101835,101837,101839,101841],{"class":70,"line":104},[68,101829,101830],{"class":78},"np.array([i",[68,101832,2083],{"class":316},[68,101834,101623],{"class":78},[68,101836,4515],{"class":316},[68,101838,10926],{"class":78},[68,101840,27529],{"class":316},[68,101842,101843],{"class":78}," a])\n",[170,101845,94766],{},[58,101847,101849],{"className":31862,"code":101848,"language":31864,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[65,101850,101851,101855,101879],{"__ignoreMap":63},[68,101852,101853],{"class":70,"line":71},[68,101854,94776],{"class":302},[68,101856,101857,101859,101861,101863,101865,101867,101869,101871,101873,101875,101877],{"class":70,"line":82},[68,101858,94781],{"class":78},[68,101860,1685],{"class":316},[68,101862,94477],{"class":78},[68,101864,1846],{"class":85},[68,101866,2007],{"class":78},[68,101868,2151],{"class":85},[68,101870,94482],{"class":78},[68,101872,1922],{"class":85},[68,101874,2007],{"class":78},[68,101876,1709],{"class":85},[68,101878,1646],{"class":78},[68,101880,101881],{"class":70,"line":98},[68,101882,101883],{"class":78},"np.square(aa)\n",[58,101885,101887],{"className":31862,"code":101886,"language":31864,"meta":63,"style":63},"#传统的方式\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",[65,101888,101889,101894,101903,101919,101935,101950],{"__ignoreMap":63},[68,101890,101891],{"class":70,"line":71},[68,101892,101893],{"class":302},"#传统的方式\n",[68,101895,101896,101898,101900],{"class":70,"line":82},[68,101897,99662],{"class":78},[68,101899,1685],{"class":316},[68,101901,101902],{"class":78},"np.empty_like(aa)\n",[68,101904,101905,101907,101909,101911,101913,101915,101917],{"class":70,"line":98},[68,101906,4515],{"class":316},[68,101908,10926],{"class":78},[68,101910,27529],{"class":316},[68,101912,33927],{"class":85},[68,101914,1640],{"class":78},[68,101916,1922],{"class":85},[68,101918,32270],{"class":78},[68,101920,101921,101923,101925,101927,101929,101931,101933],{"class":70,"line":104},[68,101922,4691],{"class":316},[68,101924,10988],{"class":78},[68,101926,27529],{"class":316},[68,101928,33927],{"class":85},[68,101930,1640],{"class":78},[68,101932,1709],{"class":85},[68,101934,32270],{"class":78},[68,101936,101937,101940,101942,101945,101947],{"class":70,"line":112},[68,101938,101939],{"class":78},"        bb[i,j]",[68,101941,1685],{"class":316},[68,101943,101944],{"class":78},"aa[i,j]",[68,101946,2083],{"class":316},[68,101948,101949],{"class":78},"aa[i,j]\n",[68,101951,101952],{"class":70,"line":124},[68,101953,101954],{"class":78},"bb\n",[14,101956,101958],{"id":101957},"_93-求各元素的符号","9.3 求各元素的符号",[170,101960,101961],{},[801,101962],{"alt":63,"src":101963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101965,101967],{"id":101966},"_94-modf函数","9.4 modf函数",[170,101969,101970],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[58,101972,101974],{"className":31862,"code":101973,"language":31864,"meta":63,"style":63},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[65,101975,101976,101999],{"__ignoreMap":63},[68,101977,101978,101980,101982,101984,101986,101988,101990,101992,101994,101997],{"class":70,"line":71},[68,101979,1867],{"class":78},[68,101981,1685],{"class":316},[68,101983,94477],{"class":78},[68,101985,2160],{"class":316},[68,101987,313],{"class":85},[68,101989,2007],{"class":78},[68,101991,313],{"class":85},[68,101993,2007],{"class":78},[68,101995,101996],{"class":85},"0.3",[68,101998,1646],{"class":78},[68,102000,102001],{"class":70,"line":82},[68,102002,102003],{"class":78},"np.modf(a)\n",[170,102005,102006],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102008,102010],{"id":102009},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[170,102012,102013],{},"np.cell()",[170,102015,102016],{},"np.floor()",[170,102018,102019],{},"np.rint()",[170,102021,102022],{},"对各元素分别向上取整、向下取整、四舍五入",[170,102024,102025],{},[801,102026],{"alt":63,"src":102027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102029,102031],{"id":102030},"_96-around函数","9.6 around()函数",[170,102033,102034],{},"around()函数也可以实现对数的小数位数进行操作",[170,102036,102037],{},"其中的参数：",[170,102039,102040],{},"1.要传的数组",[170,102042,102043],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[170,102045,102046],{},[801,102047],{"alt":63,"src":102048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102050,102052],{"id":102051},"_97-三角函数","9.7 三角函数",[170,102054,102055],{},[801,102056],{"alt":63,"src":102057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[170,102059,102060],{},"引入图像模块非常重要",[58,102062,102064],{"className":31862,"code":102063,"language":31864,"meta":63,"style":63},"from matplotlib import pyplot as plt\n",[65,102065,102066],{"__ignoreMap":63},[68,102067,102068,102070,102073,102075,102078,102080],{"class":70,"line":71},[68,102069,32221],{"class":316},[68,102071,102072],{"class":78}," matplotlib ",[68,102074,31876],{"class":316},[68,102076,102077],{"class":78}," pyplot ",[68,102079,32867],{"class":316},[68,102081,32921],{"class":78},[1553,102083,102084],{},"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":63,"searchDepth":82,"depth":82,"links":102086},[102087,102088,102089,102090,102091,102092,102093],{"id":101635,"depth":82,"text":101636},{"id":101750,"depth":82,"text":101751},{"id":101957,"depth":82,"text":101958},{"id":101966,"depth":82,"text":101967},{"id":102009,"depth":82,"text":102010},{"id":102030,"depth":82,"text":102031},{"id":102051,"depth":82,"text":102052},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101599,"description":1564},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102100,"title":102101,"body":102102,"description":1564,"extension":1565,"meta":102106,"navigation":1567,"path":102107,"seo":102108,"stem":102109,"__hash__":102110},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102103,"toc":102104},[],{"title":63,"searchDepth":82,"depth":82,"links":102105},[],{"category":51904},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102101,"description":1564},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102112,"title":102113,"body":102114,"description":63,"extension":1565,"meta":104122,"navigation":1567,"path":104123,"seo":104124,"stem":104125,"__hash__":104126},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102115,"toc":104098},[102116,102119,102123,102126,102129,102135,102138,102161,102164,102198,102201,102242,102246,102249,102342,102345,102389,102392,102409,102412,102426,102429,102432,102477,102480,102517,102521,102524,102530,102535,102555,102559,102562,102628,102631,102649,102653,102656,102685,102695,102701,102705,102708,102714,102725,102729,102732,102762,102765,103045,103048,103051,103062,103065,103068,103090,103097,103100,103118,103121,103124,103138,103146,103149,103175,103181,103184,103187,103197,103209,103229,103238,103258,103268,103292,103305,103319,103324,103365,103382,103407,103419,103439,103445,103490,103509,103526,103539,103555,103562,103574,103583,103618,103639,103664,103677,103701,103716,103741,103744,103765,103774,103777,103788,103792,103795,103801,103813,103820,103824,103827,103839,103842,103856,103859,103869,103879,103882,103922,103925,103929,103935,103938,103952,103956,103959,103992,103996,103999,104022,104030,104033,104039,104045,104048,104051,104079,104083,104086,104092,104095],[10,102117,102113],{"id":102118},"_1环境安装与第一个-mujoco-程序",[14,102120,102122],{"id":102121},"_1目标说明","1.目标说明",[170,102124,102125],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[170,102127,102128],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[58,102130,102133],{"className":102131,"code":102132,"language":6676,"meta":63},[6674],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[65,102134,102132],{"__ignoreMap":63},[170,102136,102137],{},"需要掌握:",[263,102139,102140,102143,102146,102151,102156],{},[27,102141,102142],{},"Fedora 44 下 MuJoCo 的系统依赖",[27,102144,102145],{},"Python 虚拟环境创建",[27,102147,102148],{},[65,102149,102150],{},"mujoco.MjModel",[27,102152,102153],{},[65,102154,102155],{},"mujoco.MjData",[27,102157,102158],{},[65,102159,102160],{},"mujoco.mj_step(model, data)",[170,102162,102163],{},"MuJoCo 中最重要的两个对象:",[128,102165,102166,102176],{},[131,102167,102168],{},[134,102169,102170,102173],{},[137,102171,102172],{"align":92},"对象",[137,102174,102175],{"align":92},"含义",[144,102177,102178,102188],{},[134,102179,102180,102185],{},[149,102181,102182],{"align":92},[65,102183,102184],{},"MjModel",[149,102186,102187],{"align":92},"模型结构，来自 XML，基本不随时间变化",[134,102189,102190,102195],{},[149,102191,102192],{"align":92},[65,102193,102194],{},"MjData",[149,102196,102197],{"align":92},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[170,102199,102200],{},"可以先用一个类比理解：",[128,102202,102203,102213],{},[131,102204,102205],{},[134,102206,102207,102210],{},[137,102208,102209],{"align":92},"类比",[137,102211,102212],{"align":92},"MuJoCo 对象",[144,102214,102215,102224,102233],{},[134,102216,102217,102220],{},[149,102218,102219],{"align":92},"游戏地图和角色配置",[149,102221,102222],{"align":92},[65,102223,102184],{},[134,102225,102226,102229],{},[149,102227,102228],{"align":92},"游戏运行到当前帧的状态",[149,102230,102231],{"align":92},[65,102232,102194],{},[134,102234,102235,102238],{},[149,102236,102237],{"align":92},"前进一帧",[149,102239,102240],{"align":92},[65,102241,102160],{},[14,102243,102245],{"id":102244},"_2环境与依赖安装","2.环境与依赖安装",[170,102247,102248],{},"Fedora 44 系统依赖:",[58,102250,102252],{"className":25307,"code":102251,"language":25309,"meta":63,"style":63},"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",[65,102253,102254,102266,102279,102292,102302,102312,102331],{"__ignoreMap":63},[68,102255,102256,102258,102260,102262,102264],{"class":70,"line":71},[68,102257,26062],{"class":74},[68,102259,27801],{"class":1742},[68,102261,25319],{"class":1742},[68,102263,27886],{"class":85},[68,102265,26164],{"class":85},[68,102267,102268,102271,102274,102277],{"class":70,"line":82},[68,102269,102270],{"class":1742},"  python3",[68,102272,102273],{"class":1742}," python3-pip",[68,102275,102276],{"class":1742}," python3-virtualenv",[68,102278,26164],{"class":85},[68,102280,102281,102284,102287,102290],{"class":70,"line":98},[68,102282,102283],{"class":1742},"  mesa-libGL",[68,102285,102286],{"class":1742}," mesa-libGLU",[68,102288,102289],{"class":1742}," mesa-dri-drivers",[68,102291,26164],{"class":85},[68,102293,102294,102297,102300],{"class":70,"line":104},[68,102295,102296],{"class":1742},"  libglvnd-glx",[68,102298,102299],{"class":1742}," libglvnd-opengl",[68,102301,26164],{"class":85},[68,102303,102304,102307,102310],{"class":70,"line":112},[68,102305,102306],{"class":1742},"  glfw",[68,102308,102309],{"class":1742}," glfw-devel",[68,102311,26164],{"class":85},[68,102313,102314,102317,102320,102323,102326,102329],{"class":70,"line":124},[68,102315,102316],{"class":1742},"  libX11",[68,102318,102319],{"class":1742}," libXcursor",[68,102321,102322],{"class":1742}," libXi",[68,102324,102325],{"class":1742}," libXinerama",[68,102327,102328],{"class":1742}," libXrandr",[68,102330,26164],{"class":85},[68,102332,102333,102336,102339],{"class":70,"line":1496},[68,102334,102335],{"class":1742},"  gcc",[68,102337,102338],{"class":1742}," gcc-c++",[68,102340,102341],{"class":1742}," make\n",[170,102343,102344],{},"创建 Python 环境:",[58,102346,102348],{"className":25307,"code":102347,"language":25309,"meta":63,"style":63},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[65,102349,102350,102364,102372],{"__ignoreMap":63},[68,102351,102352,102355,102358,102361],{"class":70,"line":71},[68,102353,102354],{"class":74},"python3",[68,102356,102357],{"class":85}," -m",[68,102359,102360],{"class":1742}," venv",[68,102362,102363],{"class":1742}," .venv\n",[68,102365,102366,102369],{"class":70,"line":82},[68,102367,102368],{"class":85},"source",[68,102370,102371],{"class":1742}," .venv\u002Fbin\u002Factivate\n",[68,102373,102374,102376,102378,102381,102383,102386],{"class":70,"line":98},[68,102375,31864],{"class":74},[68,102377,102357],{"class":85},[68,102379,102380],{"class":1742}," pip",[68,102382,25319],{"class":1742},[68,102384,102385],{"class":85}," --upgrade",[68,102387,102388],{"class":1742}," pip\n",[170,102390,102391],{},"pip 安装:",[58,102393,102395],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy\n",[65,102396,102397],{"__ignoreMap":63},[68,102398,102399,102401,102403,102406],{"class":70,"line":71},[68,102400,25316],{"class":74},[68,102402,25319],{"class":1742},[68,102404,102405],{"class":1742}," \"mujoco>=2.3\"",[68,102407,102408],{"class":1742}," numpy\n",[170,102410,102411],{},"安装完成后，先做最小检查：",[58,102413,102415],{"className":25307,"code":102414,"language":25309,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[65,102416,102417],{"__ignoreMap":63},[68,102418,102419,102421,102423],{"class":70,"line":71},[68,102420,31864],{"class":74},[68,102422,31842],{"class":85},[68,102424,102425],{"class":1742}," \"import mujoco; print(mujoco.__version__)\"\n",[170,102427,102428],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[170,102430,102431],{},"conda 安装:",[58,102433,102435],{"className":25307,"code":102434,"language":25309,"meta":63,"style":63},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[65,102436,102437,102457,102467],{"__ignoreMap":63},[68,102438,102439,102441,102443,102445,102448,102451,102454],{"class":70,"line":71},[68,102440,31814],{"class":74},[68,102442,30660],{"class":1742},[68,102444,26601],{"class":85},[68,102446,102447],{"class":1742}," mujoco-study",[68,102449,102450],{"class":1742}," python=",[68,102452,102453],{"class":85},"3.10",[68,102455,102456],{"class":85}," -y\n",[68,102458,102459,102461,102464],{"class":70,"line":82},[68,102460,31814],{"class":74},[68,102462,102463],{"class":1742}," activate",[68,102465,102466],{"class":1742}," mujoco-study\n",[68,102468,102469,102471,102473,102475],{"class":70,"line":98},[68,102470,25316],{"class":74},[68,102472,25319],{"class":1742},[68,102474,102405],{"class":1742},[68,102476,102408],{"class":1742},[170,102478,102479],{},"版本冲突说明:",[263,102481,102482,102488,102498,102507],{},[27,102483,102484,102485,29869],{},"不要安装 ",[65,102486,102487],{},"mujoco-py",[27,102489,102490,102491,102493,102494,102497],{},"如果旧项目里同时安装了 ",[65,102492,102487],{}," 和 ",[65,102495,102496],{},"mujoco","，建议新建干净虚拟环境。",[27,102499,102500,102503,102504,29869],{},[65,102501,102502],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[65,102505,102506],{},"~\u002F.mujoco\u002Fmujoco210",[27,102508,102509,102510,1245,102513,102516],{},"离屏渲染可能涉及 OpenGL 后端，",[65,102511,102512],{},"MUJOCO_GL=egl",[65,102514,102515],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102518,102520],{"id":102519},"_3核心概念解释","3.核心概念解释",[170,102522,102523],{},"MuJoCo 的基本执行流程:",[58,102525,102528],{"className":102526,"code":102527,"language":6676,"meta":63},[6674],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[65,102529,102527],{"__ignoreMap":63},[170,102531,102532,102534],{},[65,102533,102184],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[170,102536,102537,102539,102540,1841,102543,1841,102546,1841,102549,1841,102552,29869],{},[65,102538,102194],{}," 存放仿真运行时状态，例如 ",[65,102541,102542],{},"data.time",[65,102544,102545],{},"data.qpos",[65,102547,102548],{},"data.qvel",[65,102550,102551],{},"data.ctrl",[65,102553,102554],{},"data.xpos",[19,102556,102558],{"id":102557},"xml-是什么","XML 是什么",[170,102560,102561],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[58,102563,102565],{"className":54549,"code":102564,"language":54551,"meta":63,"style":63},"\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",[65,102566,102567,102589,102620],{"__ignoreMap":63},[68,102568,102569,102571,102573,102575,102577,102579,102582,102584,102587],{"class":70,"line":71},[68,102570,2537],{"class":78},[68,102572,53282],{"class":52784},[68,102574,16408],{"class":74},[68,102576,1685],{"class":78},[68,102578,54973],{"class":1742},[68,102580,102581],{"class":74}," pos",[68,102583,1685],{"class":78},[68,102585,102586],{"class":1742},"\"0 0 1\"",[68,102588,52791],{"class":78},[68,102590,102591,102593,102596,102598,102600,102603,102605,102607,102609,102612,102614,102617],{"class":70,"line":82},[68,102592,53626],{"class":78},[68,102594,102595],{"class":52784},"geom",[68,102597,16408],{"class":74},[68,102599,1685],{"class":78},[68,102601,102602],{"class":1742},"\"box_geom\"",[68,102604,55305],{"class":74},[68,102606,1685],{"class":78},[68,102608,54973],{"class":1742},[68,102610,102611],{"class":74}," size",[68,102613,1685],{"class":78},[68,102615,102616],{"class":1742},"\"0.1 0.1 0.1\"",[68,102618,102619],{"class":78},"\u002F>\n",[68,102621,102622,102624,102626],{"class":70,"line":98},[68,102623,53267],{"class":78},[68,102625,53282],{"class":52784},[68,102627,52791],{"class":78},[170,102629,102630],{},"这段意思是：",[263,102632,102633,102639,102646],{},[27,102634,102635,102636,102638],{},"创建一个叫 ",[65,102637,55196],{}," 的刚体。",[27,102640,102641,102642,102645],{},"它初始放在 ",[65,102643,102644],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[27,102647,102648],{},"它里面有一个盒子形状的几何体。",[19,102650,102652],{"id":102651},"timestep-是什么","timestep 是什么",[170,102654,102655],{},"XML 里的：",[58,102657,102659],{"className":54549,"code":102658,"language":54551,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[65,102660,102661],{"__ignoreMap":63},[68,102662,102663,102665,102667,102670,102672,102675,102678,102680,102683],{"class":70,"line":71},[68,102664,2537],{"class":78},[68,102666,70644],{"class":52784},[68,102668,102669],{"class":74}," timestep",[68,102671,1685],{"class":78},[68,102673,102674],{"class":1742},"\"0.01\"",[68,102676,102677],{"class":74}," gravity",[68,102679,1685],{"class":78},[68,102681,102682],{"class":1742},"\"0 0 -9.81\"",[68,102684,102619],{"class":78},[170,102686,102687,102688,102691,102692,102694],{},"表示每调用一次 ",[65,102689,102690],{},"mj_step","，仿真时间前进 ",[65,102693,40470],{}," 秒。循环 100 次，大约就是 1 秒：",[58,102696,102699],{"className":102697,"code":102698,"language":6676,"meta":63},[6674],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[65,102700,102698],{"__ignoreMap":63},[19,102702,102704],{"id":102703},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[170,102706,102707],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[58,102709,102712],{"className":102710,"code":102711,"language":6676,"meta":63},[6674],"x y z qw qx qy qz\n",[65,102713,102711],{"__ignoreMap":63},[170,102715,102716,102717,102720,102721,102724],{},"表示一个自由刚体的位置和姿态。其中 ",[65,102718,102719],{},"x y z"," 是位置，",[65,102722,102723],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102726,102728],{"id":102727},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[170,102730,102731],{},"新建文件:",[58,102733,102735],{"className":25307,"code":102734,"language":25309,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[65,102736,102737,102747,102754],{"__ignoreMap":63},[68,102738,102739,102742,102744],{"class":70,"line":71},[68,102740,102741],{"class":74},"mkdir",[68,102743,30700],{"class":85},[68,102745,102746],{"class":1742}," mujoco_tutorial\n",[68,102748,102749,102752],{"class":70,"line":82},[68,102750,102751],{"class":85},"cd",[68,102753,102746],{"class":1742},[68,102755,102756,102759],{"class":70,"line":98},[68,102757,102758],{"class":74},"touch",[68,102760,102761],{"class":1742}," ch1_first_sim.py\n",[170,102763,102764],{},"写入:",[58,102766,102768],{"className":31862,"code":102767,"language":31864,"meta":63,"style":63},"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",[65,102769,102770,102777,102781,102785,102795,102800,102805,102809,102814,102819,102823,102828,102833,102838,102843,102848,102853,102857,102861,102865,102878,102892,102902,102906,102918,102930,102942,102954,102966,102970,102987,102992,102996,103007,103018,103022,103026,103040],{"__ignoreMap":63},[68,102771,102772,102774],{"class":70,"line":71},[68,102773,31876],{"class":316},[68,102775,102776],{"class":78}," mujoco\n",[68,102778,102779],{"class":70,"line":82},[68,102780,3890],{"emptyLinePlaceholder":1567},[68,102782,102783],{"class":70,"line":98},[68,102784,3890],{"emptyLinePlaceholder":1567},[68,102786,102787,102790,102792],{"class":70,"line":104},[68,102788,102789],{"class":85},"XML",[68,102791,15052],{"class":316},[68,102793,102794],{"class":1742}," \"\"\"\n",[68,102796,102797],{"class":70,"line":112},[68,102798,102799],{"class":1742},"\u003Cmujoco model=\"first_sim\">\n",[68,102801,102802],{"class":70,"line":124},[68,102803,102804],{"class":1742},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[68,102806,102807],{"class":70,"line":1496},[68,102808,3890],{"emptyLinePlaceholder":1567},[68,102810,102811],{"class":70,"line":1502},[68,102812,102813],{"class":1742},"  \u003Cworldbody>\n",[68,102815,102816],{"class":70,"line":1510},[68,102817,102818],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,102820,102821],{"class":70,"line":1521},[68,102822,3890],{"emptyLinePlaceholder":1567},[68,102824,102825],{"class":70,"line":3103},[68,102826,102827],{"class":1742},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[68,102829,102830],{"class":70,"line":3108},[68,102831,102832],{"class":1742},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[68,102834,102835],{"class":70,"line":3114},[68,102836,102837],{"class":1742},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,102839,102840],{"class":70,"line":3119},[68,102841,102842],{"class":1742},"    \u003C\u002Fbody>\n",[68,102844,102845],{"class":70,"line":3133},[68,102846,102847],{"class":1742},"  \u003C\u002Fworldbody>\n",[68,102849,102850],{"class":70,"line":3138},[68,102851,102852],{"class":1742},"\u003C\u002Fmujoco>\n",[68,102854,102855],{"class":70,"line":3144},[68,102856,97173],{"class":1742},[68,102858,102859],{"class":70,"line":3165},[68,102860,3890],{"emptyLinePlaceholder":1567},[68,102862,102863],{"class":70,"line":3170},[68,102864,3890],{"emptyLinePlaceholder":1567},[68,102866,102867,102869,102871,102874,102876],{"class":70,"line":3184},[68,102868,33431],{"class":316},[68,102870,3463],{"class":74},[68,102872,102873],{"class":78},"() -> ",[68,102875,97161],{"class":85},[68,102877,5229],{"class":78},[68,102879,102880,102883,102885,102888,102890],{"class":70,"line":3189},[68,102881,102882],{"class":78},"    model ",[68,102884,1685],{"class":316},[68,102886,102887],{"class":78}," mujoco.MjModel.from_xml_string(",[68,102889,102789],{"class":85},[68,102891,1646],{"class":78},[68,102893,102894,102897,102899],{"class":70,"line":3218},[68,102895,102896],{"class":78},"    data ",[68,102898,1685],{"class":316},[68,102900,102901],{"class":78}," mujoco.MjData(model)\n",[68,102903,102904],{"class":70,"line":3223},[68,102905,3890],{"emptyLinePlaceholder":1567},[68,102907,102908,102910,102912,102915],{"class":70,"line":3240},[68,102909,32783],{"class":85},[68,102911,1640],{"class":78},[68,102913,102914],{"class":1742},"\"nq:\"",[68,102916,102917],{"class":78},", model.nq)\n",[68,102919,102920,102922,102924,102927],{"class":70,"line":3245},[68,102921,32783],{"class":85},[68,102923,1640],{"class":78},[68,102925,102926],{"class":1742},"\"nv:\"",[68,102928,102929],{"class":78},", model.nv)\n",[68,102931,102932,102934,102936,102939],{"class":70,"line":3250},[68,102933,32783],{"class":85},[68,102935,1640],{"class":78},[68,102937,102938],{"class":1742},"\"nu:\"",[68,102940,102941],{"class":78},", model.nu)\n",[68,102943,102944,102946,102948,102951],{"class":70,"line":3255},[68,102945,32783],{"class":85},[68,102947,1640],{"class":78},[68,102949,102950],{"class":1742},"\"initial time:\"",[68,102952,102953],{"class":78},", data.time)\n",[68,102955,102956,102958,102960,102963],{"class":70,"line":3269},[68,102957,32783],{"class":85},[68,102959,1640],{"class":78},[68,102961,102962],{"class":1742},"\"initial qpos:\"",[68,102964,102965],{"class":78},", data.qpos.copy())\n",[68,102967,102968],{"class":70,"line":3274},[68,102969,3890],{"emptyLinePlaceholder":1567},[68,102971,102972,102974,102977,102979,102981,102983,102985],{"class":70,"line":4067},[68,102973,4691],{"class":316},[68,102975,102976],{"class":78}," _ ",[68,102978,27529],{"class":316},[68,102980,33927],{"class":85},[68,102982,1640],{"class":78},[68,102984,1940],{"class":85},[68,102986,32270],{"class":78},[68,102988,102989],{"class":70,"line":4081},[68,102990,102991],{"class":78},"        mujoco.mj_step(model, data)\n",[68,102993,102994],{"class":70,"line":4089},[68,102995,3890],{"emptyLinePlaceholder":1567},[68,102997,102998,103000,103002,103005],{"class":70,"line":4094},[68,102999,32783],{"class":85},[68,103001,1640],{"class":78},[68,103003,103004],{"class":1742},"\"final time:\"",[68,103006,102953],{"class":78},[68,103008,103009,103011,103013,103016],{"class":70,"line":4100},[68,103010,32783],{"class":85},[68,103012,1640],{"class":78},[68,103014,103015],{"class":1742},"\"final qpos:\"",[68,103017,102965],{"class":78},[68,103019,103020],{"class":70,"line":4106},[68,103021,3890],{"emptyLinePlaceholder":1567},[68,103023,103024],{"class":70,"line":4111},[68,103025,3890],{"emptyLinePlaceholder":1567},[68,103027,103028,103030,103032,103035,103038],{"class":70,"line":9437},[68,103029,3023],{"class":316},[68,103031,32704],{"class":85},[68,103033,103034],{"class":316}," ==",[68,103036,103037],{"class":1742}," \"__main__\"",[68,103039,5229],{"class":78},[68,103041,103042],{"class":70,"line":9461},[68,103043,103044],{"class":78},"    main()\n",[19,103046,103047],{"id":103047},"代码逐段解释",[170,103049,103050],{},"导入库：",[58,103052,103054],{"className":31862,"code":103053,"language":31864,"meta":63,"style":63},"import mujoco\n",[65,103055,103056],{"__ignoreMap":63},[68,103057,103058,103060],{"class":70,"line":71},[68,103059,31876],{"class":316},[68,103061,102776],{"class":78},[170,103063,103064],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[170,103066,103067],{},"定义 XML：",[58,103069,103071],{"className":31862,"code":103070,"language":31864,"meta":63,"style":63},"XML = \"\"\"\n...\n\"\"\"\n",[65,103072,103073,103081,103086],{"__ignoreMap":63},[68,103074,103075,103077,103079],{"class":70,"line":71},[68,103076,102789],{"class":85},[68,103078,15052],{"class":316},[68,103080,102794],{"class":1742},[68,103082,103083],{"class":70,"line":82},[68,103084,103085],{"class":1742},"...\n",[68,103087,103088],{"class":70,"line":98},[68,103089,97173],{"class":1742},[170,103091,103092,103093,103096],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[65,103094,103095],{},"freejoint"," 的方块。",[170,103098,103099],{},"编译模型：",[58,103101,103103],{"className":31862,"code":103102,"language":31864,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\n",[65,103104,103105],{"__ignoreMap":63},[68,103106,103107,103110,103112,103114,103116],{"class":70,"line":71},[68,103108,103109],{"class":78},"model ",[68,103111,1685],{"class":316},[68,103113,102887],{"class":78},[68,103115,102789],{"class":85},[68,103117,1646],{"class":78},[170,103119,103120],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[170,103122,103123],{},"创建数据：",[58,103125,103127],{"className":31862,"code":103126,"language":31864,"meta":63,"style":63},"data = mujoco.MjData(model)\n",[65,103128,103129],{"__ignoreMap":63},[68,103130,103131,103134,103136],{"class":70,"line":71},[68,103132,103133],{"class":78},"data ",[68,103135,1685],{"class":316},[68,103137,102901],{"class":78},[170,103139,103140,103142,103143,103145],{},[65,103141,34885],{}," 会保存仿真当前状态。刚创建时，时间是 ",[65,103144,1248],{},"，方块还在初始位置。",[170,103147,103148],{},"推进仿真：",[58,103150,103152],{"className":31862,"code":103151,"language":31864,"meta":63,"style":63},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[65,103153,103154,103170],{"__ignoreMap":63},[68,103155,103156,103158,103160,103162,103164,103166,103168],{"class":70,"line":71},[68,103157,4515],{"class":316},[68,103159,102976],{"class":78},[68,103161,27529],{"class":316},[68,103163,33927],{"class":85},[68,103165,1640],{"class":78},[68,103167,1940],{"class":85},[68,103169,32270],{"class":78},[68,103171,103172],{"class":70,"line":82},[68,103173,103174],{"class":78},"    mujoco.mj_step(model, data)\n",[170,103176,103177,103178,103180],{},"每次 ",[65,103179,102690],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,103182,103183],{"id":103183},"代码逐行细讲",[170,103185,103186],{},"下面把完整代码按新手视角拆开讲。",[58,103188,103189],{"className":31862,"code":103053,"language":31864,"meta":63,"style":63},[65,103190,103191],{"__ignoreMap":63},[68,103192,103193,103195],{"class":70,"line":71},[68,103194,31876],{"class":316},[68,103196,102776],{"class":78},[170,103198,103199,103201,103202,1841,103204,1841,103206,29869],{},[65,103200,31876],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[65,103203,102150],{},[65,103205,102155],{},[65,103207,103208],{},"mujoco.mj_step",[58,103210,103211],{"className":31862,"code":103070,"language":31864,"meta":63,"style":63},[65,103212,103213,103221,103225],{"__ignoreMap":63},[68,103214,103215,103217,103219],{"class":70,"line":71},[68,103216,102789],{"class":85},[68,103218,15052],{"class":316},[68,103220,102794],{"class":1742},[68,103222,103223],{"class":70,"line":82},[68,103224,103085],{"class":1742},[68,103226,103227],{"class":70,"line":98},[68,103228,97173],{"class":1742},[170,103230,103231,103233,103234,103237],{},[65,103232,102789],{}," 是一个变量名。右边的三引号 ",[65,103235,103236],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[58,103239,103240],{"className":54549,"code":102799,"language":54551,"meta":63,"style":63},[65,103241,103242],{"__ignoreMap":63},[68,103243,103244,103246,103248,103251,103253,103256],{"class":70,"line":71},[68,103245,2537],{"class":78},[68,103247,102496],{"class":52784},[68,103249,103250],{"class":74}," model",[68,103252,1685],{"class":78},[68,103254,103255],{"class":1742},"\"first_sim\"",[68,103257,52791],{"class":78},[170,103259,103260,103261,103264,103265,29869],{},"这是 XML 的根标签。",[65,103262,103263],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[65,103266,103267],{},"first_sim",[58,103269,103270],{"className":54549,"code":102658,"language":54551,"meta":63,"style":63},[65,103271,103272],{"__ignoreMap":63},[68,103273,103274,103276,103278,103280,103282,103284,103286,103288,103290],{"class":70,"line":71},[68,103275,2537],{"class":78},[68,103277,70644],{"class":52784},[68,103279,102669],{"class":74},[68,103281,1685],{"class":78},[68,103283,102674],{"class":1742},[68,103285,102677],{"class":74},[68,103287,1685],{"class":78},[68,103289,102682],{"class":1742},[68,103291,102619],{"class":78},[170,103293,103294,103296,103297,103300,103301,103304],{},[65,103295,70644],{}," 用来设置仿真参数。",[65,103298,103299],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[65,103302,103303],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[58,103306,103308],{"className":54549,"code":103307,"language":54551,"meta":63,"style":63},"\u003Cworldbody>\n",[65,103309,103310],{"__ignoreMap":63},[68,103311,103312,103314,103317],{"class":70,"line":71},[68,103313,2537],{"class":78},[68,103315,103316],{"class":52784},"worldbody",[68,103318,52791],{"class":78},[170,103320,103321,103323],{},[65,103322,103316],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[58,103325,103327],{"className":54549,"code":103326,"language":54551,"meta":63,"style":63},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[65,103328,103329],{"__ignoreMap":63},[68,103330,103331,103333,103335,103337,103339,103342,103344,103346,103349,103351,103353,103356,103358,103360,103363],{"class":70,"line":71},[68,103332,2537],{"class":78},[68,103334,102595],{"class":52784},[68,103336,16408],{"class":74},[68,103338,1685],{"class":78},[68,103340,103341],{"class":1742},"\"floor\"",[68,103343,55305],{"class":74},[68,103345,1685],{"class":78},[68,103347,103348],{"class":1742},"\"plane\"",[68,103350,102611],{"class":74},[68,103352,1685],{"class":78},[68,103354,103355],{"class":1742},"\"2 2 0.1\"",[68,103357,80244],{"class":74},[68,103359,1685],{"class":78},[68,103361,103362],{"class":1742},"\"0.8 0.8 0.8 1\"",[68,103364,102619],{"class":78},[170,103366,103367,103368,103370,103371,103374,103375,103378,103379,103381],{},"这行创建地面。",[65,103369,102595],{}," 是几何体。",[65,103372,103373],{},"name=\"floor\""," 是名字。",[65,103376,103377],{},"type=\"plane\""," 表示平面。",[65,103380,56588],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[58,103383,103385],{"className":54549,"code":103384,"language":54551,"meta":63,"style":63},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[65,103386,103387],{"__ignoreMap":63},[68,103388,103389,103391,103393,103395,103397,103399,103401,103403,103405],{"class":70,"line":71},[68,103390,2537],{"class":78},[68,103392,53282],{"class":52784},[68,103394,16408],{"class":74},[68,103396,1685],{"class":78},[68,103398,54973],{"class":1742},[68,103400,102581],{"class":74},[68,103402,1685],{"class":78},[68,103404,102586],{"class":1742},[68,103406,52791],{"class":78},[170,103408,103409,103410,29869,103412,103415,103416,103418],{},"这行创建一个刚体，名字叫 ",[65,103411,55196],{},[65,103413,103414],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[65,103417,102644],{},"，也就是离地面 1 米高。",[58,103420,103422],{"className":54549,"code":103421,"language":54551,"meta":63,"style":63},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[65,103423,103424],{"__ignoreMap":63},[68,103425,103426,103428,103430,103432,103434,103437],{"class":70,"line":71},[68,103427,2537],{"class":78},[68,103429,103095],{"class":52784},[68,103431,16408],{"class":74},[68,103433,1685],{"class":78},[68,103435,103436],{"class":1742},"\"box_free\"",[68,103438,102619],{"class":78},[170,103440,103441,103442,103444],{},"这行很重要。",[65,103443,103095],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[58,103446,103448],{"className":54549,"code":103447,"language":54551,"meta":63,"style":63},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[65,103449,103450],{"__ignoreMap":63},[68,103451,103452,103454,103456,103458,103460,103462,103464,103466,103468,103470,103472,103474,103477,103479,103481,103483,103485,103488],{"class":70,"line":71},[68,103453,2537],{"class":78},[68,103455,102595],{"class":52784},[68,103457,16408],{"class":74},[68,103459,1685],{"class":78},[68,103461,102602],{"class":1742},[68,103463,55305],{"class":74},[68,103465,1685],{"class":78},[68,103467,54973],{"class":1742},[68,103469,102611],{"class":74},[68,103471,1685],{"class":78},[68,103473,102616],{"class":1742},[68,103475,103476],{"class":74}," mass",[68,103478,1685],{"class":78},[68,103480,5168],{"class":1742},[68,103482,80244],{"class":74},[68,103484,1685],{"class":78},[68,103486,103487],{"class":1742},"\"1 0 0 1\"",[68,103489,102619],{"class":78},[170,103491,103492,103493,103496,103497,103500,103501,103504,103505,103508],{},"这行给 box body 添加一个盒子形状。",[65,103494,103495],{},"type=\"box\""," 表示形状是盒子。",[65,103498,103499],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[65,103502,103503],{},"mass=\"1\""," 表示质量是 1。",[65,103506,103507],{},"rgba=\"1 0 0 1\""," 表示红色。",[58,103510,103512],{"className":31862,"code":103511,"language":31864,"meta":63,"style":63},"def main() -> None:\n",[65,103513,103514],{"__ignoreMap":63},[68,103515,103516,103518,103520,103522,103524],{"class":70,"line":71},[68,103517,33431],{"class":316},[68,103519,3463],{"class":74},[68,103521,102873],{"class":78},[68,103523,97161],{"class":85},[68,103525,5229],{"class":78},[170,103527,103528,103530,103531,103534,103535,103538],{},[65,103529,33431],{}," 用来定义函数。这里定义了一个叫 ",[65,103532,103533],{},"main"," 的函数。",[65,103536,103537],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[58,103540,103541],{"className":31862,"code":103102,"language":31864,"meta":63,"style":63},[65,103542,103543],{"__ignoreMap":63},[68,103544,103545,103547,103549,103551,103553],{"class":70,"line":71},[68,103546,103109],{"class":78},[68,103548,1685],{"class":316},[68,103550,102887],{"class":78},[68,103552,102789],{"class":85},[68,103554,1646],{"class":78},[170,103556,103557,103558,103561],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[65,103559,103560],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[58,103563,103564],{"className":31862,"code":103126,"language":31864,"meta":63,"style":63},[65,103565,103566],{"__ignoreMap":63},[68,103567,103568,103570,103572],{"class":70,"line":71},[68,103569,103133],{"class":78},[68,103571,1685],{"class":316},[68,103573,102901],{"class":78},[170,103575,103576,103577,103579,103580,103582],{},"这行创建仿真数据。",[65,103578,34885],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[65,103581,34885],{}," 都会变化。",[58,103584,103586],{"className":31862,"code":103585,"language":31864,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[65,103587,103588,103598,103608],{"__ignoreMap":63},[68,103589,103590,103592,103594,103596],{"class":70,"line":71},[68,103591,31899],{"class":85},[68,103593,1640],{"class":78},[68,103595,102914],{"class":1742},[68,103597,102917],{"class":78},[68,103599,103600,103602,103604,103606],{"class":70,"line":82},[68,103601,31899],{"class":85},[68,103603,1640],{"class":78},[68,103605,102926],{"class":1742},[68,103607,102929],{"class":78},[68,103609,103610,103612,103614,103616],{"class":70,"line":98},[68,103611,31899],{"class":85},[68,103613,1640],{"class":78},[68,103615,102938],{"class":1742},[68,103617,102941],{"class":78},[170,103619,103620,103622,103623,103626,103627,103630,103631,103634,103635,103638],{},[65,103621,31899],{}," 用来输出信息。",[65,103624,103625],{},"model.nq"," 是位置变量数量，",[65,103628,103629],{},"model.nv"," 是速度变量数量，",[65,103632,103633],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[65,103636,103637],{},"nu"," 是 0。",[58,103640,103642],{"className":31862,"code":103641,"language":31864,"meta":63,"style":63},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[65,103643,103644,103654],{"__ignoreMap":63},[68,103645,103646,103648,103650,103652],{"class":70,"line":71},[68,103647,31899],{"class":85},[68,103649,1640],{"class":78},[68,103651,102950],{"class":1742},[68,103653,102953],{"class":78},[68,103655,103656,103658,103660,103662],{"class":70,"line":82},[68,103657,31899],{"class":85},[68,103659,1640],{"class":78},[68,103661,102962],{"class":1742},[68,103663,102965],{"class":78},[170,103665,103666,103667,103669,103670,103672,103673,103676],{},"这里打印初始时间和初始位置。",[65,103668,102542],{}," 一开始是 0。",[65,103671,102545],{}," 是位置数组。",[65,103674,103675],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[58,103678,103679],{"className":31862,"code":103151,"language":31864,"meta":63,"style":63},[65,103680,103681,103697],{"__ignoreMap":63},[68,103682,103683,103685,103687,103689,103691,103693,103695],{"class":70,"line":71},[68,103684,4515],{"class":316},[68,103686,102976],{"class":78},[68,103688,27529],{"class":316},[68,103690,33927],{"class":85},[68,103692,1640],{"class":78},[68,103694,1940],{"class":85},[68,103696,32270],{"class":78},[68,103698,103699],{"class":70,"line":82},[68,103700,103174],{"class":78},[170,103702,103703,103705,103706,103709,103710,103712,103713,103715],{},[65,103704,4515],{}," 是循环。",[65,103707,103708],{},"range(100)"," 表示循环 100 次。",[65,103711,2619],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[65,103714,102690],{},"，仿真就前进一步。",[58,103717,103719],{"className":31862,"code":103718,"language":31864,"meta":63,"style":63},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[65,103720,103721,103731],{"__ignoreMap":63},[68,103722,103723,103725,103727,103729],{"class":70,"line":71},[68,103724,31899],{"class":85},[68,103726,1640],{"class":78},[68,103728,103004],{"class":1742},[68,103730,102953],{"class":78},[68,103732,103733,103735,103737,103739],{"class":70,"line":82},[68,103734,31899],{"class":85},[68,103736,1640],{"class":78},[68,103738,103015],{"class":1742},[68,103740,102965],{"class":78},[170,103742,103743],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[58,103745,103747],{"className":31862,"code":103746,"language":31864,"meta":63,"style":63},"if __name__ == \"__main__\":\n    main()\n",[65,103748,103749,103761],{"__ignoreMap":63},[68,103750,103751,103753,103755,103757,103759],{"class":70,"line":71},[68,103752,3023],{"class":316},[68,103754,32704],{"class":85},[68,103756,103034],{"class":316},[68,103758,103037],{"class":1742},[68,103760,5229],{"class":78},[68,103762,103763],{"class":70,"line":82},[68,103764,103044],{"class":78},[170,103766,103767,103768,103771,103772,29869],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[65,103769,103770],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[65,103773,103770],{},[170,103775,103776],{},"运行:",[58,103778,103780],{"className":25307,"code":103779,"language":25309,"meta":63,"style":63},"python ch1_first_sim.py\n",[65,103781,103782],{"__ignoreMap":63},[68,103783,103784,103786],{"class":70,"line":71},[68,103785,31864],{"class":74},[68,103787,102761],{"class":1742},[14,103789,103791],{"id":103790},"_5运行结果说明","5.运行结果说明",[170,103793,103794],{},"你应该看到类似输出:",[58,103796,103799],{"className":103797,"code":103798,"language":6676,"meta":63},[6674],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[65,103800,103798],{"__ignoreMap":63},[170,103802,103803,103805,103806,103809,103810,29869],{},[65,103804,103095],{}," 有 7 个位置变量: ",[65,103807,103808],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[65,103811,103812],{},"vx vy vz wx wy wz",[170,103814,103815,103816,103819],{},"你还会看到 ",[65,103817,103818],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103821,103823],{"id":103822},"_6验证步骤","6.验证步骤",[170,103825,103826],{},"确认版本:",[58,103828,103829],{"className":25307,"code":102414,"language":25309,"meta":63,"style":63},[65,103830,103831],{"__ignoreMap":63},[68,103832,103833,103835,103837],{"class":70,"line":71},[68,103834,31864],{"class":74},[68,103836,31842],{"class":85},[68,103838,102425],{"class":1742},[170,103840,103841],{},"确认导入的是官方 bindings:",[58,103843,103845],{"className":25307,"code":103844,"language":25309,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco)\"\n",[65,103846,103847],{"__ignoreMap":63},[68,103848,103849,103851,103853],{"class":70,"line":71},[68,103850,31864],{"class":74},[68,103852,31842],{"class":85},[68,103854,103855],{"class":1742}," \"import mujoco; print(mujoco)\"\n",[170,103857,103858],{},"运行程序:",[58,103860,103861],{"className":25307,"code":103779,"language":25309,"meta":63,"style":63},[65,103862,103863],{"__ignoreMap":63},[68,103864,103865,103867],{"class":70,"line":71},[68,103866,31864],{"class":74},[68,103868,102761],{"class":1742},[170,103870,103871,103872,103875,103876,29869],{},"检查 ",[65,103873,103874],{},"final time"," 是否约等于 ",[65,103877,103878],{},"1.0",[170,103880,103881],{},"再做几个小实验：",[263,103883,103884,103894,103902,103915],{},[27,103885,103886,103887,103889,103890,103893],{},"把 ",[65,103888,103414],{}," 改成 ",[65,103891,103892],{},"pos=\"0 0 2\"","，观察初始高度变化。",[27,103895,103886,103896,103889,103898,103901],{},[65,103897,103303],{},[65,103899,103900],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[27,103903,103886,103904,103889,103906,103909,103910,103912,103913,29869],{},[65,103905,103299],{},[65,103907,103908],{},"timestep=\"0.005\"","，观察 100 步后的 ",[65,103911,103874],{}," 是否变成约 ",[65,103914,36813],{},[27,103916,103917,103918,103921],{},"删除 ",[65,103919,103920],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[170,103923,103924],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103926,103928],{"id":103927},"_7常见错误与解决方案","7.常见错误与解决方案",[19,103930,103932],{"id":103931},"modulenotfounderror-no-module-named-mujoco",[65,103933,103934],{},"ModuleNotFoundError: No module named 'mujoco'",[170,103936,103937],{},"解决:",[58,103939,103941],{"className":25307,"code":103940,"language":25309,"meta":63,"style":63},"pip install \"mujoco>=2.3\"\n",[65,103942,103943],{"__ignoreMap":63},[68,103944,103945,103947,103949],{"class":70,"line":71},[68,103946,25316],{"class":74},[68,103948,25319],{"class":1742},[68,103950,103951],{"class":1742}," \"mujoco>=2.3\"\n",[19,103953,103955],{"id":103954},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[170,103957,103958],{},"先安装系统依赖:",[58,103960,103962],{"className":25307,"code":103961,"language":25309,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[65,103963,103964],{"__ignoreMap":63},[68,103965,103966,103968,103970,103972,103974,103977,103979,103982,103984,103987,103989],{"class":70,"line":71},[68,103967,26062],{"class":74},[68,103969,27801],{"class":1742},[68,103971,25319],{"class":1742},[68,103973,27886],{"class":85},[68,103975,103976],{"class":1742}," mesa-libGL",[68,103978,102289],{"class":1742},[68,103980,103981],{"class":1742}," glfw",[68,103983,102309],{"class":1742},[68,103985,103986],{"class":1742}," libX11",[68,103988,102322],{"class":1742},[68,103990,103991],{"class":1742}," libXrandr\n",[19,103993,103995],{"id":103994},"xml-解析失败","XML 解析失败",[170,103997,103998],{},"检查:",[263,104000,104001,104004,104007,104013],{},[27,104002,104003],{},"标签是否闭合",[27,104005,104006],{},"属性是否带引号",[27,104008,104009,104010],{},"根节点是否是 ",[65,104011,104012],{},"\u003Cmujoco>",[27,104014,104015,104017,104018,104021],{},[65,104016,53282],{}," 是否放在 ",[65,104019,104020],{},"\u003Cworldbody>"," 内部",[19,104023,104025,104027,104028],{"id":104024},"final-time-不是严格等于-10",[65,104026,103874],{}," 不是严格等于 ",[65,104029,103878],{},[170,104031,104032],{},"这通常不是错误。浮点数计算可能得到：",[58,104034,104037],{"className":104035,"code":104036,"language":6676,"meta":63},[6674],"1.0000000000000007\n",[65,104038,104036],{"__ignoreMap":63},[170,104040,104041,104042,104044],{},"只要接近 ",[65,104043,103878],{}," 就正常。",[19,104046,104047],{"id":104047},"方块没有掉下来",[170,104049,104050],{},"检查：",[263,104052,104053,104059,104065,104070],{},[27,104054,104055,104056],{},"方块 body 里是否有 ",[65,104057,104058],{},"\u003Cfreejoint\u002F>",[27,104060,104061,104062],{},"重力是否是 ",[65,104063,104064],{},"0 0 -9.81",[27,104066,104067,104068],{},"是否真的调用了 ",[65,104069,102160],{},[27,104071,104072,104073,104075,104076],{},"你看的是否是 ",[65,104074,103818],{},"，不是 ",[65,104077,104078],{},"initial qpos",[14,104080,104082],{"id":104081},"_8本章小结","8.本章小结",[170,104084,104085],{},"本章你已经完成了 MuJoCo 的最小闭环：",[58,104087,104090],{"className":104088,"code":104089,"language":6676,"meta":63},[6674],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[65,104091,104089],{"__ignoreMap":63},[170,104093,104094],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1553,104096,104097],{},"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":63,"searchDepth":82,"depth":82,"links":104099},[104100,104101,104102,104107,104111,104112,104113,104121],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":104103},[104104,104105,104106],{"id":102557,"depth":98,"text":102558},{"id":102651,"depth":98,"text":102652},{"id":102703,"depth":98,"text":102704},{"id":102727,"depth":82,"text":102728,"children":104108},[104109,104110],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":104114},[104115,104116,104117,104118,104120],{"id":103931,"depth":98,"text":103934},{"id":103954,"depth":98,"text":103955},{"id":103994,"depth":98,"text":103995},{"id":104024,"depth":98,"text":104119},"final time 不是严格等于 1.0",{"id":104047,"depth":98,"text":104047},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102113,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104128,"title":104129,"body":104130,"description":63,"extension":1565,"meta":105786,"navigation":1567,"path":105787,"seo":105788,"stem":105789,"__hash__":105790},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104131,"toc":105762},[104132,104135,104137,104140,104143,104160,104255,104258,104264,104266,104268,104292,104295,104309,104312,104353,104355,104368,104370,104373,104421,104433,104436,104439,104445,104458,104525,104528,104547,104550,104553,104559,104561,104570,104573,104577,104586,104668,104677,104681,104687,104701,104711,104713,105043,105046,105058,105060,105071,105073,105076,105094,105097,105100,105118,105129,105132,105147,105157,105159,105180,105197,105217,105223,105263,105279,105295,105301,105304,105328,105344,105349,105379,105396,105421,105424,105439,105448,105463,105472,105487,105494,105496,105506,105519,105526,105529,105568,105575,105577,105629,105631,105637,105640,105647,105654,105657,105659,105677,105680,105683,105717,105729,105731,105734,105756,105759],[10,104133,104129],{"id":104134},"_2xml-与-mjcf-物理建模基础",[14,104136,102122],{"id":102121},[170,104138,104139],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[170,104141,104142],{},"本章结束后，你应该能看懂一个简单模型里：",[263,104144,104145,104148,104151,104154,104157],{},[27,104146,104147],{},"地面在哪里。",[27,104149,104150],{},"物体初始位置在哪里。",[27,104152,104153],{},"几何体是什么形状。",[27,104155,104156],{},"哪些 body 可以自由运动。",[27,104158,104159],{},"如何用名字在 Python 里找到 XML 中的对象。",[128,104161,104162,104172],{},[131,104163,104164],{},[134,104165,104166,104169],{},[137,104167,104168],{"align":92},"标签",[137,104170,104171],{"align":92},"作用",[144,104173,104174,104183,104193,104202,104212,104222,104235,104245],{},[134,104175,104176,104180],{},[149,104177,104178],{"align":92},[65,104179,104012],{},[149,104181,104182],{"align":92},"根节点",[134,104184,104185,104190],{},[149,104186,104187],{"align":92},[65,104188,104189],{},"\u003Coption>",[149,104191,104192],{"align":92},"仿真参数",[134,104194,104195,104199],{},[149,104196,104197],{"align":92},[65,104198,104020],{},[149,104200,104201],{"align":92},"世界中的物体",[134,104203,104204,104209],{},[149,104205,104206],{"align":92},[65,104207,104208],{},"\u003Cbody>",[149,104210,104211],{"align":92},"刚体",[134,104213,104214,104219],{},[149,104215,104216],{"align":92},[65,104217,104218],{},"\u003Cgeom>",[149,104220,104221],{"align":92},"几何体、碰撞体、可视体",[134,104223,104224,104232],{},[149,104225,104226,26464,104229],{"align":92},[65,104227,104228],{},"\u003Cjoint>",[65,104230,104231],{},"\u003Cfreejoint>",[149,104233,104234],{"align":92},"关节",[134,104236,104237,104242],{},[149,104238,104239],{"align":92},[65,104240,104241],{},"\u003Csite>",[149,104243,104244],{"align":92},"标记点",[134,104246,104247,104252],{},[149,104248,104249],{"align":92},[65,104250,104251],{},"\u003Cactuator>",[149,104253,104254],{"align":92},"控制器",[170,104256,104257],{},"初学时可以先记住：",[58,104259,104262],{"className":104260,"code":104261,"language":6676,"meta":63},[6674],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[65,104263,104261],{"__ignoreMap":63},[14,104265,102245],{"id":102244},[170,104267,102248],{},[58,104269,104271],{"className":25307,"code":104270,"language":25309,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[65,104272,104273],{"__ignoreMap":63},[68,104274,104275,104277,104279,104281,104283,104285,104287,104289],{"class":70,"line":71},[68,104276,26062],{"class":74},[68,104278,27801],{"class":1742},[68,104280,25319],{"class":1742},[68,104282,27886],{"class":85},[68,104284,103976],{"class":1742},[68,104286,102289],{"class":1742},[68,104288,103981],{"class":1742},[68,104290,104291],{"class":1742}," glfw-devel\n",[170,104293,104294],{},"pip:",[58,104296,104297],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},[65,104298,104299],{"__ignoreMap":63},[68,104300,104301,104303,104305,104307],{"class":70,"line":71},[68,104302,25316],{"class":74},[68,104304,25319],{"class":1742},[68,104306,102405],{"class":1742},[68,104308,102408],{"class":1742},[170,104310,104311],{},"conda:",[58,104313,104315],{"className":25307,"code":104314,"language":25309,"meta":63,"style":63},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[65,104316,104317,104334,104343],{"__ignoreMap":63},[68,104318,104319,104321,104323,104325,104328,104330,104332],{"class":70,"line":71},[68,104320,31814],{"class":74},[68,104322,30660],{"class":1742},[68,104324,26601],{"class":85},[68,104326,104327],{"class":1742}," mujoco-xml",[68,104329,102450],{"class":1742},[68,104331,102453],{"class":85},[68,104333,102456],{"class":85},[68,104335,104336,104338,104340],{"class":70,"line":82},[68,104337,31814],{"class":74},[68,104339,102463],{"class":1742},[68,104341,104342],{"class":1742}," mujoco-xml\n",[68,104344,104345,104347,104349,104351],{"class":70,"line":98},[68,104346,25316],{"class":74},[68,104348,25319],{"class":1742},[68,104350,102405],{"class":1742},[68,104352,102408],{"class":1742},[170,104354,102479],{},[263,104356,104357,104360,104365],{},[27,104358,104359],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[27,104361,104362,104363,29869],{},"本章使用基础标签，适用于 ",[65,104364,102502],{},[27,104366,104367],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104369,102520],{"id":102519},[170,104371,104372],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[58,104374,104376],{"className":54549,"code":104375,"language":54551,"meta":63,"style":63},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[65,104377,104378,104392,104400,104405,104413],{"__ignoreMap":63},[68,104379,104380,104382,104384,104386,104388,104390],{"class":70,"line":71},[68,104381,2537],{"class":78},[68,104383,102496],{"class":52784},[68,104385,103250],{"class":74},[68,104387,1685],{"class":78},[68,104389,64157],{"class":1742},[68,104391,52791],{"class":78},[68,104393,104394,104396,104398],{"class":70,"line":82},[68,104395,53626],{"class":78},[68,104397,103316],{"class":52784},[68,104399,52791],{"class":78},[68,104401,104402],{"class":70,"line":98},[68,104403,104404],{"class":78},"    ...\n",[68,104406,104407,104409,104411],{"class":70,"line":104},[68,104408,53899],{"class":78},[68,104410,103316],{"class":52784},[68,104412,52791],{"class":78},[68,104414,104415,104417,104419],{"class":70,"line":112},[68,104416,53267],{"class":78},[68,104418,102496],{"class":52784},[68,104420,52791],{"class":78},[170,104422,104423,104425,104426,104428,104429,104432],{},[65,104424,53282],{}," 表示刚体。",[65,104427,102595],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[65,104430,104431],{},"joint"," 表示刚体相对父刚体如何运动。",[19,104434,104435],{"id":104435},"层级结构非常重要",[170,104437,104438],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[58,104440,104443],{"className":104441,"code":104442,"language":6676,"meta":63},[6674],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[65,104444,104442],{"__ignoreMap":63},[170,104446,104447,102493,104450,104453,104454,104457],{},[65,104448,104449],{},"red_box_geom",[65,104451,104452],{},"box_center"," 都属于 ",[65,104455,104456],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[58,104459,104461],{"className":54549,"code":104460,"language":54551,"meta":63,"style":63},"\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",[65,104462,104463,104483,104497,104517],{"__ignoreMap":63},[68,104464,104465,104467,104469,104471,104473,104475,104477,104479,104481],{"class":70,"line":71},[68,104466,2537],{"class":78},[68,104468,53282],{"class":52784},[68,104470,16408],{"class":74},[68,104472,1685],{"class":78},[68,104474,54973],{"class":1742},[68,104476,102581],{"class":74},[68,104478,1685],{"class":78},[68,104480,102586],{"class":1742},[68,104482,52791],{"class":78},[68,104484,104485,104487,104489,104491,104493,104495],{"class":70,"line":82},[68,104486,53626],{"class":78},[68,104488,103095],{"class":52784},[68,104490,16408],{"class":74},[68,104492,1685],{"class":78},[68,104494,103436],{"class":1742},[68,104496,102619],{"class":78},[68,104498,104499,104501,104503,104505,104507,104509,104511,104513,104515],{"class":70,"line":98},[68,104500,53626],{"class":78},[68,104502,102595],{"class":52784},[68,104504,55305],{"class":74},[68,104506,1685],{"class":78},[68,104508,54973],{"class":1742},[68,104510,102611],{"class":74},[68,104512,1685],{"class":78},[68,104514,102616],{"class":1742},[68,104516,102619],{"class":78},[68,104518,104519,104521,104523],{"class":70,"line":104},[68,104520,53267],{"class":78},[68,104522,53282],{"class":52784},[68,104524,52791],{"class":78},[170,104526,104527],{},"含义:",[263,104529,104530,104536,104541,104544],{},[27,104531,104532,104533,104535],{},"创建名为 ",[65,104534,55196],{}," 的刚体",[27,104537,104538,104539],{},"初始位置在世界坐标 ",[65,104540,102644],{},[27,104542,104543],{},"它有一个自由关节",[27,104545,104546],{},"它有一个盒子几何体",[19,104548,104549],{"id":104549},"坐标怎么理解",[170,104551,104552],{},"MuJoCo 默认使用三维坐标：",[58,104554,104557],{"className":104555,"code":104556,"language":6676,"meta":63},[6674],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[65,104558,104556],{"__ignoreMap":63},[170,104560,16121],{},[58,104562,104564],{"className":54549,"code":104563,"language":54551,"meta":63,"style":63},"pos=\"0 0 1\"\n",[65,104565,104566],{"__ignoreMap":63},[68,104567,104568],{"class":70,"line":71},[68,104569,104563],{"class":78},[170,104571,104572],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,104574,104576],{"id":104575},"geom-的-size-怎么理解","geom 的 size 怎么理解",[170,104578,104579,104580,84007,104583,104585],{},"不同 ",[65,104581,104582],{},"type",[65,104584,32980],{}," 含义不同：",[128,104587,104588,104603],{},[131,104589,104590],{},[134,104591,104592,104596,104601],{},[137,104593,104594],{"align":92},[65,104595,104582],{},[137,104597,104598,104600],{"align":92},[65,104599,32980],{}," 示例",[137,104602,102175],{"align":92},[144,104604,104605,104619,104634,104653],{},[134,104606,104607,104611,104616],{},[149,104608,104609],{"align":92},[65,104610,55196],{},[149,104612,104613],{"align":92},[65,104614,104615],{},"size=\"0.1 0.2 0.3\"",[149,104617,104618],{"align":92},"x\u002Fy\u002Fz 半边长，不是完整长度",[134,104620,104621,104626,104631],{},[149,104622,104623],{"align":92},[65,104624,104625],{},"sphere",[149,104627,104628],{"align":92},[65,104629,104630],{},"size=\"0.1\"",[149,104632,104633],{"align":92},"球半径",[134,104635,104636,104641,104646],{},[149,104637,104638],{"align":92},[65,104639,104640],{},"capsule",[149,104642,104643],{"align":92},[65,104644,104645],{},"size=\"0.03\"",[149,104647,104648,104649,104652],{"align":92},"胶囊半径，长度常用 ",[65,104650,104651],{},"fromto"," 指定",[134,104654,104655,104660,104665],{},[149,104656,104657],{"align":92},[65,104658,104659],{},"plane",[149,104661,104662],{"align":92},[65,104663,104664],{},"size=\"3 3 0.1\"",[149,104666,104667],{"align":92},"可视平面大小，通常当地面",[170,104669,104670,104671,104673,104674,104676],{},"最容易踩坑的是 box：",[65,104672,103499],{}," 表示边长大约是 ",[65,104675,33521],{},"，因为 MuJoCo 用的是半边长。",[19,104678,104680],{"id":104679},"site-是什么","site 是什么",[170,104682,104683,104686],{},[65,104684,104685],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[263,104688,104689,104692,104695,104698],{},[27,104690,104691],{},"标记机械臂末端。",[27,104693,104694],{},"标记目标位置。",[27,104696,104697],{},"放传感器或相机参考点。",[27,104699,104700],{},"在 Python 中读取某个关键点的世界坐标。",[170,104702,104703,104704,102493,104707,104710],{},"在后面的 Reacher 任务中，",[65,104705,104706],{},"tip",[65,104708,104709],{},"target"," 就会用 site 表示。",[14,104712,102728],{"id":102727},[58,104714,104716],{"className":31862,"code":104715,"language":31864,"meta":63,"style":63},"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",[65,104717,104718,104724,104734,104738,104742,104750,104755,104759,104763,104767,104772,104776,104781,104786,104791,104796,104800,104804,104808,104812,104816,104820,104832,104844,104852,104856,104871,104886,104890,104903,104918,104931,104944,104948,104964,104968,104972,104983,104995,105007,105019,105023,105027,105039],{"__ignoreMap":63},[68,104719,104720,104722],{"class":70,"line":71},[68,104721,31876],{"class":316},[68,104723,102776],{"class":78},[68,104725,104726,104728,104730,104732],{"class":70,"line":82},[68,104727,31876],{"class":316},[68,104729,32864],{"class":78},[68,104731,32867],{"class":316},[68,104733,32870],{"class":78},[68,104735,104736],{"class":70,"line":98},[68,104737,3890],{"emptyLinePlaceholder":1567},[68,104739,104740],{"class":70,"line":104},[68,104741,3890],{"emptyLinePlaceholder":1567},[68,104743,104744,104746,104748],{"class":70,"line":112},[68,104745,102789],{"class":85},[68,104747,15052],{"class":316},[68,104749,102794],{"class":1742},[68,104751,104752],{"class":70,"line":124},[68,104753,104754],{"class":1742},"\u003Cmujoco model=\"xml_basic\">\n",[68,104756,104757],{"class":70,"line":1496},[68,104758,102804],{"class":1742},[68,104760,104761],{"class":70,"line":1502},[68,104762,3890],{"emptyLinePlaceholder":1567},[68,104764,104765],{"class":70,"line":1510},[68,104766,102813],{"class":1742},[68,104768,104769],{"class":70,"line":1521},[68,104770,104771],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[68,104773,104774],{"class":70,"line":3103},[68,104775,3890],{"emptyLinePlaceholder":1567},[68,104777,104778],{"class":70,"line":3108},[68,104779,104780],{"class":1742},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[68,104782,104783],{"class":70,"line":3114},[68,104784,104785],{"class":1742},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[68,104787,104788],{"class":70,"line":3119},[68,104789,104790],{"class":1742},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,104792,104793],{"class":70,"line":3133},[68,104794,104795],{"class":1742},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[68,104797,104798],{"class":70,"line":3138},[68,104799,102842],{"class":1742},[68,104801,104802],{"class":70,"line":3144},[68,104803,102847],{"class":1742},[68,104805,104806],{"class":70,"line":3165},[68,104807,102852],{"class":1742},[68,104809,104810],{"class":70,"line":3170},[68,104811,97173],{"class":1742},[68,104813,104814],{"class":70,"line":3184},[68,104815,3890],{"emptyLinePlaceholder":1567},[68,104817,104818],{"class":70,"line":3189},[68,104819,3890],{"emptyLinePlaceholder":1567},[68,104821,104822,104824,104826,104828,104830],{"class":70,"line":3218},[68,104823,33431],{"class":316},[68,104825,3463],{"class":74},[68,104827,102873],{"class":78},[68,104829,97161],{"class":85},[68,104831,5229],{"class":78},[68,104833,104834,104836,104838,104840,104842],{"class":70,"line":3223},[68,104835,102882],{"class":78},[68,104837,1685],{"class":316},[68,104839,102887],{"class":78},[68,104841,102789],{"class":85},[68,104843,1646],{"class":78},[68,104845,104846,104848,104850],{"class":70,"line":3240},[68,104847,102896],{"class":78},[68,104849,1685],{"class":316},[68,104851,102901],{"class":78},[68,104853,104854],{"class":70,"line":3245},[68,104855,3890],{"emptyLinePlaceholder":1567},[68,104857,104858,104861,104863,104866,104869],{"class":70,"line":3250},[68,104859,104860],{"class":78},"    box_body_id ",[68,104862,1685],{"class":316},[68,104864,104865],{"class":78}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[68,104867,104868],{"class":1742},"\"red_box\"",[68,104870,1646],{"class":78},[68,104872,104873,104876,104878,104881,104884],{"class":70,"line":3255},[68,104874,104875],{"class":78},"    site_id ",[68,104877,1685],{"class":316},[68,104879,104880],{"class":78}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[68,104882,104883],{"class":1742},"\"box_center\"",[68,104885,1646],{"class":78},[68,104887,104888],{"class":70,"line":3269},[68,104889,3890],{"emptyLinePlaceholder":1567},[68,104891,104892,104894,104897,104899,104901],{"class":70,"line":3274},[68,104893,4591],{"class":316},[68,104895,104896],{"class":78}," box_body_id ",[68,104898,2537],{"class":316},[68,104900,5583],{"class":85},[68,104902,5229],{"class":78},[68,104904,104905,104908,104911,104913,104916],{"class":70,"line":4067},[68,104906,104907],{"class":316},"        raise",[68,104909,104910],{"class":85}," RuntimeError",[68,104912,1640],{"class":78},[68,104914,104915],{"class":1742},"\"body red_box not found\"",[68,104917,1646],{"class":78},[68,104919,104920,104922,104925,104927,104929],{"class":70,"line":4081},[68,104921,4591],{"class":316},[68,104923,104924],{"class":78}," site_id ",[68,104926,2537],{"class":316},[68,104928,5583],{"class":85},[68,104930,5229],{"class":78},[68,104932,104933,104935,104937,104939,104942],{"class":70,"line":4089},[68,104934,104907],{"class":316},[68,104936,104910],{"class":85},[68,104938,1640],{"class":78},[68,104940,104941],{"class":1742},"\"site box_center not found\"",[68,104943,1646],{"class":78},[68,104945,104946],{"class":70,"line":4094},[68,104947,3890],{"emptyLinePlaceholder":1567},[68,104949,104950,104952,104954,104956,104958,104960,104962],{"class":70,"line":4100},[68,104951,4691],{"class":316},[68,104953,102976],{"class":78},[68,104955,27529],{"class":316},[68,104957,33927],{"class":85},[68,104959,1640],{"class":78},[68,104961,3213],{"class":85},[68,104963,32270],{"class":78},[68,104965,104966],{"class":70,"line":4106},[68,104967,102991],{"class":78},[68,104969,104970],{"class":70,"line":4111},[68,104971,3890],{"emptyLinePlaceholder":1567},[68,104973,104974,104976,104978,104981],{"class":70,"line":9437},[68,104975,32783],{"class":85},[68,104977,1640],{"class":78},[68,104979,104980],{"class":1742},"\"simulation time:\"",[68,104982,102953],{"class":78},[68,104984,104985,104987,104989,104992],{"class":70,"line":9461},[68,104986,32783],{"class":85},[68,104988,1640],{"class":78},[68,104990,104991],{"class":1742},"\"box body position:\"",[68,104993,104994],{"class":78},", data.xpos[box_body_id].copy())\n",[68,104996,104997,104999,105001,105004],{"class":70,"line":9466},[68,104998,32783],{"class":85},[68,105000,1640],{"class":78},[68,105002,105003],{"class":1742},"\"site position:\"",[68,105005,105006],{"class":78},", data.site_xpos[site_id].copy())\n",[68,105008,105009,105011,105013,105016],{"class":70,"line":9472},[68,105010,32783],{"class":85},[68,105012,1640],{"class":78},[68,105014,105015],{"class":1742},"\"box qpos:\"",[68,105017,105018],{"class":78},", np.array(data.qpos))\n",[68,105020,105021],{"class":70,"line":9499},[68,105022,3890],{"emptyLinePlaceholder":1567},[68,105024,105025],{"class":70,"line":9504},[68,105026,3890],{"emptyLinePlaceholder":1567},[68,105028,105029,105031,105033,105035,105037],{"class":70,"line":9510},[68,105030,3023],{"class":316},[68,105032,32704],{"class":85},[68,105034,103034],{"class":316},[68,105036,103037],{"class":1742},[68,105038,5229],{"class":78},[68,105040,105041],{"class":70,"line":9522},[68,105042,103044],{"class":78},[170,105044,105045],{},"保存为：",[58,105047,105049],{"className":25307,"code":105048,"language":25309,"meta":63,"style":63},"touch ch2_xml_basic.py\n",[65,105050,105051],{"__ignoreMap":63},[68,105052,105053,105055],{"class":70,"line":71},[68,105054,102758],{"class":74},[68,105056,105057],{"class":1742}," ch2_xml_basic.py\n",[170,105059,103776],{},[58,105061,105063],{"className":25307,"code":105062,"language":25309,"meta":63,"style":63},"python ch2_xml_basic.py\n",[65,105064,105065],{"__ignoreMap":63},[68,105066,105067,105069],{"class":70,"line":71},[68,105068,31864],{"class":74},[68,105070,105057],{"class":1742},[19,105072,103047],{"id":103047},[170,105074,105075],{},"用名字查找 body：",[58,105077,105079],{"className":31862,"code":105078,"language":31864,"meta":63,"style":63},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[65,105080,105081],{"__ignoreMap":63},[68,105082,105083,105086,105088,105090,105092],{"class":70,"line":71},[68,105084,105085],{"class":78},"box_body_id ",[68,105087,1685],{"class":316},[68,105089,104865],{"class":78},[68,105091,104868],{"class":1742},[68,105093,1646],{"class":78},[170,105095,105096],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[170,105098,105099],{},"用名字查找 site：",[58,105101,105103],{"className":31862,"code":105102,"language":31864,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[65,105104,105105],{"__ignoreMap":63},[68,105106,105107,105110,105112,105114,105116],{"class":70,"line":71},[68,105108,105109],{"class":78},"site_id ",[68,105111,1685],{"class":316},[68,105113,104880],{"class":78},[68,105115,104883],{"class":1742},[68,105117,1646],{"class":78},[170,105119,105120,105121,105124,105125,105128],{},"注意第二个参数是对象类型。查 body 就用 ",[65,105122,105123],{},"mjOBJ_BODY","，查 site 就用 ",[65,105126,105127],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[170,105130,105131],{},"读取世界坐标：",[58,105133,105135],{"className":31862,"code":105134,"language":31864,"meta":63,"style":63},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[65,105136,105137,105142],{"__ignoreMap":63},[68,105138,105139],{"class":70,"line":71},[68,105140,105141],{"class":78},"data.xpos[box_body_id]\n",[68,105143,105144],{"class":70,"line":82},[68,105145,105146],{"class":78},"data.site_xpos[site_id]\n",[170,105148,105149,105152,105153,105156],{},[65,105150,105151],{},"xpos"," 是 body 的世界坐标，",[65,105154,105155],{},"site_xpos"," 是 site 的世界坐标。",[19,105158,103183],{"id":103183},[58,105160,105162],{"className":31862,"code":105161,"language":31864,"meta":63,"style":63},"import mujoco\nimport numpy as np\n",[65,105163,105164,105170],{"__ignoreMap":63},[68,105165,105166,105168],{"class":70,"line":71},[68,105167,31876],{"class":316},[68,105169,102776],{"class":78},[68,105171,105172,105174,105176,105178],{"class":70,"line":82},[68,105173,31876],{"class":316},[68,105175,32864],{"class":78},[68,105177,32867],{"class":316},[68,105179,32870],{"class":78},[170,105181,105182,105183,105186,105187,105190,105191,1841,105194,29869],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[65,105184,105185],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[65,105188,105189],{},"as np"," 是习惯写法，后面就可以写 ",[65,105192,105193],{},"np.array(...)",[65,105195,105196],{},"np.round(...)",[58,105198,105199],{"className":31862,"code":103070,"language":31864,"meta":63,"style":63},[65,105200,105201,105209,105213],{"__ignoreMap":63},[68,105202,105203,105205,105207],{"class":70,"line":71},[68,105204,102789],{"class":85},[68,105206,15052],{"class":316},[68,105208,102794],{"class":1742},[68,105210,105211],{"class":70,"line":82},[68,105212,103085],{"class":1742},[68,105214,105215],{"class":70,"line":98},[68,105216,97173],{"class":1742},[170,105218,105219,105220,29869],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[65,105221,105222],{},"mujoco.MjModel.from_xml_string(XML)",[58,105224,105226],{"className":54549,"code":105225,"language":54551,"meta":63,"style":63},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,105227,105228],{"__ignoreMap":63},[68,105229,105230,105232,105234,105236,105238,105240,105242,105244,105247,105249,105251,105254,105256,105258,105261],{"class":70,"line":71},[68,105231,2537],{"class":78},[68,105233,104685],{"class":52784},[68,105235,16408],{"class":74},[68,105237,1685],{"class":78},[68,105239,104883],{"class":1742},[68,105241,102581],{"class":74},[68,105243,1685],{"class":78},[68,105245,105246],{"class":1742},"\"0 0 0\"",[68,105248,102611],{"class":74},[68,105250,1685],{"class":78},[68,105252,105253],{"class":1742},"\"0.03\"",[68,105255,80244],{"class":74},[68,105257,1685],{"class":78},[68,105259,105260],{"class":1742},"\"0 1 0 1\"",[68,105262,102619],{"class":78},[170,105264,105265,105267,105268,105271,105272,105274,105275,105278],{},[65,105266,104685],{}," 是标记点。",[65,105269,105270],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[65,105273,104645],{}," 表示显示出来的小球大小。",[65,105276,105277],{},"rgba=\"0 1 0 1\""," 表示绿色。",[58,105280,105281],{"className":31862,"code":105078,"language":31864,"meta":63,"style":63},[65,105282,105283],{"__ignoreMap":63},[68,105284,105285,105287,105289,105291,105293],{"class":70,"line":71},[68,105286,105085],{"class":78},[68,105288,1685],{"class":316},[68,105290,104865],{"class":78},[68,105292,104868],{"class":1742},[68,105294,1646],{"class":78},[170,105296,105297,105298,105300],{},"这行的作用是：根据名字 ",[65,105299,104868],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[170,105302,105303],{},"拆开看：",[263,105305,105306,105312,105317,105323],{},[27,105307,105308,105311],{},[65,105309,105310],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[27,105313,105314,105316],{},[65,105315,103560],{}," 是被查询的模型。",[27,105318,105319,105322],{},[65,105320,105321],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[27,105324,105325,105327],{},[65,105326,104868],{}," 是 XML 里写的名字。",[58,105329,105330],{"className":31862,"code":105102,"language":31864,"meta":63,"style":63},[65,105331,105332],{"__ignoreMap":63},[68,105333,105334,105336,105338,105340,105342],{"class":70,"line":71},[68,105335,105109],{"class":78},[68,105337,1685],{"class":316},[68,105339,104880],{"class":78},[68,105341,104883],{"class":1742},[68,105343,1646],{"class":78},[170,105345,105346,105347,29869],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[65,105348,104883],{},[58,105350,105352],{"className":31862,"code":105351,"language":31864,"meta":63,"style":63},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[65,105353,105354,105366],{"__ignoreMap":63},[68,105355,105356,105358,105360,105362,105364],{"class":70,"line":71},[68,105357,3023],{"class":316},[68,105359,104896],{"class":78},[68,105361,2537],{"class":316},[68,105363,5583],{"class":85},[68,105365,5229],{"class":78},[68,105367,105368,105371,105373,105375,105377],{"class":70,"line":82},[68,105369,105370],{"class":316},"    raise",[68,105372,104910],{"class":85},[68,105374,1640],{"class":78},[68,105376,104915],{"class":1742},[68,105378,1646],{"class":78},[170,105380,105381,105383,105384,105387,105388,105391,105392,105395],{},[65,105382,3023],{}," 是条件判断。",[65,105385,105386],{},"mj_name2id"," 找不到对象时会返回 ",[65,105389,105390],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[65,105393,105394],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[58,105397,105399],{"className":31862,"code":105398,"language":31864,"meta":63,"style":63},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[65,105400,105401,105417],{"__ignoreMap":63},[68,105402,105403,105405,105407,105409,105411,105413,105415],{"class":70,"line":71},[68,105404,4515],{"class":316},[68,105406,102976],{"class":78},[68,105408,27529],{"class":316},[68,105410,33927],{"class":85},[68,105412,1640],{"class":78},[68,105414,3213],{"class":85},[68,105416,32270],{"class":78},[68,105418,105419],{"class":70,"line":82},[68,105420,103174],{"class":78},[170,105422,105423],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[58,105425,105427],{"className":31862,"code":105426,"language":31864,"meta":63,"style":63},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[65,105428,105429],{"__ignoreMap":63},[68,105430,105431,105433,105435,105437],{"class":70,"line":71},[68,105432,31899],{"class":85},[68,105434,1640],{"class":78},[68,105436,104991],{"class":1742},[68,105438,104994],{"class":78},[170,105440,105441,105443,105444,105447],{},[65,105442,102554],{}," 保存所有 body 的世界坐标。",[65,105445,105446],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[58,105449,105451],{"className":31862,"code":105450,"language":31864,"meta":63,"style":63},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[65,105452,105453],{"__ignoreMap":63},[68,105454,105455,105457,105459,105461],{"class":70,"line":71},[68,105456,31899],{"class":85},[68,105458,1640],{"class":78},[68,105460,105003],{"class":1742},[68,105462,105006],{"class":78},[170,105464,105465,105468,105469,105471],{},[65,105466,105467],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[65,105470,104452],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[58,105473,105475],{"className":31862,"code":105474,"language":31864,"meta":63,"style":63},"print(\"box qpos:\", np.array(data.qpos))\n",[65,105476,105477],{"__ignoreMap":63},[68,105478,105479,105481,105483,105485],{"class":70,"line":71},[68,105480,31899],{"class":85},[68,105482,1640],{"class":78},[68,105484,105015],{"class":1742},[68,105486,105018],{"class":78},[170,105488,105489,105490,105493],{},"这里打印广义位置数组。",[65,105491,105492],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105495,103791],{"id":103790},[170,105497,105498,105499,105502,105503,29869],{},"程序会输出 ",[65,105500,105501],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[65,105504,105505],{},"qpos",[170,105507,105508,105510,105511,105514,105515,105518],{},[65,105509,105446],{}," 是 body 的世界坐标位置。",[65,105512,105513],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[65,105516,105517],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[170,105520,83699,105521,84007,105523,105525],{},[65,105522,104452],{},[65,105524,105270],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[170,105527,105528],{},"如果你把 site 改成：",[58,105530,105532],{"className":54549,"code":105531,"language":54551,"meta":63,"style":63},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,105533,105534],{"__ignoreMap":63},[68,105535,105536,105538,105540,105542,105544,105547,105549,105551,105554,105556,105558,105560,105562,105564,105566],{"class":70,"line":71},[68,105537,2537],{"class":78},[68,105539,104685],{"class":52784},[68,105541,16408],{"class":74},[68,105543,1685],{"class":78},[68,105545,105546],{"class":1742},"\"box_top\"",[68,105548,102581],{"class":74},[68,105550,1685],{"class":78},[68,105552,105553],{"class":1742},"\"0 0 0.15\"",[68,105555,102611],{"class":74},[68,105557,1685],{"class":78},[68,105559,105253],{"class":1742},[68,105561,80244],{"class":74},[68,105563,1685],{"class":78},[68,105565,105260],{"class":1742},[68,105567,102619],{"class":78},[170,105569,105570,105571,105574],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[65,105572,105573],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105576,103823],{"id":103822},[263,105578,105579,105588,105591,105598,105604,105615],{},[27,105580,103886,105581,105583,105584,103889,105586,29869],{},[65,105582,104456],{}," 的初始高度从 ",[65,105585,1846],{},[65,105587,1715],{},[27,105589,105590],{},"重新运行程序。",[27,105592,105593,105594,105597],{},"观察 ",[65,105595,105596],{},"box qpos"," 和最终位置是否变化。",[27,105599,105600,105601,105603],{},"故意把 ",[65,105602,104685],{}," 名称改错，确认程序能报错。",[27,105605,103886,105606,105608,105609,103889,105611,105614],{},[65,105607,102595],{}," 的颜色 ",[65,105610,103507],{},[65,105612,105613],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[27,105616,103886,105617,84007,105619,103889,105622,105625,105626,105628],{},[65,105618,104452],{},[65,105620,105621],{},"pos",[65,105623,105624],{},"0 0 0.2","，观察 ",[65,105627,105573],{}," 如何变化。",[14,105630,103928],{"id":103927},[19,105632,105634],{"id":105633},"xml-error-schema-violation",[65,105635,105636],{},"XML Error: Schema violation",[170,105638,105639],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,105641,105643,82767,105645],{"id":105642},"mj_name2id-返回-1",[65,105644,105386],{},[65,105646,105390],{},[170,105648,105649,105650,105653],{},"说明名字没有找到。检查 XML 中 ",[65,105651,105652],{},"name=\"...\"","，并确认对象类型正确。",[19,105655,105656],{"id":105656},"物体不下落",[170,105658,103998],{},[263,105660,105661,105666,105671],{},[27,105662,105663,105664],{},"body 是否有 ",[65,105665,103095],{},[27,105667,105668,105669],{},"gravity 是否为 ",[65,105670,104064],{},[27,105672,105673,105674,105676],{},"body 是否被固定在 ",[65,105675,103316],{}," 中",[19,105678,105679],{"id":105679},"坐标看起来不符合预期",[170,105681,105682],{},"先区分两种坐标：",[128,105684,105685,105694],{},[131,105686,105687],{},[134,105688,105689,105692],{},[137,105690,105691],{"align":92},"坐标",[137,105693,102175],{"align":92},[144,105695,105696,105706],{},[134,105697,105698,105703],{},[149,105699,105700,105701],{"align":92},"XML 里的 ",[65,105702,105621],{},[149,105704,105705],{"align":92},"相对父 body 的局部坐标",[134,105707,105708,105714],{},[149,105709,105710,26464,105712],{"align":92},[65,105711,102554],{},[65,105713,105467],{},[149,105715,105716],{"align":92},"仿真更新后的世界坐标",[170,105718,105719,105720,105722,105723,1245,105726,105728],{},"如果你修改了 ",[65,105721,102545],{},"，但还没调用 ",[65,105724,105725],{},"mj_forward",[65,105727,102690],{},"，世界坐标可能还没有更新。",[14,105730,104082],{"id":104081},[170,105732,105733],{},"MJCF 建模先掌握四件事：",[263,105735,105736,105741,105746,105751],{},[27,105737,105738,105740],{},[65,105739,53282],{}," 表示刚体层级。",[27,105742,105743,105745],{},[65,105744,102595],{}," 表示形状、碰撞和质量。",[27,105747,105748,105750],{},[65,105749,104431],{}," 决定 body 能不能动、怎么动。",[27,105752,105753,105755],{},[65,105754,104685],{}," 用来标记关键点，方便 Python 读取位置。",[170,105757,105758],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1553,105760,105761],{},"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":63,"searchDepth":82,"depth":82,"links":105763},[105764,105765,105766,105772,105776,105777,105778,105785],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":105767},[105768,105769,105770,105771],{"id":104435,"depth":98,"text":104435},{"id":104549,"depth":98,"text":104549},{"id":104575,"depth":98,"text":104576},{"id":104679,"depth":98,"text":104680},{"id":102727,"depth":82,"text":102728,"children":105773},[105774,105775],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":105779},[105780,105781,105783,105784],{"id":105633,"depth":98,"text":105636},{"id":105642,"depth":98,"text":105782},"mj_name2id 返回 -1",{"id":105656,"depth":98,"text":105656},{"id":105679,"depth":98,"text":105679},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104129,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105792,"title":105793,"body":105794,"description":63,"extension":1565,"meta":107288,"navigation":1567,"path":107289,"seo":107290,"stem":107291,"__hash__":107292},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105795,"toc":107260},[105796,105799,105801,105804,105807,105845,105848,105854,105857,105859,105861,105888,105890,105904,105906,105947,105949,105973,105975,105978,105987,105996,105999,106008,106016,106025,106028,106038,106041,106093,106100,106106,106114,106161,106164,106183,106186,106194,106198,106207,106240,106242,106590,106592,106604,106606,106617,106619,106622,106643,106649,106652,106677,106687,106690,106698,106701,106704,106725,106736,106738,106758,106761,106782,106791,106810,106816,106841,106844,106858,106865,106889,106892,106900,106909,106925,106937,106945,106954,106956,106959,106983,106988,106991,107013,107015,107054,107056,107063,107065,107073,107076,107079,107091,107132,107139,107150,107157,107160,107209,107212,107215,107221,107223,107228,107254,107257],[10,105797,105793],{"id":105798},"_3python-控制接口读取状态与推进仿真",[14,105800,102122],{"id":102121},[170,105802,105803],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[170,105805,105806],{},"你将学习:",[263,105808,105809,105814,105819,105823,105828,105839],{},[27,105810,105811],{},[65,105812,105813],{},"MjModel.from_xml_string",[27,105815,105816],{},[65,105817,105818],{},"MjData(model)",[27,105820,105821],{},[65,105822,102690],{},[27,105824,105825],{},[65,105826,105827],{},"mj_resetData",[27,105829,105830,105831,1841,105833,1841,105836],{},"读取 ",[65,105832,105505],{},[65,105834,105835],{},"qvel",[65,105837,105838],{},"ctrl",[27,105840,105841,105842],{},"使用 ",[65,105843,105844],{},"model.opt.timestep",[170,105846,105847],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[58,105849,105852],{"className":105850,"code":105851,"language":6676,"meta":63},[6674],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[65,105853,105851],{"__ignoreMap":63},[170,105855,105856],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105858,102245],{"id":102244},[170,105860,102248],{},[58,105862,105864],{"className":25307,"code":105863,"language":25309,"meta":63,"style":63},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[65,105865,105866],{"__ignoreMap":63},[68,105867,105868,105870,105872,105874,105876,105879,105881,105883,105885],{"class":70,"line":71},[68,105869,26062],{"class":74},[68,105871,27801],{"class":1742},[68,105873,25319],{"class":1742},[68,105875,27886],{"class":85},[68,105877,105878],{"class":1742}," python3",[68,105880,102273],{"class":1742},[68,105882,103976],{"class":1742},[68,105884,102289],{"class":1742},[68,105886,105887],{"class":1742}," glfw\n",[170,105889,104294],{},[58,105891,105892],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},[65,105893,105894],{"__ignoreMap":63},[68,105895,105896,105898,105900,105902],{"class":70,"line":71},[68,105897,25316],{"class":74},[68,105899,25319],{"class":1742},[68,105901,102405],{"class":1742},[68,105903,102408],{"class":1742},[170,105905,104311],{},[58,105907,105909],{"className":25307,"code":105908,"language":25309,"meta":63,"style":63},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[65,105910,105911,105928,105937],{"__ignoreMap":63},[68,105912,105913,105915,105917,105919,105922,105924,105926],{"class":70,"line":71},[68,105914,31814],{"class":74},[68,105916,30660],{"class":1742},[68,105918,26601],{"class":85},[68,105920,105921],{"class":1742}," mujoco-python-api",[68,105923,102450],{"class":1742},[68,105925,102453],{"class":85},[68,105927,102456],{"class":85},[68,105929,105930,105932,105934],{"class":70,"line":82},[68,105931,31814],{"class":74},[68,105933,102463],{"class":1742},[68,105935,105936],{"class":1742}," mujoco-python-api\n",[68,105938,105939,105941,105943,105945],{"class":70,"line":98},[68,105940,25316],{"class":74},[68,105942,25319],{"class":1742},[68,105944,102405],{"class":1742},[68,105946,102408],{"class":1742},[170,105948,102479],{},[263,105950,105951,105958,105967],{},[27,105952,105953,102493,105955,105957],{},[65,105954,102150],{},[65,105956,102155],{}," 是官方 Python bindings 的类名。",[27,105959,105960,105961,105964,105965,29869],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[65,105962,105963],{},"mjModel"," 在 Python 中是 ",[65,105966,102184],{},[27,105968,105969,105970,29869],{},"不要使用 ",[65,105971,105972],{},"sim = mujoco_py.MjSim(...)",[14,105974,102520],{"id":102519},[170,105976,105977],{},"仿真推进核心代码:",[58,105979,105981],{"className":31862,"code":105980,"language":31864,"meta":63,"style":63},"mujoco.mj_step(model, data)\n",[65,105982,105983],{"__ignoreMap":63},[68,105984,105985],{"class":70,"line":71},[68,105986,105980],{"class":78},[170,105988,105989,105990,1841,105992,1841,105994,29869],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[65,105991,102545],{},[65,105993,102548],{},[65,105995,102542],{},[170,105997,105998],{},"重置仿真:",[58,106000,106002],{"className":31862,"code":106001,"language":31864,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\n",[65,106003,106004],{"__ignoreMap":63},[68,106005,106006],{"class":70,"line":71},[68,106007,106001],{"class":78},[170,106009,106010,106011,1245,106013,106015],{},"如果手动修改了 ",[65,106012,102545],{},[65,106014,102548],{},"，通常应调用:",[58,106017,106019],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},"mujoco.mj_forward(model, data)\n",[65,106020,106021],{"__ignoreMap":63},[68,106022,106023],{"class":70,"line":71},[68,106024,106018],{"class":78},[170,106026,106027],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,106029,106031,1841,106033,1841,106035,106037],{"id":106030},"qposqvelctrl-是什么",[65,106032,105505],{},[65,106034,105835],{},[65,106036,105838],{}," 是什么",[170,106039,106040],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[128,106042,106043,106055],{},[131,106044,106045],{},[134,106046,106047,106050,106052],{},[137,106048,106049],{"align":92},"字段",[137,106051,102175],{"align":92},[137,106053,106054],{"align":92},"谁来修改",[144,106056,106057,106069,106081],{},[134,106058,106059,106063,106066],{},[149,106060,106061],{"align":92},[65,106062,102545],{},[149,106064,106065],{"align":92},"广义位置，例如小车位置、关节角、自由物体位置姿态",[149,106067,106068],{"align":92},"MuJoCo 更新，也可以手动设置初始状态",[134,106070,106071,106075,106078],{},[149,106072,106073],{"align":92},[65,106074,102548],{},[149,106076,106077],{"align":92},"广义速度，例如小车速度、关节角速度",[149,106079,106080],{"align":92},"MuJoCo 更新，也可以手动清零",[134,106082,106083,106087,106090],{},[149,106084,106085],{"align":92},[65,106086,102551],{},[149,106088,106089],{"align":92},"actuator 的控制输入",[149,106091,106092],{"align":92},"主要由你的控制代码写入",[170,106094,1106,106095,102493,106097,106099],{},[65,106096,105505],{},[65,106098,105835],{}," 不一定同维。自由刚体就是典型例子：",[58,106101,106104],{"className":106102,"code":106103,"language":6676,"meta":63},[6674],"freejoint: qpos 7 维，qvel 6 维\n",[65,106105,106103],{"__ignoreMap":63},[19,106107,106109,102493,106111,106113],{"id":106108},"mj_step-和-mj_forward-的区别",[65,106110,102690],{},[65,106112,105725],{}," 的区别",[128,106115,106116,106129],{},[131,106117,106118],{},[134,106119,106120,106123,106126],{},[137,106121,106122],{"align":92},"函数",[137,106124,106125],{"align":92},"是否推进时间",[137,106127,106128],{"align":92},"什么时候用",[144,106130,106131,106144],{},[134,106132,106133,106138,106141],{},[149,106134,106135],{"align":92},[65,106136,106137],{},"mj_step(model, data)",[149,106139,106140],{"align":92},"是",[149,106142,106143],{"align":92},"正常仿真循环，每调用一次前进一步",[134,106145,106146,106151,106153],{},[149,106147,106148],{"align":92},[65,106149,106150],{},"mj_forward(model, data)",[149,106152,976],{"align":92},[149,106154,106155,106156,1841,106158,106160],{"align":92},"手动改了 ",[65,106157,105505],{},[65,106159,105835],{}," 后，刷新派生量",[170,106162,106163],{},"例如你写：",[58,106165,106167],{"className":31862,"code":106166,"language":31864,"meta":63,"style":63},"data.qpos[2] = 2.0\n",[65,106168,106169],{"__ignoreMap":63},[68,106170,106171,106174,106176,106178,106180],{"class":70,"line":71},[68,106172,106173],{"class":78},"data.qpos[",[68,106175,1715],{"class":85},[68,106177,5933],{"class":78},[68,106179,1685],{"class":316},[68,106181,106182],{"class":85}," 2.0\n",[170,106184,106185],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[58,106187,106188],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},[65,106189,106190],{"__ignoreMap":63},[68,106191,106192],{"class":70,"line":71},[68,106193,106018],{"class":78},[19,106195,106197],{"id":106196},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[170,106199,106200,106203,106204,106206],{},[65,106201,106202],{},"mujoco.mj_resetData(model, data)"," 会把 ",[65,106205,34885],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[58,106208,106210],{"className":31862,"code":106209,"language":31864,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[65,106211,106212,106216,106226,106236],{"__ignoreMap":63},[68,106213,106214],{"class":70,"line":71},[68,106215,106001],{"class":78},[68,106217,106218,106221,106223],{"class":70,"line":82},[68,106219,106220],{"class":78},"data.qpos[:] ",[68,106222,1685],{"class":316},[68,106224,106225],{"class":78}," random_qpos\n",[68,106227,106228,106231,106233],{"class":70,"line":98},[68,106229,106230],{"class":78},"data.qvel[:] ",[68,106232,1685],{"class":316},[68,106234,106235],{"class":85}," 0.0\n",[68,106237,106238],{"class":70,"line":104},[68,106239,106018],{"class":78},[14,106241,102728],{"id":102727},[58,106243,106245],{"className":31862,"code":106244,"language":31864,"meta":63,"style":63},"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",[65,106246,106247,106253,106263,106267,106271,106279,106284,106288,106292,106296,106301,106305,106310,106315,106320,106324,106328,106332,106336,106340,106344,106363,106370,106382,106393,106409,106425,106429,106433,106445,106457,106465,106469,106480,106484,106500,106504,106508,106517,106521,106526,106535,106539,106552,106557,106566,106570,106574,106586],{"__ignoreMap":63},[68,106248,106249,106251],{"class":70,"line":71},[68,106250,31876],{"class":316},[68,106252,102776],{"class":78},[68,106254,106255,106257,106259,106261],{"class":70,"line":82},[68,106256,31876],{"class":316},[68,106258,32864],{"class":78},[68,106260,32867],{"class":316},[68,106262,32870],{"class":78},[68,106264,106265],{"class":70,"line":98},[68,106266,3890],{"emptyLinePlaceholder":1567},[68,106268,106269],{"class":70,"line":104},[68,106270,3890],{"emptyLinePlaceholder":1567},[68,106272,106273,106275,106277],{"class":70,"line":112},[68,106274,102789],{"class":85},[68,106276,15052],{"class":316},[68,106278,102794],{"class":1742},[68,106280,106281],{"class":70,"line":124},[68,106282,106283],{"class":1742},"\u003Cmujoco model=\"state_api\">\n",[68,106285,106286],{"class":70,"line":1496},[68,106287,102804],{"class":1742},[68,106289,106290],{"class":70,"line":1502},[68,106291,3890],{"emptyLinePlaceholder":1567},[68,106293,106294],{"class":70,"line":1510},[68,106295,102813],{"class":1742},[68,106297,106298],{"class":70,"line":1521},[68,106299,106300],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[68,106302,106303],{"class":70,"line":3103},[68,106304,3890],{"emptyLinePlaceholder":1567},[68,106306,106307],{"class":70,"line":3108},[68,106308,106309],{"class":1742},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[68,106311,106312],{"class":70,"line":3114},[68,106313,106314],{"class":1742},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[68,106316,106317],{"class":70,"line":3119},[68,106318,106319],{"class":1742},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[68,106321,106322],{"class":70,"line":3133},[68,106323,102842],{"class":1742},[68,106325,106326],{"class":70,"line":3138},[68,106327,102847],{"class":1742},[68,106329,106330],{"class":70,"line":3144},[68,106331,102852],{"class":1742},[68,106333,106334],{"class":70,"line":3165},[68,106335,97173],{"class":1742},[68,106337,106338],{"class":70,"line":3170},[68,106339,3890],{"emptyLinePlaceholder":1567},[68,106341,106342],{"class":70,"line":3184},[68,106343,3890],{"emptyLinePlaceholder":1567},[68,106345,106346,106348,106351,106354,106356,106359,106361],{"class":70,"line":3189},[68,106347,33431],{"class":316},[68,106349,106350],{"class":74}," print_state",[68,106352,106353],{"class":78},"(prefix: ",[68,106355,2795],{"class":85},[68,106357,106358],{"class":78},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,106360,97161],{"class":85},[68,106362,5229],{"class":78},[68,106364,106365,106367],{"class":70,"line":3218},[68,106366,32783],{"class":85},[68,106368,106369],{"class":78},"(prefix)\n",[68,106371,106372,106374,106376,106379],{"class":70,"line":3223},[68,106373,32783],{"class":85},[68,106375,1640],{"class":78},[68,106377,106378],{"class":1742},"\"  timestep:\"",[68,106380,106381],{"class":78},", model.opt.timestep)\n",[68,106383,106384,106386,106388,106391],{"class":70,"line":3240},[68,106385,32783],{"class":85},[68,106387,1640],{"class":78},[68,106389,106390],{"class":1742},"\"  time:\"",[68,106392,102953],{"class":78},[68,106394,106395,106397,106399,106402,106405,106407],{"class":70,"line":3245},[68,106396,32783],{"class":85},[68,106398,1640],{"class":78},[68,106400,106401],{"class":1742},"\"  qpos:\"",[68,106403,106404],{"class":78},", np.round(data.qpos.copy(), ",[68,106406,1922],{"class":85},[68,106408,31981],{"class":78},[68,106410,106411,106413,106415,106418,106421,106423],{"class":70,"line":3250},[68,106412,32783],{"class":85},[68,106414,1640],{"class":78},[68,106416,106417],{"class":1742},"\"  qvel:\"",[68,106419,106420],{"class":78},", np.round(data.qvel.copy(), ",[68,106422,1922],{"class":85},[68,106424,31981],{"class":78},[68,106426,106427],{"class":70,"line":3255},[68,106428,3890],{"emptyLinePlaceholder":1567},[68,106430,106431],{"class":70,"line":3269},[68,106432,3890],{"emptyLinePlaceholder":1567},[68,106434,106435,106437,106439,106441,106443],{"class":70,"line":3274},[68,106436,33431],{"class":316},[68,106438,3463],{"class":74},[68,106440,102873],{"class":78},[68,106442,97161],{"class":85},[68,106444,5229],{"class":78},[68,106446,106447,106449,106451,106453,106455],{"class":70,"line":4067},[68,106448,102882],{"class":78},[68,106450,1685],{"class":316},[68,106452,102887],{"class":78},[68,106454,102789],{"class":85},[68,106456,1646],{"class":78},[68,106458,106459,106461,106463],{"class":70,"line":4081},[68,106460,102896],{"class":78},[68,106462,1685],{"class":316},[68,106464,102901],{"class":78},[68,106466,106467],{"class":70,"line":4089},[68,106468,3890],{"emptyLinePlaceholder":1567},[68,106470,106471,106474,106477],{"class":70,"line":4094},[68,106472,106473],{"class":78},"    print_state(",[68,106475,106476],{"class":1742},"\"initial\"",[68,106478,106479],{"class":78},", model, data)\n",[68,106481,106482],{"class":70,"line":4100},[68,106483,3890],{"emptyLinePlaceholder":1567},[68,106485,106486,106488,106490,106492,106494,106496,106498],{"class":70,"line":4106},[68,106487,4691],{"class":316},[68,106489,102976],{"class":78},[68,106491,27529],{"class":316},[68,106493,33927],{"class":85},[68,106495,1640],{"class":78},[68,106497,2284],{"class":85},[68,106499,32270],{"class":78},[68,106501,106502],{"class":70,"line":4111},[68,106503,102991],{"class":78},[68,106505,106506],{"class":70,"line":9437},[68,106507,3890],{"emptyLinePlaceholder":1567},[68,106509,106510,106512,106515],{"class":70,"line":9461},[68,106511,106473],{"class":78},[68,106513,106514],{"class":1742},"\"after 50 steps\"",[68,106516,106479],{"class":78},[68,106518,106519],{"class":70,"line":9466},[68,106520,3890],{"emptyLinePlaceholder":1567},[68,106522,106523],{"class":70,"line":9472},[68,106524,106525],{"class":78},"    mujoco.mj_resetData(model, data)\n",[68,106527,106528,106530,106533],{"class":70,"line":9499},[68,106529,106473],{"class":78},[68,106531,106532],{"class":1742},"\"after reset\"",[68,106534,106479],{"class":78},[68,106536,106537],{"class":70,"line":9504},[68,106538,3890],{"emptyLinePlaceholder":1567},[68,106540,106541,106544,106546,106548,106550],{"class":70,"line":9510},[68,106542,106543],{"class":78},"    data.qpos[",[68,106545,1715],{"class":85},[68,106547,5933],{"class":78},[68,106549,1685],{"class":316},[68,106551,106182],{"class":85},[68,106553,106554],{"class":70,"line":9522},[68,106555,106556],{"class":78},"    mujoco.mj_forward(model, data)\n",[68,106558,106559,106561,106564],{"class":70,"line":9534},[68,106560,106473],{"class":78},[68,106562,106563],{"class":1742},"\"after manual qpos edit\"",[68,106565,106479],{"class":78},[68,106567,106568],{"class":70,"line":9546},[68,106569,3890],{"emptyLinePlaceholder":1567},[68,106571,106572],{"class":70,"line":11204},[68,106573,3890],{"emptyLinePlaceholder":1567},[68,106575,106576,106578,106580,106582,106584],{"class":70,"line":11229},[68,106577,3023],{"class":316},[68,106579,32704],{"class":85},[68,106581,103034],{"class":316},[68,106583,103037],{"class":1742},[68,106585,5229],{"class":78},[68,106587,106588],{"class":70,"line":11252},[68,106589,103044],{"class":78},[170,106591,105045],{},[58,106593,106595],{"className":25307,"code":106594,"language":25309,"meta":63,"style":63},"touch ch3_python_state.py\n",[65,106596,106597],{"__ignoreMap":63},[68,106598,106599,106601],{"class":70,"line":71},[68,106600,102758],{"class":74},[68,106602,106603],{"class":1742}," ch3_python_state.py\n",[170,106605,103776],{},[58,106607,106609],{"className":25307,"code":106608,"language":25309,"meta":63,"style":63},"python ch3_python_state.py\n",[65,106610,106611],{"__ignoreMap":63},[68,106612,106613,106615],{"class":70,"line":71},[68,106614,31864],{"class":74},[68,106616,106603],{"class":1742},[19,106618,103047],{"id":103047},[170,106620,106621],{},"打印状态的函数：",[58,106623,106625],{"className":31862,"code":106624,"language":31864,"meta":63,"style":63},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[65,106626,106627],{"__ignoreMap":63},[68,106628,106629,106631,106633,106635,106637,106639,106641],{"class":70,"line":71},[68,106630,33431],{"class":316},[68,106632,106350],{"class":74},[68,106634,106353],{"class":78},[68,106636,2795],{"class":85},[68,106638,106358],{"class":78},[68,106640,97161],{"class":85},[68,106642,5229],{"class":78},[170,106644,106645,106646,106648],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[65,106647,34885],{}," 里发生了什么。",[170,106650,106651],{},"推进 50 步：",[58,106653,106655],{"className":31862,"code":106654,"language":31864,"meta":63,"style":63},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[65,106656,106657,106673],{"__ignoreMap":63},[68,106658,106659,106661,106663,106665,106667,106669,106671],{"class":70,"line":71},[68,106660,4515],{"class":316},[68,106662,102976],{"class":78},[68,106664,27529],{"class":316},[68,106666,33927],{"class":85},[68,106668,1640],{"class":78},[68,106670,2284],{"class":85},[68,106672,32270],{"class":78},[68,106674,106675],{"class":70,"line":82},[68,106676,103174],{"class":78},[170,106678,106679,106680,106683,106684,106686],{},"由于 ",[65,106681,106682],{},"timestep=0.01","，所以 50 步后时间约为 ",[65,106685,36813],{}," 秒。",[170,106688,106689],{},"重置：",[58,106691,106692],{"className":31862,"code":106001,"language":31864,"meta":63,"style":63},[65,106693,106694],{"__ignoreMap":63},[68,106695,106696],{"class":70,"line":71},[68,106697,106001],{"class":78},[170,106699,106700],{},"这会把时间、位置、速度恢复到初始状态。",[170,106702,106703],{},"手动改高度：",[58,106705,106707],{"className":31862,"code":106706,"language":31864,"meta":63,"style":63},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[65,106708,106709,106721],{"__ignoreMap":63},[68,106710,106711,106713,106715,106717,106719],{"class":70,"line":71},[68,106712,106173],{"class":78},[68,106714,1715],{"class":85},[68,106716,5933],{"class":78},[68,106718,1685],{"class":316},[68,106720,106182],{"class":85},[68,106722,106723],{"class":70,"line":82},[68,106724,106018],{"class":78},[170,106726,106727,106728,106731,106732,106735],{},"这个例子里 ",[65,106729,106730],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[65,106733,106734],{},"2.0"," 表示把小球放到更高的位置。",[19,106737,103183],{"id":103183},[58,106739,106740],{"className":31862,"code":106624,"language":31864,"meta":63,"style":63},[65,106741,106742],{"__ignoreMap":63},[68,106743,106744,106746,106748,106750,106752,106754,106756],{"class":70,"line":71},[68,106745,33431],{"class":316},[68,106747,106350],{"class":74},[68,106749,106353],{"class":78},[68,106751,2795],{"class":85},[68,106753,106358],{"class":78},[68,106755,97161],{"class":85},[68,106757,5229],{"class":78},[170,106759,106760],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[263,106762,106763,106772,106777],{},[27,106764,106765,106768,106769,106771],{},[65,106766,106767],{},"prefix","：一段文字，比如 ",[65,106770,106476],{},"，用来说明现在打印的是哪个阶段。",[27,106773,106774,106776],{},[65,106775,103560],{},"：MuJoCo 模型。",[27,106778,106779,106781],{},[65,106780,34885],{},"：MuJoCo 当前状态。",[170,106783,106784,1841,106787,106790],{},[65,106785,106786],{},"prefix: str",[65,106788,106789],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[58,106792,106794],{"className":31862,"code":106793,"language":31864,"meta":63,"style":63},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[65,106795,106796],{"__ignoreMap":63},[68,106797,106798,106800,106802,106804,106806,106808],{"class":70,"line":71},[68,106799,31899],{"class":85},[68,106801,1640],{"class":78},[68,106803,106401],{"class":1742},[68,106805,106404],{"class":78},[68,106807,1922],{"class":85},[68,106809,31981],{"class":78},[170,106811,106812,106815],{},[65,106813,106814],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[58,106817,106819],{"className":31862,"code":106818,"language":31864,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[65,106820,106821,106833],{"__ignoreMap":63},[68,106822,106823,106825,106827,106829,106831],{"class":70,"line":71},[68,106824,103109],{"class":78},[68,106826,1685],{"class":316},[68,106828,102887],{"class":78},[68,106830,102789],{"class":85},[68,106832,1646],{"class":78},[68,106834,106835,106837,106839],{"class":70,"line":82},[68,106836,103133],{"class":78},[68,106838,1685],{"class":316},[68,106840,102901],{"class":78},[170,106842,106843],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[58,106845,106847],{"className":31862,"code":106846,"language":31864,"meta":63,"style":63},"print_state(\"initial\", model, data)\n",[65,106848,106849],{"__ignoreMap":63},[68,106850,106851,106854,106856],{"class":70,"line":71},[68,106852,106853],{"class":78},"print_state(",[68,106855,106476],{"class":1742},[68,106857,106479],{"class":78},[170,106859,106860,106861,106864],{},"调用刚才定义的 ",[65,106862,106863],{},"print_state"," 函数，打印初始状态。",[58,106866,106867],{"className":31862,"code":106654,"language":31864,"meta":63,"style":63},[65,106868,106869,106885],{"__ignoreMap":63},[68,106870,106871,106873,106875,106877,106879,106881,106883],{"class":70,"line":71},[68,106872,4515],{"class":316},[68,106874,102976],{"class":78},[68,106876,27529],{"class":316},[68,106878,33927],{"class":85},[68,106880,1640],{"class":78},[68,106882,2284],{"class":85},[68,106884,32270],{"class":78},[68,106886,106887],{"class":70,"line":82},[68,106888,103174],{"class":78},[170,106890,106891],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[58,106893,106894],{"className":31862,"code":106001,"language":31864,"meta":63,"style":63},[65,106895,106896],{"__ignoreMap":63},[68,106897,106898],{"class":70,"line":71},[68,106899,106001],{"class":78},[170,106901,106902,106903,106905,106906,106908],{},"重置 ",[65,106904,34885],{},"。注意它不会重新创建 ",[65,106907,103560],{},"，因为模型结构没有变，只是状态回到初始值。",[58,106910,106911],{"className":31862,"code":106166,"language":31864,"meta":63,"style":63},[65,106912,106913],{"__ignoreMap":63},[68,106914,106915,106917,106919,106921,106923],{"class":70,"line":71},[68,106916,106173],{"class":78},[68,106918,1715],{"class":85},[68,106920,5933],{"class":78},[68,106922,1685],{"class":316},[68,106924,106182],{"class":85},[170,106926,106927,106928,1841,106931,1841,106934,106936],{},"这行是“手动改状态”。在 freejoint 中，",[65,106929,106930],{},"qpos[0]",[65,106932,106933],{},"qpos[1]",[65,106935,106730],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[58,106938,106939],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},[65,106940,106941],{"__ignoreMap":63},[68,106942,106943],{"class":70,"line":71},[68,106944,106018],{"class":78},[170,106946,106947,106948,106950,106951,106953],{},"手动改完 ",[65,106949,105505],{}," 后，调用 ",[65,106952,105725],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106955,103791],{"id":103790},[170,106957,106958],{},"你会看到:",[263,106960,106961,106966,106971,106974],{},[27,106962,106963,106964],{},"初始时间为 ",[65,106965,1248],{},[27,106967,106968,106969],{},"50 步后时间约为 ",[65,106970,36813],{},[27,106972,106973],{},"reset 后状态恢复",[27,106975,106976,106977,106980,106981],{},"手动修改 ",[65,106978,106979],{},"data.qpos[2]"," 后，小球高度变为 ",[65,106982,106734],{},[170,106984,106985,106987],{},[65,106986,106730],{}," 在这个例子中表示自由刚体的 z 坐标。",[170,106989,106990],{},"输出里可以重点看三件事：",[263,106992,106993,107001,107006],{},[27,106994,106995,106997,106998,107000],{},[65,106996,3877],{}," 是否随着 ",[65,106999,102690],{}," 增加。",[27,107002,107003,107005],{},[65,107004,105505],{}," 的 z 坐标是否因为下落而变化。",[27,107007,107008,107010,107011,29869],{},[65,107009,105827],{}," 后时间是否回到 ",[65,107012,1248],{},[14,107014,103823],{"id":103822},[263,107016,107017,107023,107029,107035,107038,107047],{},[27,107018,107019,107020,29869],{},"修改 timestep 为 ",[65,107021,107022],{},"0.005",[27,107024,107025,107026,29869],{},"重新运行，检查 50 步后时间是否约为 ",[65,107027,107028],{},"0.25",[27,107030,107031,107032,29869],{},"修改重力为 ",[65,107033,107034],{},"0 0 -1.0",[27,107036,107037],{},"观察小球下降速度是否变慢。",[27,107039,103886,107040,103889,107043,107046],{},[65,107041,107042],{},"data.qpos[2] = 2.0",[65,107044,107045],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[27,107048,107049,107050,107053],{},"注释掉 ",[65,107051,107052],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107055,103928],{"id":103927},[19,107057,107059,107060,107062],{"id":107058},"修改-dataqpos-后位置没有更新","修改 ",[65,107061,102545],{}," 后位置没有更新",[170,107064,103937],{},[58,107066,107067],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},[65,107068,107069],{"__ignoreMap":63},[68,107070,107071],{"class":70,"line":71},[68,107072,106018],{"class":78},[19,107074,107075],{"id":107075},"数组维度看不懂",[170,107077,107078],{},"打印模型维度:",[58,107080,107082],{"className":31862,"code":107081,"language":31864,"meta":63,"style":63},"print(model.nq, model.nv, model.nu)\n",[65,107083,107084],{"__ignoreMap":63},[68,107085,107086,107088],{"class":70,"line":71},[68,107087,31899],{"class":85},[68,107089,107090],{"class":78},"(model.nq, model.nv, model.nu)\n",[128,107092,107093,107101],{},[131,107094,107095],{},[134,107096,107097,107099],{},[137,107098,106049],{"align":92},[137,107100,102175],{"align":92},[144,107102,107103,107113,107123],{},[134,107104,107105,107110],{},[149,107106,107107],{"align":92},[65,107108,107109],{},"nq",[149,107111,107112],{"align":92},"位置变量数量",[134,107114,107115,107120],{},[149,107116,107117],{"align":92},[65,107118,107119],{},"nv",[149,107121,107122],{"align":92},"速度变量数量",[134,107124,107125,107129],{},[149,107126,107127],{"align":92},[65,107128,103637],{},[149,107130,107131],{"align":92},"控制输入数量",[19,107133,107135,107136,107138],{"id":107134},"误以为-qpos-一定等于关节数","误以为 ",[65,107137,105505],{}," 一定等于关节数",[170,107140,107141,107142,84007,107144,107146,107147,107149],{},"不是。例如 ",[65,107143,103095],{},[65,107145,105505],{}," 是 7 维，但 ",[65,107148,105835],{}," 是 6 维。",[19,107151,107153,107154,107156],{"id":107152},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[65,107155,105505],{}," 的第几位",[170,107158,107159],{},"初学时可以先打印：",[58,107161,107163],{"className":31862,"code":107162,"language":31864,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[65,107164,107165,107175,107185,107197],{"__ignoreMap":63},[68,107166,107167,107169,107171,107173],{"class":70,"line":71},[68,107168,31899],{"class":85},[68,107170,1640],{"class":78},[68,107172,102914],{"class":1742},[68,107174,102917],{"class":78},[68,107176,107177,107179,107181,107183],{"class":70,"line":82},[68,107178,31899],{"class":85},[68,107180,1640],{"class":78},[68,107182,102926],{"class":1742},[68,107184,102929],{"class":78},[68,107186,107187,107189,107191,107194],{"class":70,"line":98},[68,107188,31899],{"class":85},[68,107190,1640],{"class":78},[68,107192,107193],{"class":1742},"\"qpos:\"",[68,107195,107196],{"class":78},", data.qpos)\n",[68,107198,107199,107201,107203,107206],{"class":70,"line":104},[68,107200,31899],{"class":85},[68,107202,1640],{"class":78},[68,107204,107205],{"class":1742},"\"qvel:\"",[68,107207,107208],{"class":78},", data.qvel)\n",[170,107210,107211],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,107213,107214],{"id":107214},"仿真结果每次都一样",[170,107216,107217,107218,107220],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[65,107219,105505],{},"、目标点或控制输入。",[14,107222,104082],{"id":104081},[170,107224,107225,107226,26104],{},"Python 控制 MuJoCo 的核心就是读写 ",[65,107227,34885],{},[263,107229,107230,107238,107243,107248],{},[27,107231,107232,107233,102493,107235,107237],{},"用 ",[65,107234,102545],{},[65,107236,102548],{}," 读取状态。",[27,107239,107232,107240,107242],{},[65,107241,102551],{}," 写入控制。",[27,107244,107232,107245,107247],{},[65,107246,102690],{}," 推进时间。",[27,107249,107250,107251,107253],{},"手动改状态后用 ",[65,107252,105725],{}," 刷新派生量。",[170,107255,107256],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1553,107258,107259],{},"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":63,"searchDepth":82,"depth":82,"links":107261},[107262,107263,107264,107271,107275,107276,107277,107287],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":107265},[107266,107268,107270],{"id":106030,"depth":98,"text":107267},"qpos、qvel、ctrl 是什么",{"id":106108,"depth":98,"text":107269},"mj_step 和 mj_forward 的区别",{"id":106196,"depth":98,"text":106197},{"id":102727,"depth":82,"text":102728,"children":107272},[107273,107274],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":107278},[107279,107281,107282,107284,107286],{"id":107058,"depth":98,"text":107280},"修改 data.qpos 后位置没有更新",{"id":107075,"depth":98,"text":107075},{"id":107134,"depth":98,"text":107283},"误以为 qpos 一定等于关节数",{"id":107152,"depth":98,"text":107285},"不知道某个元素在 qpos 的第几位",{"id":107214,"depth":98,"text":107214},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105793,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107294,"title":107295,"body":107296,"description":63,"extension":1565,"meta":108986,"navigation":1567,"path":108987,"seo":108988,"stem":108989,"__hash__":108990},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107297,"toc":108962},[107298,107301,107303,107306,107308,107333,107336,107355,107358,107360,107362,107386,107388,107402,107404,107445,107447,107471,107473,107476,107510,107512,107525,107528,107596,107605,107609,107612,107646,107652,107655,107659,107698,107701,107721,107725,107768,107770,107799,107802,107808,107811,107813,108207,108209,108221,108223,108234,108236,108239,108268,108276,108279,108314,108317,108319,108327,108330,108332,108343,108353,108373,108376,108412,108424,108472,108491,108533,108546,108574,108579,108600,108610,108628,108631,108665,108668,108688,108691,108710,108716,108718,108721,108727,108733,108743,108746,108752,108761,108763,108809,108811,108817,108823,108826,108829,108849,108852,108858,108864,108866,108889,108892,108895,108904,108907,108945,108947,108950,108956,108959],[10,107299,107295],{"id":107300},"_4关节actuator-与力控制",[14,107302,102122],{"id":102121},[170,107304,107305],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[170,107307,105806],{},[263,107309,107310,107316,107321,107325,107330],{},[27,107311,107312,107315],{},[65,107313,107314],{},"hinge"," 关节",[27,107317,107318],{},[65,107319,107320],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[27,107322,107323],{},[65,107324,102551],{},[27,107326,107327],{},[65,107328,107329],{},"ctrlrange",[27,107331,107332],{},"读取关节角和角速度",[170,107334,107335],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[58,107337,107339],{"className":31862,"code":107338,"language":31864,"meta":63,"style":63},"data.ctrl[0] = ...\n",[65,107340,107341],{"__ignoreMap":63},[68,107342,107343,107346,107348,107350,107352],{"class":70,"line":71},[68,107344,107345],{"class":78},"data.ctrl[",[68,107347,1248],{"class":85},[68,107349,5933],{"class":78},[68,107351,1685],{"class":316},[68,107353,107354],{"class":85}," ...\n",[170,107356,107357],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107359,102245],{"id":102244},[170,107361,102248],{},[58,107363,107364],{"className":25307,"code":105863,"language":25309,"meta":63,"style":63},[65,107365,107366],{"__ignoreMap":63},[68,107367,107368,107370,107372,107374,107376,107378,107380,107382,107384],{"class":70,"line":71},[68,107369,26062],{"class":74},[68,107371,27801],{"class":1742},[68,107373,25319],{"class":1742},[68,107375,27886],{"class":85},[68,107377,105878],{"class":1742},[68,107379,102273],{"class":1742},[68,107381,103976],{"class":1742},[68,107383,102289],{"class":1742},[68,107385,105887],{"class":1742},[170,107387,104294],{},[58,107389,107390],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},[65,107391,107392],{"__ignoreMap":63},[68,107393,107394,107396,107398,107400],{"class":70,"line":71},[68,107395,25316],{"class":74},[68,107397,25319],{"class":1742},[68,107399,102405],{"class":1742},[68,107401,102408],{"class":1742},[170,107403,104311],{},[58,107405,107407],{"className":25307,"code":107406,"language":25309,"meta":63,"style":63},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[65,107408,107409,107426,107435],{"__ignoreMap":63},[68,107410,107411,107413,107415,107417,107420,107422,107424],{"class":70,"line":71},[68,107412,31814],{"class":74},[68,107414,30660],{"class":1742},[68,107416,26601],{"class":85},[68,107418,107419],{"class":1742}," mujoco-control",[68,107421,102450],{"class":1742},[68,107423,102453],{"class":85},[68,107425,102456],{"class":85},[68,107427,107428,107430,107432],{"class":70,"line":82},[68,107429,31814],{"class":74},[68,107431,102463],{"class":1742},[68,107433,107434],{"class":1742}," mujoco-control\n",[68,107436,107437,107439,107441,107443],{"class":70,"line":98},[68,107438,25316],{"class":74},[68,107440,25319],{"class":1742},[68,107442,102405],{"class":1742},[68,107444,102408],{"class":1742},[170,107446,102479],{},[263,107448,107449,107455,107462,107468],{},[27,107450,107451,107454],{},[65,107452,107453],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[27,107456,107457,107459,107460,29869],{},[65,107458,102551],{}," 长度等于 ",[65,107461,103633],{},[27,107463,83699,107464,107467],{},[65,107465,107466],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[27,107469,107470],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107472,102520],{"id":102519},[170,107474,107475],{},"关节决定 body 如何运动:",[58,107477,107479],{"className":54549,"code":107478,"language":54551,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,107480,107481],{"__ignoreMap":63},[68,107482,107483,107485,107487,107489,107491,107494,107496,107498,107500,107503,107505,107508],{"class":70,"line":71},[68,107484,2537],{"class":78},[68,107486,104431],{"class":52784},[68,107488,16408],{"class":74},[68,107490,1685],{"class":78},[68,107492,107493],{"class":1742},"\"hinge\"",[68,107495,55305],{"class":74},[68,107497,1685],{"class":78},[68,107499,107493],{"class":1742},[68,107501,107502],{"class":74}," axis",[68,107504,1685],{"class":78},[68,107506,107507],{"class":1742},"\"0 1 0\"",[68,107509,102619],{"class":78},[170,107511,104527],{},[263,107513,107514,107519,107522],{},[27,107515,107516,107517],{},"名字是 ",[65,107518,107314],{},[27,107520,107521],{},"类型是旋转关节",[27,107523,107524],{},"绕 y 轴旋转",[170,107526,107527],{},"actuator 决定如何施加控制:",[58,107529,107531],{"className":54549,"code":107530,"language":54551,"meta":63,"style":63},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[65,107532,107533,107542,107588],{"__ignoreMap":63},[68,107534,107535,107537,107540],{"class":70,"line":71},[68,107536,2537],{"class":78},[68,107538,107539],{"class":52784},"actuator",[68,107541,52791],{"class":78},[68,107543,107544,107546,107549,107551,107553,107556,107559,107561,107563,107566,107568,107570,107573,107575,107578,107581,107583,107586],{"class":70,"line":82},[68,107545,53626],{"class":78},[68,107547,107548],{"class":52784},"motor",[68,107550,16408],{"class":74},[68,107552,1685],{"class":78},[68,107554,107555],{"class":1742},"\"hinge_motor\"",[68,107557,107558],{"class":74}," joint",[68,107560,1685],{"class":78},[68,107562,107493],{"class":1742},[68,107564,107565],{"class":74}," gear",[68,107567,1685],{"class":78},[68,107569,5168],{"class":1742},[68,107571,107572],{"class":74}," ctrlrange",[68,107574,1685],{"class":78},[68,107576,107577],{"class":1742},"\"-2 2\"",[68,107579,107580],{"class":74}," ctrllimited",[68,107582,1685],{"class":78},[68,107584,107585],{"class":1742},"\"true\"",[68,107587,102619],{"class":78},[68,107589,107590,107592,107594],{"class":70,"line":98},[68,107591,53267],{"class":78},[68,107593,107539],{"class":52784},[68,107595,52791],{"class":78},[170,107597,107598,107601,107602,29869],{},[65,107599,107600],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[65,107603,107604],{},"[-2, 2]",[19,107606,107608],{"id":107607},"joint-和-actuator-的关系","joint 和 actuator 的关系",[170,107610,107611],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[128,107613,107614,107624],{},[131,107615,107616],{},[134,107617,107618,107620,107622],{},[137,107619,27239],{"align":92},[137,107621,104171],{"align":92},[137,107623,102209],{"align":92},[144,107625,107626,107636],{},[134,107627,107628,107630,107633],{},[149,107629,104431],{"align":92},[149,107631,107632],{"align":92},"定义能怎么动",[149,107634,107635],{"align":92},"门轴允许门旋转",[134,107637,107638,107640,107643],{},[149,107639,107539],{"align":92},[149,107641,107642],{"align":92},"定义怎么施力或控制",[149,107644,107645],{"align":92},"人推门、马达带动门",[170,107647,107648,107649,107651],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[65,107650,102551],{}," 主动控制它。",[170,107653,107654],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,107656,107658],{"id":107657},"hinge-joint","hinge joint",[58,107660,107662],{"className":54549,"code":107661,"language":54551,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[65,107663,107664],{"__ignoreMap":63},[68,107665,107666,107668,107670,107672,107674,107676,107678,107680,107682,107684,107686,107688,107691,107693,107696],{"class":70,"line":71},[68,107667,2537],{"class":78},[68,107669,104431],{"class":52784},[68,107671,16408],{"class":74},[68,107673,1685],{"class":78},[68,107675,107493],{"class":1742},[68,107677,55305],{"class":74},[68,107679,1685],{"class":78},[68,107681,107493],{"class":1742},[68,107683,107502],{"class":74},[68,107685,1685],{"class":78},[68,107687,107507],{"class":1742},[68,107689,107690],{"class":74}," damping",[68,107692,1685],{"class":78},[68,107694,107695],{"class":1742},"\"0.1\"",[68,107697,102619],{"class":78},[170,107699,107700],{},"含义：",[263,107702,107703,107709,107715],{},[27,107704,107705,107708],{},[65,107706,107707],{},"type=\"hinge\"","：只能绕一个轴旋转。",[27,107710,107711,107714],{},[65,107712,107713],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[27,107716,107717,107720],{},[65,107718,107719],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,107722,107724],{"id":107723},"motor-actuator","motor actuator",[58,107726,107728],{"className":54549,"code":107727,"language":54551,"meta":63,"style":63},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[65,107729,107730],{"__ignoreMap":63},[68,107731,107732,107734,107736,107738,107740,107742,107744,107746,107748,107750,107752,107754,107756,107758,107760,107762,107764,107766],{"class":70,"line":71},[68,107733,2537],{"class":78},[68,107735,107548],{"class":52784},[68,107737,16408],{"class":74},[68,107739,1685],{"class":78},[68,107741,107555],{"class":1742},[68,107743,107558],{"class":74},[68,107745,1685],{"class":78},[68,107747,107493],{"class":1742},[68,107749,107565],{"class":74},[68,107751,1685],{"class":78},[68,107753,5168],{"class":1742},[68,107755,107572],{"class":74},[68,107757,1685],{"class":78},[68,107759,107577],{"class":1742},[68,107761,107580],{"class":74},[68,107763,1685],{"class":78},[68,107765,107585],{"class":1742},[68,107767,102619],{"class":78},[170,107769,107700],{},[263,107771,107772,107781,107787,107793],{},[27,107773,107774,107777,107778,107780],{},[65,107775,107776],{},"joint=\"hinge\"","：这个电机作用在名为 ",[65,107779,107314],{}," 的关节上。",[27,107782,107783,107786],{},[65,107784,107785],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[27,107788,107789,107792],{},[65,107790,107791],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[27,107794,107795,107798],{},[65,107796,107797],{},"ctrllimited=\"true\"","：启用控制范围限制。",[170,107800,107801],{},"简单理解：",[58,107803,107806],{"className":107804,"code":107805,"language":6676,"meta":63},[6674],"实际施加效果 ≈ data.ctrl[0] * gear\n",[65,107807,107805],{"__ignoreMap":63},[170,107809,107810],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107812,102728],{"id":102727},[58,107814,107816],{"className":31862,"code":107815,"language":31864,"meta":63,"style":63},"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",[65,107817,107818,107825,107829,107835,107845,107849,107853,107861,107866,107871,107875,107879,107884,107889,107893,107898,107903,107908,107913,107917,107921,107925,107930,107935,107940,107944,107948,107952,107956,107968,107980,107988,107992,108002,108012,108022,108026,108039,108052,108056,108073,108087,108122,108126,108130,108141,108156,108171,108183,108187,108191,108203],{"__ignoreMap":63},[68,107819,107820,107822],{"class":70,"line":71},[68,107821,31876],{"class":316},[68,107823,107824],{"class":78}," math\n",[68,107826,107827],{"class":70,"line":82},[68,107828,3890],{"emptyLinePlaceholder":1567},[68,107830,107831,107833],{"class":70,"line":98},[68,107832,31876],{"class":316},[68,107834,102776],{"class":78},[68,107836,107837,107839,107841,107843],{"class":70,"line":104},[68,107838,31876],{"class":316},[68,107840,32864],{"class":78},[68,107842,32867],{"class":316},[68,107844,32870],{"class":78},[68,107846,107847],{"class":70,"line":112},[68,107848,3890],{"emptyLinePlaceholder":1567},[68,107850,107851],{"class":70,"line":124},[68,107852,3890],{"emptyLinePlaceholder":1567},[68,107854,107855,107857,107859],{"class":70,"line":1496},[68,107856,102789],{"class":85},[68,107858,15052],{"class":316},[68,107860,102794],{"class":1742},[68,107862,107863],{"class":70,"line":1502},[68,107864,107865],{"class":1742},"\u003Cmujoco model=\"one_link_motor\">\n",[68,107867,107868],{"class":70,"line":1510},[68,107869,107870],{"class":1742},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[68,107872,107873],{"class":70,"line":1521},[68,107874,3890],{"emptyLinePlaceholder":1567},[68,107876,107877],{"class":70,"line":3103},[68,107878,102813],{"class":1742},[68,107880,107881],{"class":70,"line":3108},[68,107882,107883],{"class":1742},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[68,107885,107886],{"class":70,"line":3114},[68,107887,107888],{"class":1742},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[68,107890,107891],{"class":70,"line":3119},[68,107892,3890],{"emptyLinePlaceholder":1567},[68,107894,107895],{"class":70,"line":3133},[68,107896,107897],{"class":1742},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[68,107899,107900],{"class":70,"line":3138},[68,107901,107902],{"class":1742},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,107904,107905],{"class":70,"line":3144},[68,107906,107907],{"class":1742},"        \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",[68,107909,107910],{"class":70,"line":3165},[68,107911,107912],{"class":1742},"      \u003C\u002Fbody>\n",[68,107914,107915],{"class":70,"line":3170},[68,107916,102842],{"class":1742},[68,107918,107919],{"class":70,"line":3184},[68,107920,102847],{"class":1742},[68,107922,107923],{"class":70,"line":3189},[68,107924,3890],{"emptyLinePlaceholder":1567},[68,107926,107927],{"class":70,"line":3218},[68,107928,107929],{"class":1742},"  \u003Cactuator>\n",[68,107931,107932],{"class":70,"line":3223},[68,107933,107934],{"class":1742},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[68,107936,107937],{"class":70,"line":3240},[68,107938,107939],{"class":1742},"  \u003C\u002Factuator>\n",[68,107941,107942],{"class":70,"line":3245},[68,107943,102852],{"class":1742},[68,107945,107946],{"class":70,"line":3250},[68,107947,97173],{"class":1742},[68,107949,107950],{"class":70,"line":3255},[68,107951,3890],{"emptyLinePlaceholder":1567},[68,107953,107954],{"class":70,"line":3269},[68,107955,3890],{"emptyLinePlaceholder":1567},[68,107957,107958,107960,107962,107964,107966],{"class":70,"line":3274},[68,107959,33431],{"class":316},[68,107961,3463],{"class":74},[68,107963,102873],{"class":78},[68,107965,97161],{"class":85},[68,107967,5229],{"class":78},[68,107969,107970,107972,107974,107976,107978],{"class":70,"line":4067},[68,107971,102882],{"class":78},[68,107973,1685],{"class":316},[68,107975,102887],{"class":78},[68,107977,102789],{"class":85},[68,107979,1646],{"class":78},[68,107981,107982,107984,107986],{"class":70,"line":4081},[68,107983,102896],{"class":78},[68,107985,1685],{"class":316},[68,107987,102901],{"class":78},[68,107989,107990],{"class":70,"line":4089},[68,107991,3890],{"emptyLinePlaceholder":1567},[68,107993,107994,107996,107998,108000],{"class":70,"line":4094},[68,107995,32783],{"class":85},[68,107997,1640],{"class":78},[68,107999,102914],{"class":1742},[68,108001,102917],{"class":78},[68,108003,108004,108006,108008,108010],{"class":70,"line":4100},[68,108005,32783],{"class":85},[68,108007,1640],{"class":78},[68,108009,102926],{"class":1742},[68,108011,102929],{"class":78},[68,108013,108014,108016,108018,108020],{"class":70,"line":4106},[68,108015,32783],{"class":85},[68,108017,1640],{"class":78},[68,108019,102938],{"class":1742},[68,108021,102941],{"class":78},[68,108023,108024],{"class":70,"line":4111},[68,108025,3890],{"emptyLinePlaceholder":1567},[68,108027,108028,108030,108033,108035,108037],{"class":70,"line":9437},[68,108029,4591],{"class":316},[68,108031,108032],{"class":78}," model.nu ",[68,108034,22435],{"class":316},[68,108036,26604],{"class":85},[68,108038,5229],{"class":78},[68,108040,108041,108043,108045,108047,108050],{"class":70,"line":9461},[68,108042,104907],{"class":316},[68,108044,104910],{"class":85},[68,108046,1640],{"class":78},[68,108048,108049],{"class":1742},"\"expected exactly one actuator\"",[68,108051,1646],{"class":78},[68,108053,108054],{"class":70,"line":9466},[68,108055,3890],{"emptyLinePlaceholder":1567},[68,108057,108058,108060,108062,108064,108066,108068,108071],{"class":70,"line":9472},[68,108059,4691],{"class":316},[68,108061,33100],{"class":78},[68,108063,27529],{"class":316},[68,108065,33927],{"class":85},[68,108067,1640],{"class":78},[68,108069,108070],{"class":85},"2000",[68,108072,32270],{"class":78},[68,108074,108075,108078,108080,108082,108084],{"class":70,"line":9499},[68,108076,108077],{"class":78},"        t ",[68,108079,1685],{"class":316},[68,108081,33100],{"class":78},[68,108083,2083],{"class":316},[68,108085,108086],{"class":78}," model.opt.timestep\n",[68,108088,108089,108092,108094,108096,108098,108101,108103,108106,108108,108110,108113,108115,108117,108119],{"class":70,"line":9504},[68,108090,108091],{"class":78},"        data.ctrl[",[68,108093,1248],{"class":85},[68,108095,5933],{"class":78},[68,108097,1685],{"class":316},[68,108099,108100],{"class":85}," 1.5",[68,108102,8007],{"class":316},[68,108104,108105],{"class":78}," math.sin(",[68,108107,106734],{"class":85},[68,108109,8007],{"class":316},[68,108111,108112],{"class":78}," math.pi ",[68,108114,2083],{"class":316},[68,108116,63345],{"class":85},[68,108118,8007],{"class":316},[68,108120,108121],{"class":78}," t)\n",[68,108123,108124],{"class":70,"line":9510},[68,108125,102991],{"class":78},[68,108127,108128],{"class":70,"line":9522},[68,108129,3890],{"emptyLinePlaceholder":1567},[68,108131,108132,108134,108136,108139],{"class":70,"line":9534},[68,108133,32783],{"class":85},[68,108135,1640],{"class":78},[68,108137,108138],{"class":1742},"\"time:\"",[68,108140,102953],{"class":78},[68,108142,108143,108145,108147,108150,108152,108154],{"class":70,"line":9546},[68,108144,32783],{"class":85},[68,108146,1640],{"class":78},[68,108148,108149],{"class":1742},"\"joint qpos:\"",[68,108151,106404],{"class":78},[68,108153,1922],{"class":85},[68,108155,31981],{"class":78},[68,108157,108158,108160,108162,108165,108167,108169],{"class":70,"line":11204},[68,108159,32783],{"class":85},[68,108161,1640],{"class":78},[68,108163,108164],{"class":1742},"\"joint qvel:\"",[68,108166,106420],{"class":78},[68,108168,1922],{"class":85},[68,108170,31981],{"class":78},[68,108172,108173,108175,108177,108180],{"class":70,"line":11229},[68,108174,32783],{"class":85},[68,108176,1640],{"class":78},[68,108178,108179],{"class":1742},"\"last ctrl:\"",[68,108181,108182],{"class":78},", data.ctrl.copy())\n",[68,108184,108185],{"class":70,"line":11252},[68,108186,3890],{"emptyLinePlaceholder":1567},[68,108188,108189],{"class":70,"line":11276},[68,108190,3890],{"emptyLinePlaceholder":1567},[68,108192,108193,108195,108197,108199,108201],{"class":70,"line":11281},[68,108194,3023],{"class":316},[68,108196,32704],{"class":85},[68,108198,103034],{"class":316},[68,108200,103037],{"class":1742},[68,108202,5229],{"class":78},[68,108204,108205],{"class":70,"line":11286},[68,108206,103044],{"class":78},[170,108208,105045],{},[58,108210,108212],{"className":25307,"code":108211,"language":25309,"meta":63,"style":63},"touch ch4_joint_motor.py\n",[65,108213,108214],{"__ignoreMap":63},[68,108215,108216,108218],{"class":70,"line":71},[68,108217,102758],{"class":74},[68,108219,108220],{"class":1742}," ch4_joint_motor.py\n",[170,108222,103776],{},[58,108224,108226],{"className":25307,"code":108225,"language":25309,"meta":63,"style":63},"python ch4_joint_motor.py\n",[65,108227,108228],{"__ignoreMap":63},[68,108229,108230,108232],{"class":70,"line":71},[68,108231,31864],{"class":74},[68,108233,108220],{"class":1742},[19,108235,103047],{"id":103047},[170,108237,108238],{},"检查 actuator 数量：",[58,108240,108242],{"className":31862,"code":108241,"language":31864,"meta":63,"style":63},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[65,108243,108244,108256],{"__ignoreMap":63},[68,108245,108246,108248,108250,108252,108254],{"class":70,"line":71},[68,108247,3023],{"class":316},[68,108249,108032],{"class":78},[68,108251,22435],{"class":316},[68,108253,26604],{"class":85},[68,108255,5229],{"class":78},[68,108257,108258,108260,108262,108264,108266],{"class":70,"line":82},[68,108259,105370],{"class":316},[68,108261,104910],{"class":85},[68,108263,1640],{"class":78},[68,108265,108049],{"class":1742},[68,108267,1646],{"class":78},[170,108269,108270,108272,108273,108275],{},[65,108271,103633],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[65,108274,102551],{}," 长度应该是 1。",[170,108277,108278],{},"产生正弦控制信号：",[58,108280,108282],{"className":31862,"code":108281,"language":31864,"meta":63,"style":63},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[65,108283,108284],{"__ignoreMap":63},[68,108285,108286,108288,108290,108292,108294,108296,108298,108300,108302,108304,108306,108308,108310,108312],{"class":70,"line":71},[68,108287,107345],{"class":78},[68,108289,1248],{"class":85},[68,108291,5933],{"class":78},[68,108293,1685],{"class":316},[68,108295,108100],{"class":85},[68,108297,8007],{"class":316},[68,108299,108105],{"class":78},[68,108301,106734],{"class":85},[68,108303,8007],{"class":316},[68,108305,108112],{"class":78},[68,108307,2083],{"class":316},[68,108309,63345],{"class":85},[68,108311,8007],{"class":316},[68,108313,108121],{"class":78},[170,108315,108316],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[170,108318,103148],{},[58,108320,108321],{"className":31862,"code":105980,"language":31864,"meta":63,"style":63},[65,108322,108323],{"__ignoreMap":63},[68,108324,108325],{"class":70,"line":71},[68,108326,105980],{"class":78},[170,108328,108329],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,108331,103183],{"id":103183},[58,108333,108335],{"className":31862,"code":108334,"language":31864,"meta":63,"style":63},"import math\n",[65,108336,108337],{"__ignoreMap":63},[68,108338,108339,108341],{"class":70,"line":71},[68,108340,31876],{"class":316},[68,108342,107824],{"class":78},[170,108344,108345,108346,102493,108349,108352],{},"导入 Python 标准库里的数学模块。后面要用 ",[65,108347,108348],{},"math.sin",[65,108350,108351],{},"math.pi"," 生成周期变化的控制信号。",[58,108354,108355],{"className":31862,"code":105161,"language":31864,"meta":63,"style":63},[65,108356,108357,108363],{"__ignoreMap":63},[68,108358,108359,108361],{"class":70,"line":71},[68,108360,31876],{"class":316},[68,108362,102776],{"class":78},[68,108364,108365,108367,108369,108371],{"class":70,"line":82},[68,108366,31876],{"class":316},[68,108368,32864],{"class":78},[68,108370,32867],{"class":316},[68,108372,32870],{"class":78},[170,108374,108375],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[58,108377,108378],{"className":54549,"code":107661,"language":54551,"meta":63,"style":63},[65,108379,108380],{"__ignoreMap":63},[68,108381,108382,108384,108386,108388,108390,108392,108394,108396,108398,108400,108402,108404,108406,108408,108410],{"class":70,"line":71},[68,108383,2537],{"class":78},[68,108385,104431],{"class":52784},[68,108387,16408],{"class":74},[68,108389,1685],{"class":78},[68,108391,107493],{"class":1742},[68,108393,55305],{"class":74},[68,108395,1685],{"class":78},[68,108397,107493],{"class":1742},[68,108399,107502],{"class":74},[68,108401,1685],{"class":78},[68,108403,107507],{"class":1742},[68,108405,107690],{"class":74},[68,108407,1685],{"class":78},[68,108409,107695],{"class":1742},[68,108411,102619],{"class":78},[170,108413,108414,108415,108417,108418,108420,108421,108423],{},"这行定义关节。",[65,108416,107314],{}," 表示旋转关节。",[65,108419,107713],{}," 表示绕 y 轴旋转。",[65,108422,107719],{}," 表示有一点阻尼，运动不会完全无损耗。",[58,108425,108427],{"className":54549,"code":108426,"language":54551,"meta":63,"style":63},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[65,108428,108429],{"__ignoreMap":63},[68,108430,108431,108433,108435,108437,108439,108442,108444,108446,108449,108452,108454,108457,108459,108461,108463,108465,108467,108470],{"class":70,"line":71},[68,108432,2537],{"class":78},[68,108434,102595],{"class":52784},[68,108436,16408],{"class":74},[68,108438,1685],{"class":78},[68,108440,108441],{"class":1742},"\"link_geom\"",[68,108443,55305],{"class":74},[68,108445,1685],{"class":78},[68,108447,108448],{"class":1742},"\"capsule\"",[68,108450,108451],{"class":74}," fromto",[68,108453,1685],{"class":78},[68,108455,108456],{"class":1742},"\"0 0 0 0 0 0.5\"",[68,108458,102611],{"class":74},[68,108460,1685],{"class":78},[68,108462,105253],{"class":1742},[68,108464,103476],{"class":74},[68,108466,1685],{"class":78},[68,108468,108469],{"class":1742},"\"0.5\"",[68,108471,102619],{"class":78},[170,108473,108474,108475,108477,108478,108480,108481,108484,108485,29869,108488,108490],{},"这行定义摆杆的形状。",[65,108476,104640],{}," 是胶囊体，适合表示杆子。",[65,108479,104651],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[65,108482,108483],{},"(0,0,0)"," 延伸到 ",[65,108486,108487],{},"(0,0,0.5)",[65,108489,104645],{}," 是半径。",[58,108492,108493],{"className":54549,"code":107727,"language":54551,"meta":63,"style":63},[65,108494,108495],{"__ignoreMap":63},[68,108496,108497,108499,108501,108503,108505,108507,108509,108511,108513,108515,108517,108519,108521,108523,108525,108527,108529,108531],{"class":70,"line":71},[68,108498,2537],{"class":78},[68,108500,107548],{"class":52784},[68,108502,16408],{"class":74},[68,108504,1685],{"class":78},[68,108506,107555],{"class":1742},[68,108508,107558],{"class":74},[68,108510,1685],{"class":78},[68,108512,107493],{"class":1742},[68,108514,107565],{"class":74},[68,108516,1685],{"class":78},[68,108518,5168],{"class":1742},[68,108520,107572],{"class":74},[68,108522,1685],{"class":78},[68,108524,107577],{"class":1742},[68,108526,107580],{"class":74},[68,108528,1685],{"class":78},[68,108530,107585],{"class":1742},[68,108532,102619],{"class":78},[170,108534,108535,108536,108538,108539,108542,108543,108545],{},"这行定义电机。它作用在 ",[65,108537,107314],{}," 关节上。",[65,108540,108541],{},"gear"," 可以理解成放大倍数。",[65,108544,107329],{}," 限制控制输入范围。",[58,108547,108548],{"className":31862,"code":108241,"language":31864,"meta":63,"style":63},[65,108549,108550,108562],{"__ignoreMap":63},[68,108551,108552,108554,108556,108558,108560],{"class":70,"line":71},[68,108553,3023],{"class":316},[68,108555,108032],{"class":78},[68,108557,22435],{"class":316},[68,108559,26604],{"class":85},[68,108561,5229],{"class":78},[68,108563,108564,108566,108568,108570,108572],{"class":70,"line":82},[68,108565,105370],{"class":316},[68,108567,104910],{"class":85},[68,108569,1640],{"class":78},[68,108571,108049],{"class":1742},[68,108573,1646],{"class":78},[170,108575,108576,108578],{},[65,108577,103633],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[58,108580,108582],{"className":31862,"code":108581,"language":31864,"meta":63,"style":63},"for step in range(2000):\n",[65,108583,108584],{"__ignoreMap":63},[68,108585,108586,108588,108590,108592,108594,108596,108598],{"class":70,"line":71},[68,108587,4515],{"class":316},[68,108589,33100],{"class":78},[68,108591,27529],{"class":316},[68,108593,33927],{"class":85},[68,108595,1640],{"class":78},[68,108597,108070],{"class":85},[68,108599,32270],{"class":78},[170,108601,108602,108603,108605,108606,108609],{},"循环 2000 步。这里没有用 ",[65,108604,2619],{},"，而是用 ",[65,108607,108608],{},"step","，因为后面要用当前步数计算时间。",[58,108611,108613],{"className":31862,"code":108612,"language":31864,"meta":63,"style":63},"t = step * model.opt.timestep\n",[65,108614,108615],{"__ignoreMap":63},[68,108616,108617,108620,108622,108624,108626],{"class":70,"line":71},[68,108618,108619],{"class":78},"t ",[68,108621,1685],{"class":316},[68,108623,33100],{"class":78},[68,108625,2083],{"class":316},[68,108627,108086],{"class":78},[170,108629,108630],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[58,108632,108633],{"className":31862,"code":108281,"language":31864,"meta":63,"style":63},[65,108634,108635],{"__ignoreMap":63},[68,108636,108637,108639,108641,108643,108645,108647,108649,108651,108653,108655,108657,108659,108661,108663],{"class":70,"line":71},[68,108638,107345],{"class":78},[68,108640,1248],{"class":85},[68,108642,5933],{"class":78},[68,108644,1685],{"class":316},[68,108646,108100],{"class":85},[68,108648,8007],{"class":316},[68,108650,108105],{"class":78},[68,108652,106734],{"class":85},[68,108654,8007],{"class":316},[68,108656,108112],{"class":78},[68,108658,2083],{"class":316},[68,108660,63345],{"class":85},[68,108662,8007],{"class":316},[68,108664,108121],{"class":78},[170,108666,108667],{},"这行给电机输入一个正弦波。拆开看：",[263,108669,108670,108676,108682],{},[27,108671,108672,108675],{},[65,108673,108674],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[27,108677,108678,108681],{},[65,108679,108680],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[27,108683,108684,108687],{},[65,108685,108686],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[170,108689,108690],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[58,108692,108694],{"className":31862,"code":108693,"language":31864,"meta":63,"style":63},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[65,108695,108696],{"__ignoreMap":63},[68,108697,108698,108700,108702,108704,108706,108708],{"class":70,"line":71},[68,108699,31899],{"class":85},[68,108701,1640],{"class":78},[68,108703,108149],{"class":1742},[68,108705,106404],{"class":78},[68,108707,1922],{"class":85},[68,108709,31981],{"class":78},[170,108711,108712,108713,108715],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[65,108714,102545],{}," 只有一个数。",[14,108717,103791],{"id":103790},[170,108719,108720],{},"输出类似:",[58,108722,108725],{"className":108723,"code":108724,"language":6676,"meta":63},[6674],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[65,108726,108724],{"__ignoreMap":63},[170,108728,108729,108730,108732],{},"这里 ",[65,108731,107600],{}," 是电机输入。",[170,108734,108735,108738,108739,108742],{},[65,108736,108737],{},"joint qpos"," 是关节角度，单位通常是弧度。",[65,108740,108741],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[170,108744,108745],{},"角度单位提示：",[58,108747,108750],{"className":108748,"code":108749,"language":6676,"meta":63},[6674],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[65,108751,108749],{"__ignoreMap":63},[170,108753,108754,108755,108757,108758,108760],{},"如果你看到 ",[65,108756,105505],{}," 是 ",[65,108759,36813],{},"，大约就是 28.6 度。",[14,108762,103823],{"id":103822},[263,108764,108765,108772,108775,108782,108785,108793,108801],{},[27,108766,103886,108767,103889,108769,29869],{},[65,108768,107785],{},[65,108770,108771],{},"gear=\"5\"",[27,108773,108774],{},"重新运行，观察关节运动是否更剧烈。",[27,108776,103886,108777,103889,108779,29869],{},[65,108778,107329],{},[65,108780,108781],{},"-0.2 0.2",[27,108783,108784],{},"重新运行，观察控制能力是否变弱。",[27,108786,108787,108788,108790,108791,29869],{},"去掉 actuator，确认 ",[65,108789,103633],{}," 变成 ",[65,108792,1248],{},[27,108794,103886,108795,103889,108797,108800],{},[65,108796,107719],{},[65,108798,108799],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[27,108802,103886,108803,103889,108805,108808],{},[65,108804,107713],{},[65,108806,108807],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108810,103928],{"id":103927},[19,108812,108814],{"id":108813},"indexerror-index-0-is-out-of-bounds",[65,108815,108816],{},"IndexError: index 0 is out of bounds",[170,108818,108819,108820,108822],{},"原因是 ",[65,108821,107466],{},"，没有 actuator。",[19,108824,108825],{"id":108825},"关节几乎不动",[170,108827,108828],{},"可能原因:",[263,108830,108831,108836,108840,108846],{},[27,108832,108833,108835],{},[65,108834,108541],{}," 太小",[27,108837,108838,108835],{},[65,108839,107329],{},[27,108841,108842,108845],{},[65,108843,108844],{},"damping"," 太大",[27,108847,108848],{},"重力方向导致运动不明显",[19,108850,108851],{"id":108851},"模型编译失败",[170,108853,108854,108855,108857],{},"检查 actuator 引用的 ",[65,108856,107776],{}," 是否存在，joint 名称是否拼写一致。",[19,108859,108861,108863],{"id":108860},"datactrl0-写了但没有效果",[65,108862,107600],{}," 写了但没有效果",[170,108865,104050],{},[263,108867,108868,108873,108876,108881,108886],{},[27,108869,108870,108872],{},[65,108871,103633],{}," 是否大于 0。",[27,108874,108875],{},"motor 是否引用了正确 joint。",[27,108877,108878,108880],{},[65,108879,108541],{}," 是否太小。",[27,108882,108883,108885],{},[65,108884,107329],{}," 是否把输入限制得太小。",[27,108887,108888],{},"body 是否真的有可动 joint。",[19,108890,108891],{"id":108891},"控制输入超过范围会怎样",[170,108893,108894],{},"如果设置了：",[58,108896,108898],{"className":54549,"code":108897,"language":54551,"meta":63,"style":63},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[65,108899,108900],{"__ignoreMap":63},[68,108901,108902],{"class":70,"line":71},[68,108903,108897],{"class":78},[170,108905,108906],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[58,108908,108910],{"className":31862,"code":108909,"language":31864,"meta":63,"style":63},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[65,108911,108912,108932],{"__ignoreMap":63},[68,108913,108914,108917,108919,108922,108924,108926,108928,108930],{"class":70,"line":71},[68,108915,108916],{"class":78},"action ",[68,108918,1685],{"class":316},[68,108920,108921],{"class":78}," np.clip(action, ",[68,108923,2160],{"class":316},[68,108925,106734],{"class":85},[68,108927,13923],{"class":78},[68,108929,106734],{"class":85},[68,108931,1646],{"class":78},[68,108933,108934,108936,108938,108940,108942],{"class":70,"line":82},[68,108935,107345],{"class":78},[68,108937,1248],{"class":85},[68,108939,5933],{"class":78},[68,108941,1685],{"class":316},[68,108943,108944],{"class":78}," action\n",[14,108946,104082],{"id":104081},[170,108948,108949],{},"这一章建立了控制任务的基本形式：",[58,108951,108954],{"className":108952,"code":108953,"language":6676,"meta":63},[6674],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[65,108955,108953],{"__ignoreMap":63},[170,108957,108958],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1553,108960,108961],{},"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":63,"searchDepth":82,"depth":82,"links":108963},[108964,108965,108966,108971,108975,108976,108977,108985],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":108967},[108968,108969,108970],{"id":107607,"depth":98,"text":107608},{"id":107657,"depth":98,"text":107658},{"id":107723,"depth":98,"text":107724},{"id":102727,"depth":82,"text":102728,"children":108972},[108973,108974],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":108978},[108979,108980,108981,108982,108984],{"id":108813,"depth":98,"text":108816},{"id":108825,"depth":98,"text":108825},{"id":108851,"depth":98,"text":108851},{"id":108860,"depth":98,"text":108983},"data.ctrl[0] 写了但没有效果",{"id":108891,"depth":98,"text":108891},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107295,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108992,"title":108993,"body":108994,"description":63,"extension":1565,"meta":110903,"navigation":1567,"path":110904,"seo":110905,"stem":110906,"__hash__":110907},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108995,"toc":110879},[108996,108999,109001,109004,109012,109015,109032,109035,109060,109063,109109,109111,109113,109168,109170,109189,109191,109234,109237,109254,109257,109273,109283,109290,109292,109295,109298,109332,109335,109383,109387,109390,109404,109413,109417,109420,109445,109448,109452,109465,109468,109474,109477,109492,109494,109497,109757,109759,109771,109774,110086,110088,110100,110102,110105,110120,110125,110128,110150,110153,110156,110190,110193,110197,110208,110211,110228,110231,110245,110252,110272,110279,110293,110296,110308,110323,110343,110346,110368,110371,110375,110390,110401,110416,110419,110449,110465,110494,110502,110526,110529,110547,110557,110569,110576,110585,110591,110600,110603,110605,110614,110617,110632,110634,110637,110648,110651,110662,110665,110683,110685,110702,110705,110733,110735,110739,110742,110772,110778,110781,110785,110793,110796,110798,110819,110822,110825,110841,110844,110860,110862,110865,110876],[10,108997,108993],{"id":108998},"_5viewer-可视化与-renderer-离屏渲染",[14,109000,102122],{"id":102121},[170,109002,109003],{},"本章掌握两类可视化方式:",[263,109005,109006,109009],{},[27,109007,109008],{},"交互式 viewer: 适合人工观察仿真",[27,109010,109011],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[170,109013,109014],{},"使用官方接口:",[58,109016,109018],{"className":31862,"code":109017,"language":31864,"meta":63,"style":63},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[65,109019,109020,109027],{"__ignoreMap":63},[68,109021,109022,109024],{"class":70,"line":71},[68,109023,31876],{"class":316},[68,109025,109026],{"class":78}," mujoco.viewer\n",[68,109028,109029],{"class":70,"line":82},[68,109030,109031],{"class":78},"mujoco.viewer.launch_passive(model, data)\n",[170,109033,109034],{},"以及:",[58,109036,109038],{"className":31862,"code":109037,"language":31864,"meta":63,"style":63},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[65,109039,109040,109050],{"__ignoreMap":63},[68,109041,109042,109045,109047],{"class":70,"line":71},[68,109043,109044],{"class":78},"renderer ",[68,109046,1685],{"class":316},[68,109048,109049],{"class":78}," mujoco.Renderer(model)\n",[68,109051,109052,109055,109057],{"class":70,"line":82},[68,109053,109054],{"class":78},"image ",[68,109056,1685],{"class":316},[68,109058,109059],{"class":78}," renderer.render()\n",[170,109061,109062],{},"新手建议先理解二者区别：",[128,109064,109065,109081],{},[131,109066,109067],{},[134,109068,109069,109072,109075,109078],{},[137,109070,109071],{"align":92},"工具",[137,109073,109074],{"align":92},"用途",[137,109076,109077],{"align":92},"是否打开窗口",[137,109079,109080],{"align":92},"常见场景",[144,109082,109083,109096],{},[134,109084,109085,109088,109091,109093],{},[149,109086,109087],{"align":92},"Viewer",[149,109089,109090],{"align":92},"人眼实时观察仿真",[149,109092,106140],{"align":92},[149,109094,109095],{"align":92},"调试模型、看控制效果",[134,109097,109098,109101,109104,109106],{},[149,109099,109100],{"align":92},"Renderer",[149,109102,109103],{"align":92},"生成图像数组",[149,109105,976],{"align":92},[149,109107,109108],{"align":92},"保存图片、训练视觉策略、服务器批量采集",[14,109110,102245],{"id":102244},[170,109112,102248],{},[58,109114,109116],{"className":25307,"code":109115,"language":25309,"meta":63,"style":63},"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",[65,109117,109118,109130,109140,109148,109156],{"__ignoreMap":63},[68,109119,109120,109122,109124,109126,109128],{"class":70,"line":71},[68,109121,26062],{"class":74},[68,109123,27801],{"class":1742},[68,109125,25319],{"class":1742},[68,109127,27886],{"class":85},[68,109129,26164],{"class":85},[68,109131,109132,109134,109136,109138],{"class":70,"line":82},[68,109133,102283],{"class":1742},[68,109135,102286],{"class":1742},[68,109137,102289],{"class":1742},[68,109139,26164],{"class":85},[68,109141,109142,109144,109146],{"class":70,"line":98},[68,109143,102296],{"class":1742},[68,109145,102299],{"class":1742},[68,109147,26164],{"class":85},[68,109149,109150,109152,109154],{"class":70,"line":104},[68,109151,102306],{"class":1742},[68,109153,102309],{"class":1742},[68,109155,26164],{"class":85},[68,109157,109158,109160,109162,109164,109166],{"class":70,"line":112},[68,109159,102316],{"class":1742},[68,109161,102319],{"class":1742},[68,109163,102322],{"class":1742},[68,109165,102325],{"class":1742},[68,109167,103991],{"class":1742},[170,109169,104294],{},[58,109171,109173],{"className":25307,"code":109172,"language":25309,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy pillow\n",[65,109174,109175],{"__ignoreMap":63},[68,109176,109177,109179,109181,109183,109186],{"class":70,"line":71},[68,109178,25316],{"class":74},[68,109180,25319],{"class":1742},[68,109182,102405],{"class":1742},[68,109184,109185],{"class":1742}," numpy",[68,109187,109188],{"class":1742}," pillow\n",[170,109190,104311],{},[58,109192,109194],{"className":25307,"code":109193,"language":25309,"meta":63,"style":63},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[65,109195,109196,109213,109222],{"__ignoreMap":63},[68,109197,109198,109200,109202,109204,109207,109209,109211],{"class":70,"line":71},[68,109199,31814],{"class":74},[68,109201,30660],{"class":1742},[68,109203,26601],{"class":85},[68,109205,109206],{"class":1742}," mujoco-render",[68,109208,102450],{"class":1742},[68,109210,102453],{"class":85},[68,109212,102456],{"class":85},[68,109214,109215,109217,109219],{"class":70,"line":82},[68,109216,31814],{"class":74},[68,109218,102463],{"class":1742},[68,109220,109221],{"class":1742}," mujoco-render\n",[68,109223,109224,109226,109228,109230,109232],{"class":70,"line":98},[68,109225,25316],{"class":74},[68,109227,25319],{"class":1742},[68,109229,102405],{"class":1742},[68,109231,109185],{"class":1742},[68,109233,109188],{"class":1742},[170,109235,109236],{},"离屏渲染后端:",[58,109238,109240],{"className":25307,"code":109239,"language":25309,"meta":63,"style":63},"export MUJOCO_GL=egl\n",[65,109241,109242],{"__ignoreMap":63},[68,109243,109244,109246,109249,109251],{"class":70,"line":71},[68,109245,26528],{"class":316},[68,109247,109248],{"class":78}," MUJOCO_GL",[68,109250,1685],{"class":316},[68,109252,109253],{"class":78},"egl\n",[170,109255,109256],{},"或:",[58,109258,109260],{"className":25307,"code":109259,"language":25309,"meta":63,"style":63},"export MUJOCO_GL=osmesa\n",[65,109261,109262],{"__ignoreMap":63},[68,109263,109264,109266,109268,109270],{"class":70,"line":71},[68,109265,26528],{"class":316},[68,109267,109248],{"class":78},[68,109269,1685],{"class":316},[68,109271,109272],{"class":78},"osmesa\n",[170,109274,109275,109276,109279,109280,29869],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[65,109277,109278],{},"egl"," 失败，再尝试 ",[65,109281,109282],{},"osmesa",[170,109284,109285,109286,109289],{},"如果你在本机桌面环境运行，通常先不要设置 ",[65,109287,109288],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109291,102520],{"id":102519},[170,109293,109294],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[170,109296,109297],{},"典型 viewer 流程:",[58,109299,109301],{"className":31862,"code":109300,"language":31864,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[65,109302,109303,109316,109323,109327],{"__ignoreMap":63},[68,109304,109305,109308,109311,109313],{"class":70,"line":71},[68,109306,109307],{"class":316},"with",[68,109309,109310],{"class":78}," mujoco.viewer.launch_passive(model, data) ",[68,109312,32867],{"class":316},[68,109314,109315],{"class":78}," viewer:\n",[68,109317,109318,109320],{"class":70,"line":82},[68,109319,3741],{"class":316},[68,109321,109322],{"class":78}," viewer.is_running():\n",[68,109324,109325],{"class":70,"line":98},[68,109326,102991],{"class":78},[68,109328,109329],{"class":70,"line":104},[68,109330,109331],{"class":78},"        viewer.sync()\n",[170,109333,109334],{},"典型 renderer 流程:",[58,109336,109338],{"className":31862,"code":109337,"language":31864,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[65,109339,109340,109366,109370,109375],{"__ignoreMap":63},[68,109341,109342,109344,109346,109349,109351,109353,109355,109357,109359,109361,109364],{"class":70,"line":71},[68,109343,109044],{"class":78},[68,109345,1685],{"class":316},[68,109347,109348],{"class":78}," mujoco.Renderer(model, ",[68,109350,26467],{"class":6705},[68,109352,1685],{"class":316},[68,109354,43826],{"class":85},[68,109356,13923],{"class":78},[68,109358,26463],{"class":6705},[68,109360,1685],{"class":316},[68,109362,109363],{"class":85},"640",[68,109365,1646],{"class":78},[68,109367,109368],{"class":70,"line":82},[68,109369,105980],{"class":78},[68,109371,109372],{"class":70,"line":98},[68,109373,109374],{"class":78},"renderer.update_scene(data)\n",[68,109376,109377,109379,109381],{"class":70,"line":104},[68,109378,109054],{"class":78},[68,109380,1685],{"class":316},[68,109382,109059],{"class":78},[19,109384,109386],{"id":109385},"viewer-的同步逻辑","viewer 的同步逻辑",[170,109388,109389],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[58,109391,109393],{"className":31862,"code":109392,"language":31864,"meta":63,"style":63},"mujoco.mj_step(model, data)\nviewer.sync()\n",[65,109394,109395,109399],{"__ignoreMap":63},[68,109396,109397],{"class":70,"line":71},[68,109398,105980],{"class":78},[68,109400,109401],{"class":70,"line":82},[68,109402,109403],{"class":78},"viewer.sync()\n",[170,109405,109406,109408,109409,109412],{},[65,109407,102690],{}," 负责算物理，",[65,109410,109411],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,109414,109416],{"id":109415},"为什么要-sleep","为什么要 sleep",[170,109418,109419],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[58,109421,109423],{"className":31862,"code":109422,"language":31864,"meta":63,"style":63},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[65,109424,109425],{"__ignoreMap":63},[68,109426,109427,109430,109432,109435,109437,109440,109442],{"class":70,"line":71},[68,109428,109429],{"class":78},"sleep_time ",[68,109431,1685],{"class":316},[68,109433,109434],{"class":78}," model.opt.timestep ",[68,109436,2160],{"class":316},[68,109438,109439],{"class":78}," (time.time() ",[68,109441,2160],{"class":316},[68,109443,109444],{"class":78}," step_start)\n",[170,109446,109447],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,109449,109451],{"id":109450},"renderer-输出是什么","renderer 输出是什么",[58,109453,109455],{"className":31862,"code":109454,"language":31864,"meta":63,"style":63},"image = renderer.render()\n",[65,109456,109457],{"__ignoreMap":63},[68,109458,109459,109461,109463],{"class":70,"line":71},[68,109460,109054],{"class":78},[68,109462,1685],{"class":316},[68,109464,109059],{"class":78},[170,109466,109467],{},"得到的是 NumPy 数组，形状通常是：",[58,109469,109472],{"className":109470,"code":109471,"language":6676,"meta":63},[6674],"(height, width, 3)\n",[65,109473,109471],{"__ignoreMap":63},[170,109475,109476],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[58,109478,109480],{"className":31862,"code":109479,"language":31864,"meta":63,"style":63},"Image.fromarray(image).save(\"render_output.png\")\n",[65,109481,109482],{"__ignoreMap":63},[68,109483,109484,109487,109490],{"class":70,"line":71},[68,109485,109486],{"class":78},"Image.fromarray(image).save(",[68,109488,109489],{"class":1742},"\"render_output.png\"",[68,109491,1646],{"class":78},[14,109493,102728],{"id":102727},[170,109495,109496],{},"交互式 Viewer:",[58,109498,109500],{"className":31862,"code":109499,"language":31864,"meta":63,"style":63},"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",[65,109501,109502,109508,109512,109518,109524,109528,109532,109540,109545,109549,109553,109557,109562,109567,109571,109575,109579,109584,109588,109592,109596,109600,109604,109608,109620,109632,109640,109644,109654,109674,109684,109689,109694,109698,109715,109728,109733,109737,109741,109753],{"__ignoreMap":63},[68,109503,109504,109506],{"class":70,"line":71},[68,109505,31876],{"class":316},[68,109507,33313],{"class":78},[68,109509,109510],{"class":70,"line":82},[68,109511,3890],{"emptyLinePlaceholder":1567},[68,109513,109514,109516],{"class":70,"line":98},[68,109515,31876],{"class":316},[68,109517,102776],{"class":78},[68,109519,109520,109522],{"class":70,"line":104},[68,109521,31876],{"class":316},[68,109523,109026],{"class":78},[68,109525,109526],{"class":70,"line":112},[68,109527,3890],{"emptyLinePlaceholder":1567},[68,109529,109530],{"class":70,"line":124},[68,109531,3890],{"emptyLinePlaceholder":1567},[68,109533,109534,109536,109538],{"class":70,"line":1496},[68,109535,102789],{"class":85},[68,109537,15052],{"class":316},[68,109539,102794],{"class":1742},[68,109541,109542],{"class":70,"line":1502},[68,109543,109544],{"class":1742},"\u003Cmujoco model=\"viewer_demo\">\n",[68,109546,109547],{"class":70,"line":1510},[68,109548,102804],{"class":1742},[68,109550,109551],{"class":70,"line":1521},[68,109552,3890],{"emptyLinePlaceholder":1567},[68,109554,109555],{"class":70,"line":3103},[68,109556,102813],{"class":1742},[68,109558,109559],{"class":70,"line":3108},[68,109560,109561],{"class":1742},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[68,109563,109564],{"class":70,"line":3114},[68,109565,109566],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,109568,109569],{"class":70,"line":3119},[68,109570,3890],{"emptyLinePlaceholder":1567},[68,109572,109573],{"class":70,"line":3133},[68,109574,102827],{"class":1742},[68,109576,109577],{"class":70,"line":3138},[68,109578,102832],{"class":1742},[68,109580,109581],{"class":70,"line":3144},[68,109582,109583],{"class":1742},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,109585,109586],{"class":70,"line":3165},[68,109587,102842],{"class":1742},[68,109589,109590],{"class":70,"line":3170},[68,109591,102847],{"class":1742},[68,109593,109594],{"class":70,"line":3184},[68,109595,102852],{"class":1742},[68,109597,109598],{"class":70,"line":3189},[68,109599,97173],{"class":1742},[68,109601,109602],{"class":70,"line":3218},[68,109603,3890],{"emptyLinePlaceholder":1567},[68,109605,109606],{"class":70,"line":3223},[68,109607,3890],{"emptyLinePlaceholder":1567},[68,109609,109610,109612,109614,109616,109618],{"class":70,"line":3240},[68,109611,33431],{"class":316},[68,109613,3463],{"class":74},[68,109615,102873],{"class":78},[68,109617,97161],{"class":85},[68,109619,5229],{"class":78},[68,109621,109622,109624,109626,109628,109630],{"class":70,"line":3245},[68,109623,102882],{"class":78},[68,109625,1685],{"class":316},[68,109627,102887],{"class":78},[68,109629,102789],{"class":85},[68,109631,1646],{"class":78},[68,109633,109634,109636,109638],{"class":70,"line":3250},[68,109635,102896],{"class":78},[68,109637,1685],{"class":316},[68,109639,102901],{"class":78},[68,109641,109642],{"class":70,"line":3255},[68,109643,3890],{"emptyLinePlaceholder":1567},[68,109645,109646,109648,109650,109652],{"class":70,"line":3269},[68,109647,35662],{"class":316},[68,109649,109310],{"class":78},[68,109651,32867],{"class":316},[68,109653,109315],{"class":78},[68,109655,109656,109659,109662,109664,109667,109669,109672],{"class":70,"line":3274},[68,109657,109658],{"class":316},"        while",[68,109660,109661],{"class":78}," viewer.is_running() ",[68,109663,31946],{"class":316},[68,109665,109666],{"class":78}," data.time ",[68,109668,2537],{"class":316},[68,109670,109671],{"class":85}," 5.0",[68,109673,5229],{"class":78},[68,109675,109676,109679,109681],{"class":70,"line":4067},[68,109677,109678],{"class":78},"            step_start ",[68,109680,1685],{"class":316},[68,109682,109683],{"class":78}," time.time()\n",[68,109685,109686],{"class":70,"line":4081},[68,109687,109688],{"class":78},"            mujoco.mj_step(model, data)\n",[68,109690,109691],{"class":70,"line":4089},[68,109692,109693],{"class":78},"            viewer.sync()\n",[68,109695,109696],{"class":70,"line":4094},[68,109697,3890],{"emptyLinePlaceholder":1567},[68,109699,109700,109703,109705,109707,109709,109711,109713],{"class":70,"line":4100},[68,109701,109702],{"class":78},"            sleep_time ",[68,109704,1685],{"class":316},[68,109706,109434],{"class":78},[68,109708,2160],{"class":316},[68,109710,109439],{"class":78},[68,109712,2160],{"class":316},[68,109714,109444],{"class":78},[68,109716,109717,109719,109722,109724,109726],{"class":70,"line":4106},[68,109718,6132],{"class":316},[68,109720,109721],{"class":78}," sleep_time ",[68,109723,2587],{"class":316},[68,109725,5583],{"class":85},[68,109727,5229],{"class":78},[68,109729,109730],{"class":70,"line":4111},[68,109731,109732],{"class":78},"                time.sleep(sleep_time)\n",[68,109734,109735],{"class":70,"line":9437},[68,109736,3890],{"emptyLinePlaceholder":1567},[68,109738,109739],{"class":70,"line":9461},[68,109740,3890],{"emptyLinePlaceholder":1567},[68,109742,109743,109745,109747,109749,109751],{"class":70,"line":9466},[68,109744,3023],{"class":316},[68,109746,32704],{"class":85},[68,109748,103034],{"class":316},[68,109750,103037],{"class":1742},[68,109752,5229],{"class":78},[68,109754,109755],{"class":70,"line":9472},[68,109756,103044],{"class":78},[170,109758,105045],{},[58,109760,109762],{"className":25307,"code":109761,"language":25309,"meta":63,"style":63},"touch ch5_viewer.py\n",[65,109763,109764],{"__ignoreMap":63},[68,109765,109766,109768],{"class":70,"line":71},[68,109767,102758],{"class":74},[68,109769,109770],{"class":1742}," ch5_viewer.py\n",[170,109772,109773],{},"离屏 Renderer 保存图片:",[58,109775,109777],{"className":31862,"code":109776,"language":31864,"meta":63,"style":63},"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",[65,109778,109779,109791,109795,109801,109811,109815,109819,109827,109832,109836,109840,109844,109848,109853,109857,109861,109865,109869,109873,109877,109881,109885,109889,109893,109897,109909,109921,109929,109954,109958,109974,109978,109982,109997,110006,110010,110024,110029,110034,110038,110050,110062,110066,110070,110082],{"__ignoreMap":63},[68,109780,109781,109783,109786,109788],{"class":70,"line":71},[68,109782,32221],{"class":316},[68,109784,109785],{"class":78}," pathlib ",[68,109787,31876],{"class":316},[68,109789,109790],{"class":78}," Path\n",[68,109792,109793],{"class":70,"line":82},[68,109794,3890],{"emptyLinePlaceholder":1567},[68,109796,109797,109799],{"class":70,"line":98},[68,109798,31876],{"class":316},[68,109800,102776],{"class":78},[68,109802,109803,109805,109807,109809],{"class":70,"line":104},[68,109804,32221],{"class":316},[68,109806,48747],{"class":85},[68,109808,48750],{"class":316},[68,109810,48753],{"class":78},[68,109812,109813],{"class":70,"line":112},[68,109814,3890],{"emptyLinePlaceholder":1567},[68,109816,109817],{"class":70,"line":124},[68,109818,3890],{"emptyLinePlaceholder":1567},[68,109820,109821,109823,109825],{"class":70,"line":1496},[68,109822,102789],{"class":85},[68,109824,15052],{"class":316},[68,109826,102794],{"class":1742},[68,109828,109829],{"class":70,"line":1502},[68,109830,109831],{"class":1742},"\u003Cmujoco model=\"renderer_demo\">\n",[68,109833,109834],{"class":70,"line":1510},[68,109835,102804],{"class":1742},[68,109837,109838],{"class":70,"line":1521},[68,109839,3890],{"emptyLinePlaceholder":1567},[68,109841,109842],{"class":70,"line":3103},[68,109843,102813],{"class":1742},[68,109845,109846],{"class":70,"line":3108},[68,109847,109561],{"class":1742},[68,109849,109850],{"class":70,"line":3114},[68,109851,109852],{"class":1742},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[68,109854,109855],{"class":70,"line":3119},[68,109856,109566],{"class":1742},[68,109858,109859],{"class":70,"line":3133},[68,109860,3890],{"emptyLinePlaceholder":1567},[68,109862,109863],{"class":70,"line":3138},[68,109864,102827],{"class":1742},[68,109866,109867],{"class":70,"line":3144},[68,109868,102832],{"class":1742},[68,109870,109871],{"class":70,"line":3165},[68,109872,109583],{"class":1742},[68,109874,109875],{"class":70,"line":3170},[68,109876,102842],{"class":1742},[68,109878,109879],{"class":70,"line":3184},[68,109880,102847],{"class":1742},[68,109882,109883],{"class":70,"line":3189},[68,109884,102852],{"class":1742},[68,109886,109887],{"class":70,"line":3218},[68,109888,97173],{"class":1742},[68,109890,109891],{"class":70,"line":3223},[68,109892,3890],{"emptyLinePlaceholder":1567},[68,109894,109895],{"class":70,"line":3240},[68,109896,3890],{"emptyLinePlaceholder":1567},[68,109898,109899,109901,109903,109905,109907],{"class":70,"line":3245},[68,109900,33431],{"class":316},[68,109902,3463],{"class":74},[68,109904,102873],{"class":78},[68,109906,97161],{"class":85},[68,109908,5229],{"class":78},[68,109910,109911,109913,109915,109917,109919],{"class":70,"line":3250},[68,109912,102882],{"class":78},[68,109914,1685],{"class":316},[68,109916,102887],{"class":78},[68,109918,102789],{"class":85},[68,109920,1646],{"class":78},[68,109922,109923,109925,109927],{"class":70,"line":3255},[68,109924,102896],{"class":78},[68,109926,1685],{"class":316},[68,109928,102901],{"class":78},[68,109930,109931,109934,109936,109938,109940,109942,109944,109946,109948,109950,109952],{"class":70,"line":3269},[68,109932,109933],{"class":78},"    renderer ",[68,109935,1685],{"class":316},[68,109937,109348],{"class":78},[68,109939,26467],{"class":6705},[68,109941,1685],{"class":316},[68,109943,43826],{"class":85},[68,109945,13923],{"class":78},[68,109947,26463],{"class":6705},[68,109949,1685],{"class":316},[68,109951,109363],{"class":85},[68,109953,1646],{"class":78},[68,109955,109956],{"class":70,"line":3274},[68,109957,3890],{"emptyLinePlaceholder":1567},[68,109959,109960,109962,109964,109966,109968,109970,109972],{"class":70,"line":4067},[68,109961,4691],{"class":316},[68,109963,102976],{"class":78},[68,109965,27529],{"class":316},[68,109967,33927],{"class":85},[68,109969,1640],{"class":78},[68,109971,1940],{"class":85},[68,109973,32270],{"class":78},[68,109975,109976],{"class":70,"line":4081},[68,109977,102991],{"class":78},[68,109979,109980],{"class":70,"line":4089},[68,109981,3890],{"emptyLinePlaceholder":1567},[68,109983,109984,109987,109990,109992,109995],{"class":70,"line":4094},[68,109985,109986],{"class":78},"    renderer.update_scene(data, ",[68,109988,109989],{"class":6705},"camera",[68,109991,1685],{"class":316},[68,109993,109994],{"class":1742},"\"fixed_camera\"",[68,109996,1646],{"class":78},[68,109998,109999,110002,110004],{"class":70,"line":4100},[68,110000,110001],{"class":78},"    image ",[68,110003,1685],{"class":316},[68,110005,109059],{"class":78},[68,110007,110008],{"class":70,"line":4106},[68,110009,3890],{"emptyLinePlaceholder":1567},[68,110011,110012,110015,110017,110020,110022],{"class":70,"line":4111},[68,110013,110014],{"class":78},"    output_path ",[68,110016,1685],{"class":316},[68,110018,110019],{"class":78}," Path(",[68,110021,109489],{"class":1742},[68,110023,1646],{"class":78},[68,110025,110026],{"class":70,"line":9437},[68,110027,110028],{"class":78},"    Image.fromarray(image).save(output_path)\n",[68,110030,110031],{"class":70,"line":9461},[68,110032,110033],{"class":78},"    renderer.close()\n",[68,110035,110036],{"class":70,"line":9466},[68,110037,3890],{"emptyLinePlaceholder":1567},[68,110039,110040,110042,110044,110047],{"class":70,"line":9472},[68,110041,32783],{"class":85},[68,110043,1640],{"class":78},[68,110045,110046],{"class":1742},"\"saved:\"",[68,110048,110049],{"class":78},", output_path.resolve())\n",[68,110051,110052,110054,110056,110059],{"class":70,"line":9499},[68,110053,32783],{"class":85},[68,110055,1640],{"class":78},[68,110057,110058],{"class":1742},"\"image shape:\"",[68,110060,110061],{"class":78},", image.shape)\n",[68,110063,110064],{"class":70,"line":9504},[68,110065,3890],{"emptyLinePlaceholder":1567},[68,110067,110068],{"class":70,"line":9510},[68,110069,3890],{"emptyLinePlaceholder":1567},[68,110071,110072,110074,110076,110078,110080],{"class":70,"line":9522},[68,110073,3023],{"class":316},[68,110075,32704],{"class":85},[68,110077,103034],{"class":316},[68,110079,103037],{"class":1742},[68,110081,5229],{"class":78},[68,110083,110084],{"class":70,"line":9534},[68,110085,103044],{"class":78},[170,110087,105045],{},[58,110089,110091],{"className":25307,"code":110090,"language":25309,"meta":63,"style":63},"touch ch5_renderer.py\n",[65,110092,110093],{"__ignoreMap":63},[68,110094,110095,110097],{"class":70,"line":71},[68,110096,102758],{"class":74},[68,110098,110099],{"class":1742}," ch5_renderer.py\n",[19,110101,103047],{"id":103047},[170,110103,110104],{},"viewer 上下文：",[58,110106,110108],{"className":31862,"code":110107,"language":31864,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[65,110109,110110],{"__ignoreMap":63},[68,110111,110112,110114,110116,110118],{"class":70,"line":71},[68,110113,109307],{"class":316},[68,110115,109310],{"class":78},[68,110117,32867],{"class":316},[68,110119,109315],{"class":78},[170,110121,110122,110124],{},[65,110123,109307],{}," 语句会创建窗口，并在退出时自动清理资源。",[170,110126,110127],{},"窗口循环：",[58,110129,110131],{"className":31862,"code":110130,"language":31864,"meta":63,"style":63},"while viewer.is_running() and data.time \u003C 5.0:\n",[65,110132,110133],{"__ignoreMap":63},[68,110134,110135,110138,110140,110142,110144,110146,110148],{"class":70,"line":71},[68,110136,110137],{"class":316},"while",[68,110139,109661],{"class":78},[68,110141,31946],{"class":316},[68,110143,109666],{"class":78},[68,110145,2537],{"class":316},[68,110147,109671],{"class":85},[68,110149,5229],{"class":78},[170,110151,110152],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[170,110154,110155],{},"固定相机：",[58,110157,110159],{"className":54549,"code":110158,"language":54551,"meta":63,"style":63},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[65,110160,110161],{"__ignoreMap":63},[68,110162,110163,110165,110167,110169,110171,110173,110175,110177,110180,110183,110185,110188],{"class":70,"line":71},[68,110164,2537],{"class":78},[68,110166,109989],{"class":52784},[68,110168,16408],{"class":74},[68,110170,1685],{"class":78},[68,110172,109994],{"class":1742},[68,110174,102581],{"class":74},[68,110176,1685],{"class":78},[68,110178,110179],{"class":1742},"\"1.5 -2.0 1.2\"",[68,110181,110182],{"class":74}," xyaxes",[68,110184,1685],{"class":78},[68,110186,110187],{"class":1742},"\"1 0.75 0 0 0 1\"",[68,110189,102619],{"class":78},[170,110191,110192],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,110194,110196],{"id":110195},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[58,110198,110200],{"className":31862,"code":110199,"language":31864,"meta":63,"style":63},"import time\n",[65,110201,110202],{"__ignoreMap":63},[68,110203,110204,110206],{"class":70,"line":71},[68,110205,31876],{"class":316},[68,110207,33313],{"class":78},[170,110209,110210],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[58,110212,110214],{"className":31862,"code":110213,"language":31864,"meta":63,"style":63},"import mujoco\nimport mujoco.viewer\n",[65,110215,110216,110222],{"__ignoreMap":63},[68,110217,110218,110220],{"class":70,"line":71},[68,110219,31876],{"class":316},[68,110221,102776],{"class":78},[68,110223,110224,110226],{"class":70,"line":82},[68,110225,31876],{"class":316},[68,110227,109026],{"class":78},[170,110229,110230],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[58,110232,110233],{"className":31862,"code":110107,"language":31864,"meta":63,"style":63},[65,110234,110235],{"__ignoreMap":63},[68,110236,110237,110239,110241,110243],{"class":70,"line":71},[68,110238,109307],{"class":316},[68,110240,109310],{"class":78},[68,110242,32867],{"class":316},[68,110244,109315],{"class":78},[170,110246,110247,110248,110251],{},"打开一个 viewer 窗口。",[65,110249,110250],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[58,110253,110254],{"className":31862,"code":110130,"language":31864,"meta":63,"style":63},[65,110255,110256],{"__ignoreMap":63},[68,110257,110258,110260,110262,110264,110266,110268,110270],{"class":70,"line":71},[68,110259,110137],{"class":316},[68,110261,109661],{"class":78},[68,110263,31946],{"class":316},[68,110265,109666],{"class":78},[68,110267,2537],{"class":316},[68,110269,109671],{"class":85},[68,110271,5229],{"class":78},[170,110273,110274,110275,110278],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[65,110276,110277],{},"viewer.is_running()"," 会变成 false，循环结束。",[58,110280,110282],{"className":31862,"code":110281,"language":31864,"meta":63,"style":63},"step_start = time.time()\n",[65,110283,110284],{"__ignoreMap":63},[68,110285,110286,110289,110291],{"class":70,"line":71},[68,110287,110288],{"class":78},"step_start ",[68,110290,1685],{"class":316},[68,110292,109683],{"class":78},[170,110294,110295],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[58,110297,110298],{"className":31862,"code":109392,"language":31864,"meta":63,"style":63},[65,110299,110300,110304],{"__ignoreMap":63},[68,110301,110302],{"class":70,"line":71},[68,110303,105980],{"class":78},[68,110305,110306],{"class":70,"line":82},[68,110307,109403],{"class":78},[170,110309,110310,110312,110313,110315,110316,110318,110319,110322],{},[65,110311,102690],{}," 推进物理仿真。",[65,110314,109411],{}," 把最新的 ",[65,110317,34885],{}," 同步到窗口里显示。没有 ",[65,110320,110321],{},"sync()","，窗口可能看不到最新状态。",[58,110324,110325],{"className":31862,"code":109422,"language":31864,"meta":63,"style":63},[65,110326,110327],{"__ignoreMap":63},[68,110328,110329,110331,110333,110335,110337,110339,110341],{"class":70,"line":71},[68,110330,109429],{"class":78},[68,110332,1685],{"class":316},[68,110334,109434],{"class":78},[68,110336,2160],{"class":316},[68,110338,109439],{"class":78},[68,110340,2160],{"class":316},[68,110342,109444],{"class":78},[170,110344,110345],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[58,110347,110349],{"className":31862,"code":110348,"language":31864,"meta":63,"style":63},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[65,110350,110351,110363],{"__ignoreMap":63},[68,110352,110353,110355,110357,110359,110361],{"class":70,"line":71},[68,110354,3023],{"class":316},[68,110356,109721],{"class":78},[68,110358,2587],{"class":316},[68,110360,5583],{"class":85},[68,110362,5229],{"class":78},[68,110364,110365],{"class":70,"line":82},[68,110366,110367],{"class":78},"    time.sleep(sleep_time)\n",[170,110369,110370],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,110372,110374],{"id":110373},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[58,110376,110378],{"className":31862,"code":110377,"language":31864,"meta":63,"style":63},"from pathlib import Path\n",[65,110379,110380],{"__ignoreMap":63},[68,110381,110382,110384,110386,110388],{"class":70,"line":71},[68,110383,32221],{"class":316},[68,110385,109785],{"class":78},[68,110387,31876],{"class":316},[68,110389,109790],{"class":78},[170,110391,110392,110393,110396,110397,110400],{},"导入 ",[65,110394,110395],{},"Path","，用来处理文件路径。相比直接写字符串，",[65,110398,110399],{},"Path(\"render_output.png\")"," 更清晰。",[58,110402,110404],{"className":31862,"code":110403,"language":31864,"meta":63,"style":63},"from PIL import Image\n",[65,110405,110406],{"__ignoreMap":63},[68,110407,110408,110410,110412,110414],{"class":70,"line":71},[68,110409,32221],{"class":316},[68,110411,48747],{"class":85},[68,110413,48750],{"class":316},[68,110415,48753],{"class":78},[170,110417,110418],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[58,110420,110421],{"className":54549,"code":110158,"language":54551,"meta":63,"style":63},[65,110422,110423],{"__ignoreMap":63},[68,110424,110425,110427,110429,110431,110433,110435,110437,110439,110441,110443,110445,110447],{"class":70,"line":71},[68,110426,2537],{"class":78},[68,110428,109989],{"class":52784},[68,110430,16408],{"class":74},[68,110432,1685],{"class":78},[68,110434,109994],{"class":1742},[68,110436,102581],{"class":74},[68,110438,1685],{"class":78},[68,110440,110179],{"class":1742},[68,110442,110182],{"class":74},[68,110444,1685],{"class":78},[68,110446,110187],{"class":1742},[68,110448,102619],{"class":78},[170,110450,110451,110452,110454,110455,110457,110458,110461,110462,110464],{},"定义一个相机。",[65,110453,81287],{}," 是相机名字。",[65,110456,105621],{}," 是相机在世界里的位置。",[65,110459,110460],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[65,110463,105621],{}," 来调视角。",[58,110466,110468],{"className":31862,"code":110467,"language":31864,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[65,110469,110470],{"__ignoreMap":63},[68,110471,110472,110474,110476,110478,110480,110482,110484,110486,110488,110490,110492],{"class":70,"line":71},[68,110473,109044],{"class":78},[68,110475,1685],{"class":316},[68,110477,109348],{"class":78},[68,110479,26467],{"class":6705},[68,110481,1685],{"class":316},[68,110483,43826],{"class":85},[68,110485,13923],{"class":78},[68,110487,26463],{"class":6705},[68,110489,1685],{"class":316},[68,110491,109363],{"class":85},[68,110493,1646],{"class":78},[170,110495,110496,110497,102493,110499,110501],{},"创建离屏渲染器。",[65,110498,26467],{},[65,110500,26463],{}," 决定输出图片大小。",[58,110503,110504],{"className":31862,"code":103151,"language":31864,"meta":63,"style":63},[65,110505,110506,110522],{"__ignoreMap":63},[68,110507,110508,110510,110512,110514,110516,110518,110520],{"class":70,"line":71},[68,110509,4515],{"class":316},[68,110511,102976],{"class":78},[68,110513,27529],{"class":316},[68,110515,33927],{"class":85},[68,110517,1640],{"class":78},[68,110519,1940],{"class":85},[68,110521,32270],{"class":78},[68,110523,110524],{"class":70,"line":82},[68,110525,103174],{"class":78},[170,110527,110528],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[58,110530,110532],{"className":31862,"code":110531,"language":31864,"meta":63,"style":63},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[65,110533,110534],{"__ignoreMap":63},[68,110535,110536,110539,110541,110543,110545],{"class":70,"line":71},[68,110537,110538],{"class":78},"renderer.update_scene(data, ",[68,110540,109989],{"class":6705},[68,110542,1685],{"class":316},[68,110544,109994],{"class":1742},[68,110546,1646],{"class":78},[170,110548,110549,110550,110552,110553,110556],{},"告诉 renderer：用当前 ",[65,110551,34885],{}," 的状态更新画面，并使用名为 ",[65,110554,110555],{},"fixed_camera"," 的相机视角。",[58,110558,110559],{"className":31862,"code":109454,"language":31864,"meta":63,"style":63},[65,110560,110561],{"__ignoreMap":63},[68,110562,110563,110565,110567],{"class":70,"line":71},[68,110564,109054],{"class":78},[68,110566,1685],{"class":316},[68,110568,109059],{"class":78},[170,110570,110571,110572,110575],{},"真正渲染出图像。",[65,110573,110574],{},"image"," 是一个 NumPy 数组，不是文件。",[58,110577,110579],{"className":31862,"code":110578,"language":31864,"meta":63,"style":63},"Image.fromarray(image).save(output_path)\n",[65,110580,110581],{"__ignoreMap":63},[68,110582,110583],{"class":70,"line":71},[68,110584,110578],{"class":78},[170,110586,110587,110588,29869],{},"把数组转换成图片，并保存到 ",[65,110589,110590],{},"render_output.png",[58,110592,110594],{"className":31862,"code":110593,"language":31864,"meta":63,"style":63},"renderer.close()\n",[65,110595,110596],{"__ignoreMap":63},[68,110597,110598],{"class":70,"line":71},[68,110599,110593],{"class":78},[170,110601,110602],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110604,103791],{"id":103790},[170,110606,110607,110608,110610,110611,29869],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[65,110609,110590],{},"，并输出图像数组形状，例如 ",[65,110612,110613],{},"(480, 640, 3)",[170,110615,110616],{},"如果图片里看不到方块，先检查：",[263,110618,110619,110622,110625],{},[27,110620,110621],{},"方块是否掉到相机视野外。",[27,110623,110624],{},"camera 位置是否合理。",[27,110626,110627,110628,110631],{},"是否在 ",[65,110629,110630],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110633,103823],{"id":103822},[170,110635,110636],{},"运行 viewer:",[58,110638,110640],{"className":25307,"code":110639,"language":25309,"meta":63,"style":63},"python ch5_viewer.py\n",[65,110641,110642],{"__ignoreMap":63},[68,110643,110644,110646],{"class":70,"line":71},[68,110645,31864],{"class":74},[68,110647,109770],{"class":1742},[170,110649,110650],{},"运行 renderer:",[58,110652,110654],{"className":25307,"code":110653,"language":25309,"meta":63,"style":63},"python ch5_renderer.py\n",[65,110655,110656],{"__ignoreMap":63},[68,110657,110658,110660],{"class":70,"line":71},[68,110659,31864],{"class":74},[68,110661,110099],{"class":1742},[170,110663,110664],{},"如果在服务器上运行:",[58,110666,110668],{"className":25307,"code":110667,"language":25309,"meta":63,"style":63},"MUJOCO_GL=egl python ch5_renderer.py\n",[65,110669,110670],{"__ignoreMap":63},[68,110671,110672,110674,110676,110678,110681],{"class":70,"line":71},[68,110673,109288],{"class":78},[68,110675,1685],{"class":316},[68,110677,109278],{"class":1742},[68,110679,110680],{"class":74}," python",[68,110682,110099],{"class":1742},[170,110684,109256],{},[58,110686,110688],{"className":25307,"code":110687,"language":25309,"meta":63,"style":63},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[65,110689,110690],{"__ignoreMap":63},[68,110691,110692,110694,110696,110698,110700],{"class":70,"line":71},[68,110693,109288],{"class":78},[68,110695,1685],{"class":316},[68,110697,109282],{"class":1742},[68,110699,110680],{"class":74},[68,110701,110099],{"class":1742},[170,110703,110704],{},"再做几个练习：",[263,110706,110707,110714,110717,110723],{},[27,110708,110709,110710,110713],{},"把 renderer 分辨率改成 ",[65,110711,110712],{},"height=240, width=320","，观察输出 shape。",[27,110715,110716],{},"把方块颜色改成蓝色，重新保存图片。",[27,110718,110719,110720,110722],{},"把相机 ",[65,110721,105621],{}," 改远一点，观察画面中物体是否变小。",[27,110724,110725,110726,103889,110729,110732],{},"把 viewer 示例中的 ",[65,110727,110728],{},"data.time \u003C 5.0",[65,110730,110731],{},"data.time \u003C 20.0","，观察更长时间。",[14,110734,103928],{"id":103927},[19,110736,110738],{"id":110737},"viewer-窗口打不开","viewer 窗口打不开",[170,110740,110741],{},"安装:",[58,110743,110745],{"className":25307,"code":110744,"language":25309,"meta":63,"style":63},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[65,110746,110747],{"__ignoreMap":63},[68,110748,110749,110751,110753,110755,110757,110759,110761,110763,110765,110767,110769],{"class":70,"line":71},[68,110750,26062],{"class":74},[68,110752,27801],{"class":1742},[68,110754,25319],{"class":1742},[68,110756,27886],{"class":85},[68,110758,103981],{"class":1742},[68,110760,102309],{"class":1742},[68,110762,103986],{"class":1742},[68,110764,102322],{"class":1742},[68,110766,102328],{"class":1742},[68,110768,102319],{"class":1742},[68,110770,110771],{"class":1742}," libXinerama\n",[19,110773,110775],{"id":110774},"glfwerror",[65,110776,110777],{},"GLFWError",[170,110779,110780],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,110782,110784],{"id":110783},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[170,110786,110787,110788,1245,110790,110792],{},"尝试 ",[65,110789,102512],{},[65,110791,102515],{},"。可能存在版本差异。",[19,110794,110795],{"id":110795},"保存图片是黑的",[170,110797,104050],{},[263,110799,110800,110803,110806,110816],{},[27,110801,110802],{},"XML 里是否有 light。",[27,110804,110805],{},"相机是否对着模型。",[27,110807,110808,110809,110812,110813,29869],{},"是否先 ",[65,110810,110811],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[65,110814,110815],{},"renderer.render()",[27,110817,110818],{},"物体是否已经掉出视野。",[19,110820,110821],{"id":110821},"远程服务器没有显示器",[170,110823,110824],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[58,110826,110827],{"className":25307,"code":110667,"language":25309,"meta":63,"style":63},[65,110828,110829],{"__ignoreMap":63},[68,110830,110831,110833,110835,110837,110839],{"class":70,"line":71},[68,110832,109288],{"class":78},[68,110834,1685],{"class":316},[68,110836,109278],{"class":1742},[68,110838,110680],{"class":74},[68,110840,110099],{"class":1742},[170,110842,110843],{},"如果 EGL 不可用，再尝试：",[58,110845,110846],{"className":25307,"code":110687,"language":25309,"meta":63,"style":63},[65,110847,110848],{"__ignoreMap":63},[68,110849,110850,110852,110854,110856,110858],{"class":70,"line":71},[68,110851,109288],{"class":78},[68,110853,1685],{"class":316},[68,110855,109282],{"class":1742},[68,110857,110680],{"class":74},[68,110859,110099],{"class":1742},[14,110861,104082],{"id":104081},[170,110863,110864],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[263,110866,110867,110870,110873],{},[27,110868,110869],{},"先用 viewer 看模型和控制是否正常。",[27,110871,110872],{},"再用 renderer 保存图片或构造视觉观测。",[27,110874,110875],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1553,110877,110878],{},"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":63,"searchDepth":82,"depth":82,"links":110880},[110881,110882,110883,110888,110893,110894,110895,110902],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":110884},[110885,110886,110887],{"id":109385,"depth":98,"text":109386},{"id":109415,"depth":98,"text":109416},{"id":109450,"depth":98,"text":109451},{"id":102727,"depth":82,"text":102728,"children":110889},[110890,110891,110892],{"id":103047,"depth":98,"text":103047},{"id":110195,"depth":98,"text":110196},{"id":110373,"depth":98,"text":110374},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":110896},[110897,110898,110899,110900,110901],{"id":110737,"depth":98,"text":110738},{"id":110774,"depth":98,"text":110777},{"id":110783,"depth":98,"text":110784},{"id":110795,"depth":98,"text":110795},{"id":110821,"depth":98,"text":110821},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108993,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110909,"title":110910,"body":110911,"description":63,"extension":1565,"meta":112822,"navigation":1567,"path":112823,"seo":112824,"stem":112825,"__hash__":112826},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110912,"toc":112798},[110913,110916,110918,110921,110923,110942,110945,110951,110954,110956,110958,110982,110984,110998,111000,111041,111043,111054,111056,111059,111065,111068,111102,111105,111137,111140,111172,111176,111179,111219,111222,111228,111231,111237,111241,111244,111250,111253,111257,111260,111300,111302,111315,111318,111320,111902,111904,111916,111919,111930,111932,111935,111954,111966,111969,111990,111993,111996,112039,112042,112045,112065,112072,112074,112092,112107,112110,112116,112119,112125,112142,112149,112180,112191,112225,112236,112253,112262,112270,112275,112289,112292,112313,112319,112333,112338,112368,112378,112403,112411,112434,112437,112453,112456,112464,112470,112492,112505,112526,112535,112574,112585,112587,112590,112596,112599,112602,112608,112611,112631,112634,112636,112675,112677,112680,112688,112691,112694,112721,112724,112734,112740,112743,112749,112751,112757,112761,112764,112766,112769,112793,112796],[10,110914,110910],{"id":110915},"_6控制任务cartpole",[14,110917,102122],{"id":102121},[170,110919,110920],{},"本章搭建一个最小 Cartpole 控制任务。",[170,110922,105806],{},[263,110924,110925,110928,110930,110933,110936,110939],{},[27,110926,110927],{},"slide joint",[27,110929,107658],{},[27,110931,110932],{},"cart force actuator",[27,110934,110935],{},"状态观测",[27,110937,110938],{},"简单控制循环",[27,110940,110941],{},"reward 设计雏形",[170,110943,110944],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[58,110946,110949],{"className":110947,"code":110948,"language":6676,"meta":63},[6674],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[65,110950,110948],{"__ignoreMap":63},[170,110952,110953],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110955,102245],{"id":102244},[170,110957,102248],{},[58,110959,110960],{"className":25307,"code":105863,"language":25309,"meta":63,"style":63},[65,110961,110962],{"__ignoreMap":63},[68,110963,110964,110966,110968,110970,110972,110974,110976,110978,110980],{"class":70,"line":71},[68,110965,26062],{"class":74},[68,110967,27801],{"class":1742},[68,110969,25319],{"class":1742},[68,110971,27886],{"class":85},[68,110973,105878],{"class":1742},[68,110975,102273],{"class":1742},[68,110977,103976],{"class":1742},[68,110979,102289],{"class":1742},[68,110981,105887],{"class":1742},[170,110983,104294],{},[58,110985,110986],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},[65,110987,110988],{"__ignoreMap":63},[68,110989,110990,110992,110994,110996],{"class":70,"line":71},[68,110991,25316],{"class":74},[68,110993,25319],{"class":1742},[68,110995,102405],{"class":1742},[68,110997,102408],{"class":1742},[170,110999,104311],{},[58,111001,111003],{"className":25307,"code":111002,"language":25309,"meta":63,"style":63},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[65,111004,111005,111022,111031],{"__ignoreMap":63},[68,111006,111007,111009,111011,111013,111016,111018,111020],{"class":70,"line":71},[68,111008,31814],{"class":74},[68,111010,30660],{"class":1742},[68,111012,26601],{"class":85},[68,111014,111015],{"class":1742}," mujoco-cartpole",[68,111017,102450],{"class":1742},[68,111019,102453],{"class":85},[68,111021,102456],{"class":85},[68,111023,111024,111026,111028],{"class":70,"line":82},[68,111025,31814],{"class":74},[68,111027,102463],{"class":1742},[68,111029,111030],{"class":1742}," mujoco-cartpole\n",[68,111032,111033,111035,111037,111039],{"class":70,"line":98},[68,111034,25316],{"class":74},[68,111036,25319],{"class":1742},[68,111038,102405],{"class":1742},[68,111040,102408],{"class":1742},[170,111042,102479],{},[263,111044,111045,111048,111051],{},[27,111046,111047],{},"本章不依赖 Gymnasium。",[27,111049,111050],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[27,111052,111053],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111055,102520],{"id":102519},[170,111057,111058],{},"Cartpole 的模型结构:",[58,111060,111063],{"className":111061,"code":111062,"language":6676,"meta":63},[6674],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[65,111064,111062],{"__ignoreMap":63},[170,111066,111067],{},"小车通过 slide joint 左右移动:",[58,111069,111071],{"className":54549,"code":111070,"language":54551,"meta":63,"style":63},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[65,111072,111073],{"__ignoreMap":63},[68,111074,111075,111077,111079,111081,111083,111086,111088,111090,111093,111095,111097,111100],{"class":70,"line":71},[68,111076,2537],{"class":78},[68,111078,104431],{"class":52784},[68,111080,16408],{"class":74},[68,111082,1685],{"class":78},[68,111084,111085],{"class":1742},"\"cart_x\"",[68,111087,55305],{"class":74},[68,111089,1685],{"class":78},[68,111091,111092],{"class":1742},"\"slide\"",[68,111094,107502],{"class":74},[68,111096,1685],{"class":78},[68,111098,111099],{"class":1742},"\"1 0 0\"",[68,111101,102619],{"class":78},[170,111103,111104],{},"杆子通过 hinge joint 旋转:",[58,111106,111108],{"className":54549,"code":111107,"language":54551,"meta":63,"style":63},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,111109,111110],{"__ignoreMap":63},[68,111111,111112,111114,111116,111118,111120,111123,111125,111127,111129,111131,111133,111135],{"class":70,"line":71},[68,111113,2537],{"class":78},[68,111115,104431],{"class":52784},[68,111117,16408],{"class":74},[68,111119,1685],{"class":78},[68,111121,111122],{"class":1742},"\"pole_hinge\"",[68,111124,55305],{"class":74},[68,111126,1685],{"class":78},[68,111128,107493],{"class":1742},[68,111130,107502],{"class":74},[68,111132,1685],{"class":78},[68,111134,107507],{"class":1742},[68,111136,102619],{"class":78},[170,111138,111139],{},"控制力作用在小车 slide joint 上:",[58,111141,111143],{"className":54549,"code":111142,"language":54551,"meta":63,"style":63},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[65,111144,111145],{"__ignoreMap":63},[68,111146,111147,111149,111151,111153,111155,111158,111160,111162,111164,111166,111168,111170],{"class":70,"line":71},[68,111148,2537],{"class":78},[68,111150,107548],{"class":52784},[68,111152,16408],{"class":74},[68,111154,1685],{"class":78},[68,111156,111157],{"class":1742},"\"cart_motor\"",[68,111159,107558],{"class":74},[68,111161,1685],{"class":78},[68,111163,111085],{"class":1742},[68,111165,107565],{"class":74},[68,111167,1685],{"class":78},[68,111169,55797],{"class":1742},[68,111171,102619],{"class":78},[19,111173,111175],{"id":111174},"cartpole-的状态是什么","Cartpole 的状态是什么",[170,111177,111178],{},"这个简化模型有两个关节：",[128,111180,111181,111192],{},[131,111182,111183],{},[134,111184,111185,111187,111189],{},[137,111186,104234],{"align":92},[137,111188,25222],{"align":92},[137,111190,111191],{"align":92},"对应状态",[144,111193,111194,111207],{},[134,111195,111196,111201,111204],{},[149,111197,111198],{"align":92},[65,111199,111200],{},"cart_x",[149,111202,111203],{"align":92},"slide",[149,111205,111206],{"align":92},"小车 x 位置",[134,111208,111209,111214,111216],{},[149,111210,111211],{"align":92},[65,111212,111213],{},"pole_hinge",[149,111215,107314],{"align":92},[149,111217,111218],{"align":92},"杆子角度",[170,111220,111221],{},"所以：",[58,111223,111226],{"className":111224,"code":111225,"language":6676,"meta":63},[6674],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[65,111227,111225],{"__ignoreMap":63},[170,111229,111230],{},"把它们拼起来就是观测：",[58,111232,111235],{"className":111233,"code":111234,"language":6676,"meta":63},[6674],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,111236,111234],{"__ignoreMap":63},[19,111238,111240],{"id":111239},"action-是什么","action 是什么",[170,111242,111243],{},"本章只有一个 actuator：",[58,111245,111248],{"className":111246,"code":111247,"language":6676,"meta":63},[6674],"data.ctrl[0] = action\n",[65,111249,111247],{"__ignoreMap":63},[170,111251,111252],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,111254,111256],{"id":111255},"reward-是什么","reward 是什么",[170,111258,111259],{},"奖励函数：",[58,111261,111263],{"className":31862,"code":111262,"language":31864,"meta":63,"style":63},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[65,111264,111265],{"__ignoreMap":63},[68,111266,111267,111269,111272,111274,111276,111278,111281,111283,111286,111288,111290,111292,111295,111297],{"class":70,"line":71},[68,111268,18533],{"class":316},[68,111270,111271],{"class":85}," float",[68,111273,1640],{"class":78},[68,111275,103878],{"class":85},[68,111277,53753],{"class":316},[68,111279,111280],{"class":85}," 0.1",[68,111282,8007],{"class":316},[68,111284,111285],{"class":78}," cart_x ",[68,111287,2083],{"class":316},[68,111289,111285],{"class":78},[68,111291,2160],{"class":316},[68,111293,111294],{"class":78}," pole_angle ",[68,111296,2083],{"class":316},[68,111298,111299],{"class":78}," pole_angle)\n",[170,111301,107700],{},[263,111303,111304,111309,111312],{},[27,111305,111306,111307,29869],{},"基础奖励是 ",[65,111308,103878],{},[27,111310,111311],{},"小车离中心越远，扣分越多。",[27,111313,111314],{},"杆子角度越大，扣分越多。",[170,111316,111317],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111319,102728],{"id":102727},[58,111321,111323],{"className":31862,"code":111322,"language":31864,"meta":63,"style":63},"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",[65,111324,111325,111331,111341,111345,111349,111357,111362,111366,111370,111374,111379,111383,111388,111393,111398,111402,111407,111412,111417,111421,111425,111429,111433,111437,111442,111446,111450,111454,111458,111462,111472,111479,111483,111487,111501,111515,111528,111558,111562,111566,111578,111590,111598,111602,111615,111619,111623,111632,111636,111652,111662,111675,111688,111692,111715,111733,111737,111749,111753,111757,111767,111777,111781,111797,111838,111842,111862,111878,111882,111886,111898],{"__ignoreMap":63},[68,111326,111327,111329],{"class":70,"line":71},[68,111328,31876],{"class":316},[68,111330,102776],{"class":78},[68,111332,111333,111335,111337,111339],{"class":70,"line":82},[68,111334,31876],{"class":316},[68,111336,32864],{"class":78},[68,111338,32867],{"class":316},[68,111340,32870],{"class":78},[68,111342,111343],{"class":70,"line":98},[68,111344,3890],{"emptyLinePlaceholder":1567},[68,111346,111347],{"class":70,"line":104},[68,111348,3890],{"emptyLinePlaceholder":1567},[68,111350,111351,111353,111355],{"class":70,"line":112},[68,111352,102789],{"class":85},[68,111354,15052],{"class":316},[68,111356,102794],{"class":1742},[68,111358,111359],{"class":70,"line":124},[68,111360,111361],{"class":1742},"\u003Cmujoco model=\"cartpole\">\n",[68,111363,111364],{"class":70,"line":1496},[68,111365,102804],{"class":1742},[68,111367,111368],{"class":70,"line":1502},[68,111369,3890],{"emptyLinePlaceholder":1567},[68,111371,111372],{"class":70,"line":1510},[68,111373,102813],{"class":1742},[68,111375,111376],{"class":70,"line":1521},[68,111377,111378],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,111380,111381],{"class":70,"line":3103},[68,111382,3890],{"emptyLinePlaceholder":1567},[68,111384,111385],{"class":70,"line":3108},[68,111386,111387],{"class":1742},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[68,111389,111390],{"class":70,"line":3114},[68,111391,111392],{"class":1742},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[68,111394,111395],{"class":70,"line":3119},[68,111396,111397],{"class":1742},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[68,111399,111400],{"class":70,"line":3133},[68,111401,3890],{"emptyLinePlaceholder":1567},[68,111403,111404],{"class":70,"line":3138},[68,111405,111406],{"class":1742},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[68,111408,111409],{"class":70,"line":3144},[68,111410,111411],{"class":1742},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[68,111413,111414],{"class":70,"line":3165},[68,111415,111416],{"class":1742},"        \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",[68,111418,111419],{"class":70,"line":3170},[68,111420,107912],{"class":1742},[68,111422,111423],{"class":70,"line":3184},[68,111424,102842],{"class":1742},[68,111426,111427],{"class":70,"line":3189},[68,111428,102847],{"class":1742},[68,111430,111431],{"class":70,"line":3218},[68,111432,3890],{"emptyLinePlaceholder":1567},[68,111434,111435],{"class":70,"line":3223},[68,111436,107929],{"class":1742},[68,111438,111439],{"class":70,"line":3240},[68,111440,111441],{"class":1742},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,111443,111444],{"class":70,"line":3245},[68,111445,107939],{"class":1742},[68,111447,111448],{"class":70,"line":3250},[68,111449,102852],{"class":1742},[68,111451,111452],{"class":70,"line":3255},[68,111453,97173],{"class":1742},[68,111455,111456],{"class":70,"line":3269},[68,111457,3890],{"emptyLinePlaceholder":1567},[68,111459,111460],{"class":70,"line":3274},[68,111461,3890],{"emptyLinePlaceholder":1567},[68,111463,111464,111466,111469],{"class":70,"line":4067},[68,111465,33431],{"class":316},[68,111467,111468],{"class":74}," get_observation",[68,111470,111471],{"class":78},"(data: mujoco.MjData) -> np.ndarray:\n",[68,111473,111474,111476],{"class":70,"line":4081},[68,111475,5580],{"class":316},[68,111477,111478],{"class":78}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[68,111480,111481],{"class":70,"line":4089},[68,111482,3890],{"emptyLinePlaceholder":1567},[68,111484,111485],{"class":70,"line":4094},[68,111486,3890],{"emptyLinePlaceholder":1567},[68,111488,111489,111491,111494,111497,111499],{"class":70,"line":4100},[68,111490,33431],{"class":316},[68,111492,111493],{"class":74}," compute_reward",[68,111495,111496],{"class":78},"(obs: np.ndarray) -> ",[68,111498,1679],{"class":85},[68,111500,5229],{"class":78},[68,111502,111503,111506,111508,111511,111513],{"class":70,"line":4106},[68,111504,111505],{"class":78},"    cart_x ",[68,111507,1685],{"class":316},[68,111509,111510],{"class":78}," obs[",[68,111512,1248],{"class":85},[68,111514,34730],{"class":78},[68,111516,111517,111520,111522,111524,111526],{"class":70,"line":4111},[68,111518,111519],{"class":78},"    pole_angle ",[68,111521,1685],{"class":316},[68,111523,111510],{"class":78},[68,111525,1846],{"class":85},[68,111527,34730],{"class":78},[68,111529,111530,111532,111534,111536,111538,111540,111542,111544,111546,111548,111550,111552,111554,111556],{"class":70,"line":9437},[68,111531,5580],{"class":316},[68,111533,111271],{"class":85},[68,111535,1640],{"class":78},[68,111537,103878],{"class":85},[68,111539,53753],{"class":316},[68,111541,111280],{"class":85},[68,111543,8007],{"class":316},[68,111545,111285],{"class":78},[68,111547,2083],{"class":316},[68,111549,111285],{"class":78},[68,111551,2160],{"class":316},[68,111553,111294],{"class":78},[68,111555,2083],{"class":316},[68,111557,111299],{"class":78},[68,111559,111560],{"class":70,"line":9461},[68,111561,3890],{"emptyLinePlaceholder":1567},[68,111563,111564],{"class":70,"line":9466},[68,111565,3890],{"emptyLinePlaceholder":1567},[68,111567,111568,111570,111572,111574,111576],{"class":70,"line":9472},[68,111569,33431],{"class":316},[68,111571,3463],{"class":74},[68,111573,102873],{"class":78},[68,111575,97161],{"class":85},[68,111577,5229],{"class":78},[68,111579,111580,111582,111584,111586,111588],{"class":70,"line":9499},[68,111581,102882],{"class":78},[68,111583,1685],{"class":316},[68,111585,102887],{"class":78},[68,111587,102789],{"class":85},[68,111589,1646],{"class":78},[68,111591,111592,111594,111596],{"class":70,"line":9504},[68,111593,102896],{"class":78},[68,111595,1685],{"class":316},[68,111597,102901],{"class":78},[68,111599,111600],{"class":70,"line":9510},[68,111601,3890],{"emptyLinePlaceholder":1567},[68,111603,111604,111606,111608,111610,111612],{"class":70,"line":9522},[68,111605,106543],{"class":78},[68,111607,1846],{"class":85},[68,111609,5933],{"class":78},[68,111611,1685],{"class":316},[68,111613,111614],{"class":85}," 0.1\n",[68,111616,111617],{"class":70,"line":9534},[68,111618,106556],{"class":78},[68,111620,111621],{"class":70,"line":9546},[68,111622,3890],{"emptyLinePlaceholder":1567},[68,111624,111625,111628,111630],{"class":70,"line":11204},[68,111626,111627],{"class":78},"    total_reward ",[68,111629,1685],{"class":316},[68,111631,106235],{"class":85},[68,111633,111634],{"class":70,"line":11229},[68,111635,3890],{"emptyLinePlaceholder":1567},[68,111637,111638,111640,111642,111644,111646,111648,111650],{"class":70,"line":11252},[68,111639,4691],{"class":316},[68,111641,33100],{"class":78},[68,111643,27529],{"class":316},[68,111645,33927],{"class":85},[68,111647,1640],{"class":78},[68,111649,7899],{"class":85},[68,111651,32270],{"class":78},[68,111653,111654,111657,111659],{"class":70,"line":11276},[68,111655,111656],{"class":78},"        obs ",[68,111658,1685],{"class":316},[68,111660,111661],{"class":78}," get_observation(data)\n",[68,111663,111664,111667,111669,111671,111673],{"class":70,"line":11281},[68,111665,111666],{"class":78},"        pole_angle ",[68,111668,1685],{"class":316},[68,111670,111510],{"class":78},[68,111672,1846],{"class":85},[68,111674,34730],{"class":78},[68,111676,111677,111680,111682,111684,111686],{"class":70,"line":11286},[68,111678,111679],{"class":78},"        pole_angular_velocity ",[68,111681,1685],{"class":316},[68,111683,111510],{"class":78},[68,111685,1709],{"class":85},[68,111687,34730],{"class":78},[68,111689,111690],{"class":70,"line":11291},[68,111691,3890],{"emptyLinePlaceholder":1567},[68,111693,111694,111697,111699,111702,111704,111706,111708,111710,111712],{"class":70,"line":11300},[68,111695,111696],{"class":78},"        action ",[68,111698,1685],{"class":316},[68,111700,111701],{"class":85}," 2.0",[68,111703,8007],{"class":316},[68,111705,111294],{"class":78},[68,111707,2109],{"class":316},[68,111709,63345],{"class":85},[68,111711,8007],{"class":316},[68,111713,111714],{"class":78}," pole_angular_velocity\n",[68,111716,111717,111719,111721,111723,111725,111727,111729,111731],{"class":70,"line":11305},[68,111718,111696],{"class":78},[68,111720,1685],{"class":316},[68,111722,108921],{"class":78},[68,111724,2160],{"class":316},[68,111726,103878],{"class":85},[68,111728,13923],{"class":78},[68,111730,103878],{"class":85},[68,111732,1646],{"class":78},[68,111734,111735],{"class":70,"line":11311},[68,111736,3890],{"emptyLinePlaceholder":1567},[68,111738,111739,111741,111743,111745,111747],{"class":70,"line":11332},[68,111740,108091],{"class":78},[68,111742,1248],{"class":85},[68,111744,5933],{"class":78},[68,111746,1685],{"class":316},[68,111748,108944],{"class":78},[68,111750,111751],{"class":70,"line":11338},[68,111752,102991],{"class":78},[68,111754,111755],{"class":70,"line":11352},[68,111756,3890],{"emptyLinePlaceholder":1567},[68,111758,111759,111762,111764],{"class":70,"line":11358},[68,111760,111761],{"class":78},"        reward ",[68,111763,1685],{"class":316},[68,111765,111766],{"class":78}," compute_reward(get_observation(data))\n",[68,111768,111769,111772,111774],{"class":70,"line":11385},[68,111770,111771],{"class":78},"        total_reward ",[68,111773,10965],{"class":316},[68,111775,111776],{"class":78}," reward\n",[68,111778,111779],{"class":70,"line":11394},[68,111780,3890],{"emptyLinePlaceholder":1567},[68,111782,111783,111785,111787,111789,111791,111793,111795],{"class":70,"line":11400},[68,111784,3987],{"class":316},[68,111786,33100],{"class":78},[68,111788,1957],{"class":316},[68,111790,7243],{"class":85},[68,111792,103034],{"class":316},[68,111794,5583],{"class":85},[68,111796,5229],{"class":78},[68,111798,111799,111801,111803,111806,111809,111812,111815,111817,111820,111823,111825,111827,111829,111831,111834,111836],{"class":70,"line":11408},[68,111800,36134],{"class":85},[68,111802,1640],{"class":78},[68,111804,111805],{"class":1742},"\"step:\"",[68,111807,111808],{"class":78},", step, ",[68,111810,111811],{"class":1742},"\"obs:\"",[68,111813,111814],{"class":78},", np.round(obs, ",[68,111816,1709],{"class":85},[68,111818,111819],{"class":78},"), ",[68,111821,111822],{"class":1742},"\"action:\"",[68,111824,13923],{"class":78},[68,111826,33502],{"class":85},[68,111828,1640],{"class":78},[68,111830,1679],{"class":85},[68,111832,111833],{"class":78},"(action), ",[68,111835,1709],{"class":85},[68,111837,31981],{"class":78},[68,111839,111840],{"class":70,"line":11413},[68,111841,3890],{"emptyLinePlaceholder":1567},[68,111843,111844,111846,111848,111851,111853,111855,111858,111860],{"class":70,"line":18091},[68,111845,32783],{"class":85},[68,111847,1640],{"class":78},[68,111849,111850],{"class":1742},"\"total_reward:\"",[68,111852,13923],{"class":78},[68,111854,33502],{"class":85},[68,111856,111857],{"class":78},"(total_reward, ",[68,111859,1709],{"class":85},[68,111861,31981],{"class":78},[68,111863,111864,111866,111868,111871,111874,111876],{"class":70,"line":18097},[68,111865,32783],{"class":85},[68,111867,1640],{"class":78},[68,111869,111870],{"class":1742},"\"final obs:\"",[68,111872,111873],{"class":78},", np.round(get_observation(data), ",[68,111875,1709],{"class":85},[68,111877,31981],{"class":78},[68,111879,111880],{"class":70,"line":18120},[68,111881,3890],{"emptyLinePlaceholder":1567},[68,111883,111884],{"class":70,"line":18126},[68,111885,3890],{"emptyLinePlaceholder":1567},[68,111887,111888,111890,111892,111894,111896],{"class":70,"line":18149},[68,111889,3023],{"class":316},[68,111891,32704],{"class":85},[68,111893,103034],{"class":316},[68,111895,103037],{"class":1742},[68,111897,5229],{"class":78},[68,111899,111900],{"class":70,"line":18163},[68,111901,103044],{"class":78},[170,111903,105045],{},[58,111905,111907],{"className":25307,"code":111906,"language":25309,"meta":63,"style":63},"touch ch6_cartpole.py\n",[65,111908,111909],{"__ignoreMap":63},[68,111910,111911,111913],{"class":70,"line":71},[68,111912,102758],{"class":74},[68,111914,111915],{"class":1742}," ch6_cartpole.py\n",[170,111917,111918],{},"运行：",[58,111920,111922],{"className":25307,"code":111921,"language":25309,"meta":63,"style":63},"python ch6_cartpole.py\n",[65,111923,111924],{"__ignoreMap":63},[68,111925,111926,111928],{"class":70,"line":71},[68,111927,31864],{"class":74},[68,111929,111915],{"class":1742},[19,111931,103047],{"id":103047},[170,111933,111934],{},"构造观测：",[58,111936,111938],{"className":31862,"code":111937,"language":31864,"meta":63,"style":63},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[65,111939,111940,111948],{"__ignoreMap":63},[68,111941,111942,111944,111946],{"class":70,"line":71},[68,111943,33431],{"class":316},[68,111945,111468],{"class":74},[68,111947,111471],{"class":78},[68,111949,111950,111952],{"class":70,"line":82},[68,111951,5580],{"class":316},[68,111953,111478],{"class":78},[170,111955,111956,111959,111960,111962,111963,111965],{},[65,111957,111958],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[65,111961,105505],{}," 2 维，",[65,111964,105835],{}," 2 维，所以 obs 是 4 维。",[170,111967,111968],{},"设置初始角度：",[58,111970,111972],{"className":31862,"code":111971,"language":31864,"meta":63,"style":63},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[65,111973,111974,111986],{"__ignoreMap":63},[68,111975,111976,111978,111980,111982,111984],{"class":70,"line":71},[68,111977,106173],{"class":78},[68,111979,1846],{"class":85},[68,111981,5933],{"class":78},[68,111983,1685],{"class":316},[68,111985,111614],{"class":85},[68,111987,111988],{"class":70,"line":82},[68,111989,106018],{"class":78},[170,111991,111992],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[170,111994,111995],{},"简单反馈控制：",[58,111997,111999],{"className":31862,"code":111998,"language":31864,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[65,112000,112001,112021],{"__ignoreMap":63},[68,112002,112003,112005,112007,112009,112011,112013,112015,112017,112019],{"class":70,"line":71},[68,112004,108916],{"class":78},[68,112006,1685],{"class":316},[68,112008,111701],{"class":85},[68,112010,8007],{"class":316},[68,112012,111294],{"class":78},[68,112014,2109],{"class":316},[68,112016,63345],{"class":85},[68,112018,8007],{"class":316},[68,112020,111714],{"class":78},[68,112022,112023,112025,112027,112029,112031,112033,112035,112037],{"class":70,"line":82},[68,112024,108916],{"class":78},[68,112026,1685],{"class":316},[68,112028,108921],{"class":78},[68,112030,2160],{"class":316},[68,112032,103878],{"class":85},[68,112034,13923],{"class":78},[68,112036,103878],{"class":85},[68,112038,1646],{"class":78},[170,112040,112041],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[170,112043,112044],{},"限制动作：",[58,112046,112048],{"className":31862,"code":112047,"language":31864,"meta":63,"style":63},"np.clip(action, -1.0, 1.0)\n",[65,112049,112050],{"__ignoreMap":63},[68,112051,112052,112055,112057,112059,112061,112063],{"class":70,"line":71},[68,112053,112054],{"class":78},"np.clip(action, ",[68,112056,2160],{"class":316},[68,112058,103878],{"class":85},[68,112060,13923],{"class":78},[68,112062,103878],{"class":85},[68,112064,1646],{"class":78},[170,112066,112067,112068,112071],{},"因为 XML 里 ",[65,112069,112070],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,112073,103183],{"id":103183},[58,112075,112076],{"className":31862,"code":111937,"language":31864,"meta":63,"style":63},[65,112077,112078,112086],{"__ignoreMap":63},[68,112079,112080,112082,112084],{"class":70,"line":71},[68,112081,33431],{"class":316},[68,112083,111468],{"class":74},[68,112085,111471],{"class":78},[68,112087,112088,112090],{"class":70,"line":82},[68,112089,5580],{"class":316},[68,112091,111478],{"class":78},[170,112093,112094,112095,112098,112099,112102,112103,112106],{},"这段定义了一个函数，用来获取当前观测。",[65,112096,112097],{},"data.qpos.copy()"," 是位置数组副本，",[65,112100,112101],{},"data.qvel.copy()"," 是速度数组副本。",[65,112104,112105],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[170,112108,112109],{},"在本章模型里：",[58,112111,112114],{"className":112112,"code":112113,"language":6676,"meta":63},[6674],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[65,112115,112113],{"__ignoreMap":63},[170,112117,112118],{},"所以返回的 obs 是：",[58,112120,112123],{"className":112121,"code":112122,"language":6676,"meta":63},[6674],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[65,112124,112122],{"__ignoreMap":63},[58,112126,112128],{"className":31862,"code":112127,"language":31864,"meta":63,"style":63},"def compute_reward(obs: np.ndarray) -> float:\n",[65,112129,112130],{"__ignoreMap":63},[68,112131,112132,112134,112136,112138,112140],{"class":70,"line":71},[68,112133,33431],{"class":316},[68,112135,111493],{"class":74},[68,112137,111496],{"class":78},[68,112139,1679],{"class":85},[68,112141,5229],{"class":78},[170,112143,112144,112145,112148],{},"这行定义奖励函数。输入是观测 ",[65,112146,112147],{},"obs","，输出是一个浮点数奖励。",[58,112150,112152],{"className":31862,"code":112151,"language":31864,"meta":63,"style":63},"cart_x = obs[0]\npole_angle = obs[1]\n",[65,112153,112154,112167],{"__ignoreMap":63},[68,112155,112156,112159,112161,112163,112165],{"class":70,"line":71},[68,112157,112158],{"class":78},"cart_x ",[68,112160,1685],{"class":316},[68,112162,111510],{"class":78},[68,112164,1248],{"class":85},[68,112166,34730],{"class":78},[68,112168,112169,112172,112174,112176,112178],{"class":70,"line":82},[68,112170,112171],{"class":78},"pole_angle ",[68,112173,1685],{"class":316},[68,112175,111510],{"class":78},[68,112177,1846],{"class":85},[68,112179,34730],{"class":78},[170,112181,112182,112183,112186,112187,112190],{},"数组索引从 0 开始。",[65,112184,112185],{},"obs[0]"," 是第一个元素，也就是小车位置。",[65,112188,112189],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[58,112192,112193],{"className":31862,"code":111262,"language":31864,"meta":63,"style":63},[65,112194,112195],{"__ignoreMap":63},[68,112196,112197,112199,112201,112203,112205,112207,112209,112211,112213,112215,112217,112219,112221,112223],{"class":70,"line":71},[68,112198,18533],{"class":316},[68,112200,111271],{"class":85},[68,112202,1640],{"class":78},[68,112204,103878],{"class":85},[68,112206,53753],{"class":316},[68,112208,111280],{"class":85},[68,112210,8007],{"class":316},[68,112212,111285],{"class":78},[68,112214,2083],{"class":316},[68,112216,111285],{"class":78},[68,112218,2160],{"class":316},[68,112220,111294],{"class":78},[68,112222,2083],{"class":316},[68,112224,111299],{"class":78},[170,112226,112227,112228,112231,112232,112235],{},"这行计算奖励。",[65,112229,112230],{},"cart_x * cart_x"," 是小车位置的平方，",[65,112233,112234],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[58,112237,112239],{"className":31862,"code":112238,"language":31864,"meta":63,"style":63},"data.qpos[1] = 0.1\n",[65,112240,112241],{"__ignoreMap":63},[68,112242,112243,112245,112247,112249,112251],{"class":70,"line":71},[68,112244,106173],{"class":78},[68,112246,1846],{"class":85},[68,112248,5933],{"class":78},[68,112250,1685],{"class":316},[68,112252,111614],{"class":85},[170,112254,112255,112256,112258,112259,112261],{},"手动设置杆子的初始角度。因为 ",[65,112257,106930],{}," 是小车位置，",[65,112260,106933],{}," 是杆子角度，所以这里改的是杆子。",[58,112263,112264],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},[65,112265,112266],{"__ignoreMap":63},[68,112267,112268],{"class":70,"line":71},[68,112269,106018],{"class":78},[170,112271,106976,112272,112274],{},[65,112273,105505],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[58,112276,112278],{"className":31862,"code":112277,"language":31864,"meta":63,"style":63},"total_reward = 0.0\n",[65,112279,112280],{"__ignoreMap":63},[68,112281,112282,112285,112287],{"class":70,"line":71},[68,112283,112284],{"class":78},"total_reward ",[68,112286,1685],{"class":316},[68,112288,106235],{"class":85},[170,112290,112291],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[58,112293,112295],{"className":31862,"code":112294,"language":31864,"meta":63,"style":63},"for step in range(1000):\n",[65,112296,112297],{"__ignoreMap":63},[68,112298,112299,112301,112303,112305,112307,112309,112311],{"class":70,"line":71},[68,112300,4515],{"class":316},[68,112302,33100],{"class":78},[68,112304,27529],{"class":316},[68,112306,33927],{"class":85},[68,112308,1640],{"class":78},[68,112310,7899],{"class":85},[68,112312,32270],{"class":78},[170,112314,112315,112316,112318],{},"循环 1000 步。",[65,112317,108608],{}," 是当前步数，从 0 到 999。",[58,112320,112322],{"className":31862,"code":112321,"language":31864,"meta":63,"style":63},"obs = get_observation(data)\n",[65,112323,112324],{"__ignoreMap":63},[68,112325,112326,112329,112331],{"class":70,"line":71},[68,112327,112328],{"class":78},"obs ",[68,112330,1685],{"class":316},[68,112332,111661],{"class":78},[170,112334,112335,112336,29869],{},"读取当前状态，保存到 ",[65,112337,112147],{},[58,112339,112341],{"className":31862,"code":112340,"language":31864,"meta":63,"style":63},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[65,112342,112343,112355],{"__ignoreMap":63},[68,112344,112345,112347,112349,112351,112353],{"class":70,"line":71},[68,112346,112171],{"class":78},[68,112348,1685],{"class":316},[68,112350,111510],{"class":78},[68,112352,1846],{"class":85},[68,112354,34730],{"class":78},[68,112356,112357,112360,112362,112364,112366],{"class":70,"line":82},[68,112358,112359],{"class":78},"pole_angular_velocity ",[68,112361,1685],{"class":316},[68,112363,111510],{"class":78},[68,112365,1709],{"class":85},[68,112367,34730],{"class":78},[170,112369,112370,112371,112374,112375,29869],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[65,112372,112373],{},"obs[3]","？因为 obs 的顺序是 ",[65,112376,112377],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[58,112379,112381],{"className":31862,"code":112380,"language":31864,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[65,112382,112383],{"__ignoreMap":63},[68,112384,112385,112387,112389,112391,112393,112395,112397,112399,112401],{"class":70,"line":71},[68,112386,108916],{"class":78},[68,112388,1685],{"class":316},[68,112390,111701],{"class":85},[68,112392,8007],{"class":316},[68,112394,111294],{"class":78},[68,112396,2109],{"class":316},[68,112398,63345],{"class":85},[68,112400,8007],{"class":316},[68,112402,111714],{"class":78},[170,112404,112405,112406,102493,112408,112410],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[65,112407,106734],{},[65,112409,36813],{}," 是人为设置的系数，不是固定公式。",[58,112412,112414],{"className":31862,"code":112413,"language":31864,"meta":63,"style":63},"action = np.clip(action, -1.0, 1.0)\n",[65,112415,112416],{"__ignoreMap":63},[68,112417,112418,112420,112422,112424,112426,112428,112430,112432],{"class":70,"line":71},[68,112419,108916],{"class":78},[68,112421,1685],{"class":316},[68,112423,108921],{"class":78},[68,112425,2160],{"class":316},[68,112427,103878],{"class":85},[68,112429,13923],{"class":78},[68,112431,103878],{"class":85},[68,112433,1646],{"class":78},[170,112435,112436],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[58,112438,112439],{"className":31862,"code":111247,"language":31864,"meta":63,"style":63},[65,112440,112441],{"__ignoreMap":63},[68,112442,112443,112445,112447,112449,112451],{"class":70,"line":71},[68,112444,107345],{"class":78},[68,112446,1248],{"class":85},[68,112448,5933],{"class":78},[68,112450,1685],{"class":316},[68,112452,108944],{"class":78},[170,112454,112455],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[58,112457,112458],{"className":31862,"code":105980,"language":31864,"meta":63,"style":63},[65,112459,112460],{"__ignoreMap":63},[68,112461,112462],{"class":70,"line":71},[68,112463,105980],{"class":78},[170,112465,112466,112467,112469],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[65,112468,107600],{}," 计算小车和杆子的下一刻状态。",[58,112471,112473],{"className":31862,"code":112472,"language":31864,"meta":63,"style":63},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[65,112474,112475,112484],{"__ignoreMap":63},[68,112476,112477,112480,112482],{"class":70,"line":71},[68,112478,112479],{"class":78},"reward ",[68,112481,1685],{"class":316},[68,112483,111766],{"class":78},[68,112485,112486,112488,112490],{"class":70,"line":82},[68,112487,112284],{"class":78},[68,112489,10965],{"class":316},[68,112491,111776],{"class":78},[170,112493,112494,112495,112497,112498,112501,112502,29869],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[65,112496,10965],{}," 是简写，",[65,112499,112500],{},"total_reward += reward"," 等价于 ",[65,112503,112504],{},"total_reward = total_reward + reward",[58,112506,112508],{"className":31862,"code":112507,"language":31864,"meta":63,"style":63},"if step % 100 == 0:\n",[65,112509,112510],{"__ignoreMap":63},[68,112511,112512,112514,112516,112518,112520,112522,112524],{"class":70,"line":71},[68,112513,3023],{"class":316},[68,112515,33100],{"class":78},[68,112517,1957],{"class":316},[68,112519,7243],{"class":85},[68,112521,103034],{"class":316},[68,112523,5583],{"class":85},[68,112525,5229],{"class":78},[170,112527,112528,112530,112531,112534],{},[65,112529,1957],{}," 是取余数。",[65,112532,112533],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[58,112536,112538],{"className":31862,"code":112537,"language":31864,"meta":63,"style":63},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[65,112539,112540],{"__ignoreMap":63},[68,112541,112542,112544,112546,112548,112550,112552,112554,112556,112558,112560,112562,112564,112566,112568,112570,112572],{"class":70,"line":71},[68,112543,31899],{"class":85},[68,112545,1640],{"class":78},[68,112547,111805],{"class":1742},[68,112549,111808],{"class":78},[68,112551,111811],{"class":1742},[68,112553,111814],{"class":78},[68,112555,1709],{"class":85},[68,112557,111819],{"class":78},[68,112559,111822],{"class":1742},[68,112561,13923],{"class":78},[68,112563,33502],{"class":85},[68,112565,1640],{"class":78},[68,112567,1679],{"class":85},[68,112569,111833],{"class":78},[68,112571,1709],{"class":85},[68,112573,31981],{"class":78},[170,112575,112576,112577,112580,112581,112584],{},"打印当前步数、观测和动作。",[65,112578,112579],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[65,112582,112583],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112586,103791],{"id":103790},[170,112588,112589],{},"观测向量:",[58,112591,112594],{"className":112592,"code":112593,"language":6676,"meta":63},[6674],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,112595,112593],{"__ignoreMap":63},[170,112597,112598],{},"控制器是教学用的简单线性反馈，不保证最优。",[170,112600,112601],{},"每隔 100 步会打印一次：",[58,112603,112606],{"className":112604,"code":112605,"language":6676,"meta":63},[6674],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[65,112607,112605],{"__ignoreMap":63},[170,112609,112610],{},"重点观察：",[263,112612,112613,112619,112624],{},[27,112614,112615,112618],{},[65,112616,112617],{},"pole_angle"," 是否越来越大。",[27,112620,112621,112623],{},[65,112622,111200],{}," 是否跑得太远。",[27,112625,112626,112627,1245,112629,29869],{},"action 是否经常被 clip 到 ",[65,112628,105390],{},[65,112630,1846],{},[170,112632,112633],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112635,103823],{"id":103822},[263,112637,112638,112644,112647,112653,112663,112669,112672],{},[27,112639,112640,112641,29869],{},"把初始角度改为 ",[65,112642,112643],{},"data.qpos[1] = 0.3",[27,112645,112646],{},"重新运行，观察控制是否变差。",[27,112648,112649,112650,112652],{},"把 actuator ",[65,112651,108541],{}," 改小。",[27,112654,112655,112656,112659,112660,29869],{},"打印 ",[65,112657,112658],{},"model.nq, model.nv, model.nu","，应为 ",[65,112661,112662],{},"2 2 1",[27,112664,112665,112666,112668],{},"把 reward 里的 ",[65,112667,112234],{}," 系数改大，观察总奖励变化。",[27,112670,112671],{},"把控制器改成反号，观察杆子是否更容易倒。",[27,112673,112674],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112676,103928],{"id":103927},[19,112678,112679],{"id":112679},"杆子方向和预期不一致",[170,112681,103871,112682,112684,112685,112687],{},[65,112683,107713],{}," 和 capsule 的 ",[65,112686,104651],{},"，必要时用 viewer 可视化确认。",[19,112689,112690],{"id":112690},"控制器越控越倒",[170,112692,112693],{},"说明反馈符号可能反了，尝试:",[58,112695,112697],{"className":31862,"code":112696,"language":31864,"meta":63,"style":63},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[65,112698,112699],{"__ignoreMap":63},[68,112700,112701,112703,112705,112707,112709,112711,112713,112715,112717,112719],{"class":70,"line":71},[68,112702,108916],{"class":78},[68,112704,1685],{"class":316},[68,112706,53753],{"class":316},[68,112708,106734],{"class":85},[68,112710,8007],{"class":316},[68,112712,111294],{"class":78},[68,112714,2160],{"class":316},[68,112716,63345],{"class":85},[68,112718,8007],{"class":316},[68,112720,111714],{"class":78},[19,112722,112723],{"id":112723},"小车飞走",[170,112725,112726,112727,112729,112730,112733],{},"降低 ",[65,112728,108541],{}," 或缩小 ",[65,112731,112732],{},"action"," 的 clip 范围。",[19,112735,112737,112739],{"id":112736},"obs3-为什么是杆子角速度",[65,112738,112373],{}," 为什么是杆子角速度",[170,112741,112742],{},"因为这个模型里：",[58,112744,112747],{"className":112745,"code":112746,"language":6676,"meta":63},[6674],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[65,112748,112746],{"__ignoreMap":63},[170,112750,111221],{},[58,112752,112755],{"className":112753,"code":112754,"language":6676,"meta":63},[6674],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[65,112756,112754],{"__ignoreMap":63},[19,112758,112760],{"id":112759},"reward-变成负数是否错误","reward 变成负数是否错误",[170,112762,112763],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112765,104082],{"id":104081},[170,112767,112768],{},"一个控制任务通常包含：",[263,112770,112771,112774,112782,112787,112790],{},[27,112772,112773],{},"模型：Cartpole 的 body、joint、actuator。",[27,112775,112776,112777,1841,112779,112781],{},"观测：从 ",[65,112778,105505],{},[65,112780,105835],{}," 里取状态。",[27,112783,112784,112785,29869],{},"动作：写入 ",[65,112786,102551],{},[27,112788,112789],{},"奖励：根据任务目标打分。",[27,112791,112792],{},"循环：obs -> action -> step -> reward。",[170,112794,112795],{},"这就是后面 Gymnasium 环境的基本骨架。",[1553,112797,105761],{},{"title":63,"searchDepth":82,"depth":82,"links":112799},[112800,112801,112802,112807,112811,112812,112813,112821],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":112803},[112804,112805,112806],{"id":111174,"depth":98,"text":111175},{"id":111239,"depth":98,"text":111240},{"id":111255,"depth":98,"text":111256},{"id":102727,"depth":82,"text":102728,"children":112808},[112809,112810],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":112814},[112815,112816,112817,112818,112820],{"id":112679,"depth":98,"text":112679},{"id":112690,"depth":98,"text":112690},{"id":112723,"depth":98,"text":112723},{"id":112736,"depth":98,"text":112819},"obs[3] 为什么是杆子角速度",{"id":112759,"depth":98,"text":112760},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110910,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112828,"title":112829,"body":112830,"description":63,"extension":1565,"meta":114844,"navigation":1567,"path":114845,"seo":114846,"stem":114847,"__hash__":114848},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112831,"toc":114820},[112832,112835,112837,112840,112842,112859,112862,112865,112871,112874,112876,112878,112902,112904,112918,112920,112961,112963,112981,112983,112986,112992,112995,113023,113027,113033,113058,113061,113092,113099,113102,113105,113111,113114,113120,113123,113129,113133,113136,113161,113164,113166,113926,113928,113940,113942,113953,113955,113958,113975,113978,113980,113991,113994,113996,114042,114045,114058,114061,114143,114146,114148,114164,114174,114187,114190,114229,114239,114250,114260,114273,114276,114305,114308,114318,114321,114327,114344,114355,114357,114363,114380,114391,114412,114415,114427,114430,114451,114454,114462,114470,114487,114490,114559,114566,114574,114577,114590,114597,114599,114602,114608,114611,114614,114620,114626,114628,114668,114670,114676,114685,114688,114690,114710,114713,114716,114722,114726,114728,114755,114758,114761,114788,114794,114797,114800,114802,114805,114808,114814,114817],[10,112833,112829],{"id":112834},"_7控制任务reacher-机械臂到达目标",[14,112836,102122],{"id":102121},[170,112838,112839],{},"本章搭建一个二维两关节 reacher 任务。",[170,112841,105806],{},[263,112843,112844,112847,112850,112853,112856],{},[27,112845,112846],{},"两个 hinge joint",[27,112848,112849],{},"两个 motor actuator",[27,112851,112852],{},"site 作为末端点和目标点",[27,112854,112855],{},"根据末端和目标距离设计 reward",[27,112857,112858],{},"构造机械臂任务的基本形式",[170,112860,112861],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[170,112863,112864],{},"Reacher 任务可以理解为：",[58,112866,112869],{"className":112867,"code":112868,"language":6676,"meta":63},[6674],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[65,112870,112868],{"__ignoreMap":63},[170,112872,112873],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112875,102245],{"id":102244},[170,112877,102248],{},[58,112879,112880],{"className":25307,"code":105863,"language":25309,"meta":63,"style":63},[65,112881,112882],{"__ignoreMap":63},[68,112883,112884,112886,112888,112890,112892,112894,112896,112898,112900],{"class":70,"line":71},[68,112885,26062],{"class":74},[68,112887,27801],{"class":1742},[68,112889,25319],{"class":1742},[68,112891,27886],{"class":85},[68,112893,105878],{"class":1742},[68,112895,102273],{"class":1742},[68,112897,103976],{"class":1742},[68,112899,102289],{"class":1742},[68,112901,105887],{"class":1742},[170,112903,104294],{},[58,112905,112906],{"className":25307,"code":102394,"language":25309,"meta":63,"style":63},[65,112907,112908],{"__ignoreMap":63},[68,112909,112910,112912,112914,112916],{"class":70,"line":71},[68,112911,25316],{"class":74},[68,112913,25319],{"class":1742},[68,112915,102405],{"class":1742},[68,112917,102408],{"class":1742},[170,112919,104311],{},[58,112921,112923],{"className":25307,"code":112922,"language":25309,"meta":63,"style":63},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[65,112924,112925,112942,112951],{"__ignoreMap":63},[68,112926,112927,112929,112931,112933,112936,112938,112940],{"class":70,"line":71},[68,112928,31814],{"class":74},[68,112930,30660],{"class":1742},[68,112932,26601],{"class":85},[68,112934,112935],{"class":1742}," mujoco-reacher",[68,112937,102450],{"class":1742},[68,112939,102453],{"class":85},[68,112941,102456],{"class":85},[68,112943,112944,112946,112948],{"class":70,"line":82},[68,112945,31814],{"class":74},[68,112947,102463],{"class":1742},[68,112949,112950],{"class":1742}," mujoco-reacher\n",[68,112952,112953,112955,112957,112959],{"class":70,"line":98},[68,112954,25316],{"class":74},[68,112956,25319],{"class":1742},[68,112958,102405],{"class":1742},[68,112960,102408],{"class":1742},[170,112962,102479],{},[263,112964,112965,112968,112971],{},[27,112966,112967],{},"本章使用低维状态，不使用图像输入。",[27,112969,112970],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[27,112972,112973,112974,1841,112976,1841,112978,112980],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[65,112975,105505],{},[65,112977,105835],{},[65,112979,105155],{}," 的方法一致。",[14,112982,102520],{"id":102519},[170,112984,112985],{},"Reacher 任务核心:",[58,112987,112990],{"className":112988,"code":112989,"language":6676,"meta":63},[6674],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[65,112991,112989],{"__ignoreMap":63},[170,112993,112994],{},"读取 site 世界坐标:",[58,112996,112998],{"className":31862,"code":112997,"language":31864,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[65,112999,113000,113013],{"__ignoreMap":63},[68,113001,113002,113004,113006,113008,113011],{"class":70,"line":71},[68,113003,105109],{"class":78},[68,113005,1685],{"class":316},[68,113007,104880],{"class":78},[68,113009,113010],{"class":1742},"\"tip\"",[68,113012,1646],{"class":78},[68,113014,113015,113018,113020],{"class":70,"line":82},[68,113016,113017],{"class":78},"tip_pos ",[68,113019,1685],{"class":316},[68,113021,113022],{"class":78}," data.site_xpos[site_id]\n",[19,113024,113026],{"id":113025},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[170,113028,113029,113030,113032],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[65,113031,105505],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[58,113034,113036],{"className":31862,"code":113035,"language":31864,"meta":63,"style":63},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[65,113037,113038,113048],{"__ignoreMap":63},[68,113039,113040,113043,113045],{"class":70,"line":71},[68,113041,113042],{"class":78},"tip ",[68,113044,1685],{"class":316},[68,113046,113047],{"class":78}," data.site_xpos[tip_site_id]\n",[68,113049,113050,113053,113055],{"class":70,"line":82},[68,113051,113052],{"class":78},"target ",[68,113054,1685],{"class":316},[68,113056,113057],{"class":78}," data.site_xpos[target_site_id]\n",[170,113059,113060],{},"这样 reward 就很容易写：",[58,113062,113064],{"className":31862,"code":113063,"language":31864,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[65,113065,113066,113081],{"__ignoreMap":63},[68,113067,113068,113071,113073,113076,113078],{"class":70,"line":71},[68,113069,113070],{"class":78},"dist ",[68,113072,1685],{"class":316},[68,113074,113075],{"class":78}," np.linalg.norm(tip ",[68,113077,2160],{"class":316},[68,113079,113080],{"class":78}," target)\n",[68,113082,113083,113085,113087,113089],{"class":70,"line":82},[68,113084,112479],{"class":78},[68,113086,1685],{"class":316},[68,113088,53753],{"class":316},[68,113090,113091],{"class":78},"dist\n",[170,113093,113094,113095,113098],{},"距离越小，",[65,113096,113097],{},"-dist"," 越接近 0，奖励越高。",[19,113100,113101],{"id":113101},"两关节机械臂的状态",[170,113103,113104],{},"这个模型有两个 hinge joint：",[58,113106,113109],{"className":113107,"code":113108,"language":6676,"meta":63},[6674],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[65,113110,113108],{"__ignoreMap":63},[170,113112,113113],{},"再加上末端和目标位置：",[58,113115,113118],{"className":113116,"code":113117,"language":6676,"meta":63},[6674],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[65,113119,113117],{"__ignoreMap":63},[170,113121,113122],{},"总维度：",[58,113124,113127],{"className":113125,"code":113126,"language":6676,"meta":63},[6674],"2 + 2 + 3 + 3 = 10\n",[65,113128,113126],{"__ignoreMap":63},[19,113130,113132],{"id":113131},"为什么-gravity-是-0","为什么 gravity 是 0",[170,113134,113135],{},"本章把重力设为：",[58,113137,113139],{"className":54549,"code":113138,"language":54551,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[65,113140,113141],{"__ignoreMap":63},[68,113142,113143,113145,113147,113149,113151,113153,113155,113157,113159],{"class":70,"line":71},[68,113144,2537],{"class":78},[68,113146,70644],{"class":52784},[68,113148,102669],{"class":74},[68,113150,1685],{"class":78},[68,113152,102674],{"class":1742},[68,113154,102677],{"class":74},[68,113156,1685],{"class":78},[68,113158,105246],{"class":1742},[68,113160,102619],{"class":78},[170,113162,113163],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113165,102728],{"id":102727},[58,113167,113169],{"className":31862,"code":113168,"language":31864,"meta":63,"style":63},"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",[65,113170,113171,113177,113187,113191,113195,113203,113208,113213,113217,113221,113226,113231,113235,113240,113245,113250,113254,113259,113264,113269,113274,113278,113282,113286,113290,113294,113299,113304,113308,113312,113316,113320,113324,113339,113348,113360,113383,113390,113394,113398,113408,113422,113436,113443,113447,113451,113465,113477,113489,113502,113517,113534,113538,113542,113554,113566,113574,113582,113586,113602,113607,113620,113633,113648,113652,113687,113719,113723,113727,113736,113740,113756,113766,113777,113793,113809,113825,113841,113845,113863,113883,113902,113906,113910,113922],{"__ignoreMap":63},[68,113172,113173,113175],{"class":70,"line":71},[68,113174,31876],{"class":316},[68,113176,102776],{"class":78},[68,113178,113179,113181,113183,113185],{"class":70,"line":82},[68,113180,31876],{"class":316},[68,113182,32864],{"class":78},[68,113184,32867],{"class":316},[68,113186,32870],{"class":78},[68,113188,113189],{"class":70,"line":98},[68,113190,3890],{"emptyLinePlaceholder":1567},[68,113192,113193],{"class":70,"line":104},[68,113194,3890],{"emptyLinePlaceholder":1567},[68,113196,113197,113199,113201],{"class":70,"line":112},[68,113198,102789],{"class":85},[68,113200,15052],{"class":316},[68,113202,102794],{"class":1742},[68,113204,113205],{"class":70,"line":124},[68,113206,113207],{"class":1742},"\u003Cmujoco model=\"two_link_reacher\">\n",[68,113209,113210],{"class":70,"line":1496},[68,113211,113212],{"class":1742},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[68,113214,113215],{"class":70,"line":1502},[68,113216,3890],{"emptyLinePlaceholder":1567},[68,113218,113219],{"class":70,"line":1510},[68,113220,102813],{"class":1742},[68,113222,113223],{"class":70,"line":1521},[68,113224,113225],{"class":1742},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[68,113227,113228],{"class":70,"line":3103},[68,113229,113230],{"class":1742},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[68,113232,113233],{"class":70,"line":3108},[68,113234,3890],{"emptyLinePlaceholder":1567},[68,113236,113237],{"class":70,"line":3114},[68,113238,113239],{"class":1742},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[68,113241,113242],{"class":70,"line":3119},[68,113243,113244],{"class":1742},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,113246,113247],{"class":70,"line":3133},[68,113248,113249],{"class":1742},"      \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",[68,113251,113252],{"class":70,"line":3138},[68,113253,3890],{"emptyLinePlaceholder":1567},[68,113255,113256],{"class":70,"line":3144},[68,113257,113258],{"class":1742},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[68,113260,113261],{"class":70,"line":3165},[68,113262,113263],{"class":1742},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,113265,113266],{"class":70,"line":3170},[68,113267,113268],{"class":1742},"        \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",[68,113270,113271],{"class":70,"line":3184},[68,113272,113273],{"class":1742},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[68,113275,113276],{"class":70,"line":3189},[68,113277,107912],{"class":1742},[68,113279,113280],{"class":70,"line":3218},[68,113281,102842],{"class":1742},[68,113283,113284],{"class":70,"line":3223},[68,113285,102847],{"class":1742},[68,113287,113288],{"class":70,"line":3240},[68,113289,3890],{"emptyLinePlaceholder":1567},[68,113291,113292],{"class":70,"line":3245},[68,113293,107929],{"class":1742},[68,113295,113296],{"class":70,"line":3250},[68,113297,113298],{"class":1742},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,113300,113301],{"class":70,"line":3255},[68,113302,113303],{"class":1742},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,113305,113306],{"class":70,"line":3269},[68,113307,107939],{"class":1742},[68,113309,113310],{"class":70,"line":3274},[68,113311,102852],{"class":1742},[68,113313,113314],{"class":70,"line":4067},[68,113315,97173],{"class":1742},[68,113317,113318],{"class":70,"line":4081},[68,113319,3890],{"emptyLinePlaceholder":1567},[68,113321,113322],{"class":70,"line":4089},[68,113323,3890],{"emptyLinePlaceholder":1567},[68,113325,113326,113328,113331,113334,113336],{"class":70,"line":4094},[68,113327,33431],{"class":316},[68,113329,113330],{"class":74}," site_position",[68,113332,113333],{"class":78},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[68,113335,2795],{"class":85},[68,113337,113338],{"class":78},") -> np.ndarray:\n",[68,113340,113341,113343,113345],{"class":70,"line":4100},[68,113342,104875],{"class":78},[68,113344,1685],{"class":316},[68,113346,113347],{"class":78}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[68,113349,113350,113352,113354,113356,113358],{"class":70,"line":4106},[68,113351,4591],{"class":316},[68,113353,104924],{"class":78},[68,113355,2537],{"class":316},[68,113357,5583],{"class":85},[68,113359,5229],{"class":78},[68,113361,113362,113364,113366,113368,113370,113373,113375,113377,113379,113381],{"class":70,"line":4111},[68,113363,104907],{"class":316},[68,113365,104910],{"class":85},[68,113367,1640],{"class":78},[68,113369,1691],{"class":316},[68,113371,113372],{"class":1742},"\"site not found: ",[68,113374,2523],{"class":85},[68,113376,81287],{"class":78},[68,113378,2573],{"class":85},[68,113380,1880],{"class":1742},[68,113382,1646],{"class":78},[68,113384,113385,113387],{"class":70,"line":9437},[68,113386,5580],{"class":316},[68,113388,113389],{"class":78}," data.site_xpos[site_id].copy()\n",[68,113391,113392],{"class":70,"line":9461},[68,113393,3890],{"emptyLinePlaceholder":1567},[68,113395,113396],{"class":70,"line":9466},[68,113397,3890],{"emptyLinePlaceholder":1567},[68,113399,113400,113402,113405],{"class":70,"line":9472},[68,113401,33431],{"class":316},[68,113403,113404],{"class":74}," get_obs",[68,113406,113407],{"class":78},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[68,113409,113410,113413,113415,113418,113420],{"class":70,"line":9499},[68,113411,113412],{"class":78},"    tip ",[68,113414,1685],{"class":316},[68,113416,113417],{"class":78}," site_position(model, data, ",[68,113419,113010],{"class":1742},[68,113421,1646],{"class":78},[68,113423,113424,113427,113429,113431,113434],{"class":70,"line":9504},[68,113425,113426],{"class":78},"    target ",[68,113428,1685],{"class":316},[68,113430,113417],{"class":78},[68,113432,113433],{"class":1742},"\"target\"",[68,113435,1646],{"class":78},[68,113437,113438,113440],{"class":70,"line":9510},[68,113439,5580],{"class":316},[68,113441,113442],{"class":78}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[68,113444,113445],{"class":70,"line":9522},[68,113446,3890],{"emptyLinePlaceholder":1567},[68,113448,113449],{"class":70,"line":9534},[68,113450,3890],{"emptyLinePlaceholder":1567},[68,113452,113453,113455,113458,113461,113463],{"class":70,"line":9546},[68,113454,33431],{"class":316},[68,113456,113457],{"class":74}," reward",[68,113459,113460],{"class":78},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,113462,1679],{"class":85},[68,113464,5229],{"class":78},[68,113466,113467,113469,113471,113473,113475],{"class":70,"line":11204},[68,113468,113412],{"class":78},[68,113470,1685],{"class":316},[68,113472,113417],{"class":78},[68,113474,113010],{"class":1742},[68,113476,1646],{"class":78},[68,113478,113479,113481,113483,113485,113487],{"class":70,"line":11229},[68,113480,113426],{"class":78},[68,113482,1685],{"class":316},[68,113484,113417],{"class":78},[68,113486,113433],{"class":1742},[68,113488,1646],{"class":78},[68,113490,113491,113494,113496,113498,113500],{"class":70,"line":11252},[68,113492,113493],{"class":78},"    dist ",[68,113495,1685],{"class":316},[68,113497,113075],{"class":78},[68,113499,2160],{"class":316},[68,113501,113080],{"class":78},[68,113503,113504,113507,113509,113512,113514],{"class":70,"line":11276},[68,113505,113506],{"class":78},"    control_cost ",[68,113508,1685],{"class":316},[68,113510,113511],{"class":85}," 0.01",[68,113513,8007],{"class":316},[68,113515,113516],{"class":78}," np.sum(np.square(data.ctrl))\n",[68,113518,113519,113521,113523,113525,113527,113529,113531],{"class":70,"line":11281},[68,113520,5580],{"class":316},[68,113522,111271],{"class":85},[68,113524,1640],{"class":78},[68,113526,2160],{"class":316},[68,113528,113070],{"class":78},[68,113530,2160],{"class":316},[68,113532,113533],{"class":78}," control_cost)\n",[68,113535,113536],{"class":70,"line":11286},[68,113537,3890],{"emptyLinePlaceholder":1567},[68,113539,113540],{"class":70,"line":11291},[68,113541,3890],{"emptyLinePlaceholder":1567},[68,113543,113544,113546,113548,113550,113552],{"class":70,"line":11300},[68,113545,33431],{"class":316},[68,113547,3463],{"class":74},[68,113549,102873],{"class":78},[68,113551,97161],{"class":85},[68,113553,5229],{"class":78},[68,113555,113556,113558,113560,113562,113564],{"class":70,"line":11305},[68,113557,102882],{"class":78},[68,113559,1685],{"class":316},[68,113561,102887],{"class":78},[68,113563,102789],{"class":85},[68,113565,1646],{"class":78},[68,113567,113568,113570,113572],{"class":70,"line":11311},[68,113569,102896],{"class":78},[68,113571,1685],{"class":316},[68,113573,102901],{"class":78},[68,113575,113576,113578,113580],{"class":70,"line":11332},[68,113577,111627],{"class":78},[68,113579,1685],{"class":316},[68,113581,106235],{"class":85},[68,113583,113584],{"class":70,"line":11338},[68,113585,3890],{"emptyLinePlaceholder":1567},[68,113587,113588,113590,113592,113594,113596,113598,113600],{"class":70,"line":11352},[68,113589,4691],{"class":316},[68,113591,33100],{"class":78},[68,113593,27529],{"class":316},[68,113595,33927],{"class":85},[68,113597,1640],{"class":78},[68,113599,66552],{"class":85},[68,113601,32270],{"class":78},[68,113603,113604],{"class":70,"line":11358},[68,113605,113606],{"class":78},"        mujoco.mj_forward(model, data)\n",[68,113608,113609,113612,113614,113616,113618],{"class":70,"line":11385},[68,113610,113611],{"class":78},"        tip ",[68,113613,1685],{"class":316},[68,113615,113417],{"class":78},[68,113617,113010],{"class":1742},[68,113619,1646],{"class":78},[68,113621,113622,113625,113627,113629,113631],{"class":70,"line":11394},[68,113623,113624],{"class":78},"        target ",[68,113626,1685],{"class":316},[68,113628,113417],{"class":78},[68,113630,113433],{"class":1742},[68,113632,1646],{"class":78},[68,113634,113635,113638,113640,113643,113645],{"class":70,"line":11400},[68,113636,113637],{"class":78},"        error ",[68,113639,1685],{"class":316},[68,113641,113642],{"class":78}," target ",[68,113644,2160],{"class":316},[68,113646,113647],{"class":78}," tip\n",[68,113649,113650],{"class":70,"line":11408},[68,113651,3890],{"emptyLinePlaceholder":1567},[68,113653,113654,113656,113658,113660,113662,113665,113667,113669,113672,113674,113677,113679,113681,113683,113685],{"class":70,"line":11413},[68,113655,108091],{"class":78},[68,113657,1248],{"class":85},[68,113659,5933],{"class":78},[68,113661,1685],{"class":316},[68,113663,113664],{"class":78}," np.clip(",[68,113666,106734],{"class":85},[68,113668,8007],{"class":316},[68,113670,113671],{"class":78}," error[",[68,113673,1715],{"class":85},[68,113675,113676],{"class":78},"], ",[68,113678,2160],{"class":316},[68,113680,103878],{"class":85},[68,113682,13923],{"class":78},[68,113684,103878],{"class":85},[68,113686,1646],{"class":78},[68,113688,113689,113691,113693,113695,113697,113699,113701,113703,113705,113707,113709,113711,113713,113715,113717],{"class":70,"line":18091},[68,113690,108091],{"class":78},[68,113692,1846],{"class":85},[68,113694,5933],{"class":78},[68,113696,1685],{"class":316},[68,113698,113664],{"class":78},[68,113700,106734],{"class":85},[68,113702,8007],{"class":316},[68,113704,113671],{"class":78},[68,113706,1248],{"class":85},[68,113708,113676],{"class":78},[68,113710,2160],{"class":316},[68,113712,103878],{"class":85},[68,113714,13923],{"class":78},[68,113716,103878],{"class":85},[68,113718,1646],{"class":78},[68,113720,113721],{"class":70,"line":18097},[68,113722,3890],{"emptyLinePlaceholder":1567},[68,113724,113725],{"class":70,"line":18120},[68,113726,102991],{"class":78},[68,113728,113729,113731,113733],{"class":70,"line":18126},[68,113730,111771],{"class":78},[68,113732,10965],{"class":316},[68,113734,113735],{"class":78}," reward(model, data)\n",[68,113737,113738],{"class":70,"line":18149},[68,113739,3890],{"emptyLinePlaceholder":1567},[68,113741,113742,113744,113746,113748,113750,113752,113754],{"class":70,"line":18163},[68,113743,3987],{"class":316},[68,113745,33100],{"class":78},[68,113747,1957],{"class":316},[68,113749,7243],{"class":85},[68,113751,103034],{"class":316},[68,113753,5583],{"class":85},[68,113755,5229],{"class":78},[68,113757,113758,113761,113763],{"class":70,"line":18183},[68,113759,113760],{"class":78},"            obs ",[68,113762,1685],{"class":316},[68,113764,113765],{"class":78}," get_obs(model, data)\n",[68,113767,113768,113770,113772,113774],{"class":70,"line":18189},[68,113769,36134],{"class":85},[68,113771,1640],{"class":78},[68,113773,111805],{"class":1742},[68,113775,113776],{"class":78},", step)\n",[68,113778,113779,113781,113783,113786,113789,113791],{"class":70,"line":18200},[68,113780,36134],{"class":85},[68,113782,1640],{"class":78},[68,113784,113785],{"class":1742},"\"  tip:\"",[68,113787,113788],{"class":78},", np.round(tip, ",[68,113790,1709],{"class":85},[68,113792,31981],{"class":78},[68,113794,113795,113797,113799,113802,113805,113807],{"class":70,"line":18223},[68,113796,36134],{"class":85},[68,113798,1640],{"class":78},[68,113800,113801],{"class":1742},"\"  target:\"",[68,113803,113804],{"class":78},", np.round(target, ",[68,113806,1709],{"class":85},[68,113808,31981],{"class":78},[68,113810,113811,113813,113815,113818,113821,113823],{"class":70,"line":18245},[68,113812,36134],{"class":85},[68,113814,1640],{"class":78},[68,113816,113817],{"class":1742},"\"  ctrl:\"",[68,113819,113820],{"class":78},", np.round(data.ctrl.copy(), ",[68,113822,1709],{"class":85},[68,113824,31981],{"class":78},[68,113826,113827,113829,113831,113834,113837,113839],{"class":70,"line":18250},[68,113828,36134],{"class":85},[68,113830,1640],{"class":78},[68,113832,113833],{"class":1742},"\"  obs_dim:\"",[68,113835,113836],{"class":78},", obs.shape[",[68,113838,1248],{"class":85},[68,113840,6147],{"class":78},[68,113842,113843],{"class":70,"line":18256},[68,113844,3890],{"emptyLinePlaceholder":1567},[68,113846,113847,113849,113851,113853,113855,113857,113859,113861],{"class":70,"line":18270},[68,113848,32783],{"class":85},[68,113850,1640],{"class":78},[68,113852,111850],{"class":1742},[68,113854,13923],{"class":78},[68,113856,33502],{"class":85},[68,113858,111857],{"class":78},[68,113860,1709],{"class":85},[68,113862,31981],{"class":78},[68,113864,113865,113867,113869,113872,113875,113877,113879,113881],{"class":70,"line":18283},[68,113866,32783],{"class":85},[68,113868,1640],{"class":78},[68,113870,113871],{"class":1742},"\"final tip:\"",[68,113873,113874],{"class":78},", np.round(site_position(model, data, ",[68,113876,113010],{"class":1742},[68,113878,111819],{"class":78},[68,113880,1709],{"class":85},[68,113882,31981],{"class":78},[68,113884,113885,113887,113889,113892,113894,113896,113898,113900],{"class":70,"line":18288},[68,113886,32783],{"class":85},[68,113888,1640],{"class":78},[68,113890,113891],{"class":1742},"\"target:\"",[68,113893,113874],{"class":78},[68,113895,113433],{"class":1742},[68,113897,111819],{"class":78},[68,113899,1709],{"class":85},[68,113901,31981],{"class":78},[68,113903,113904],{"class":70,"line":18302},[68,113905,3890],{"emptyLinePlaceholder":1567},[68,113907,113908],{"class":70,"line":18307},[68,113909,3890],{"emptyLinePlaceholder":1567},[68,113911,113912,113914,113916,113918,113920],{"class":70,"line":18313},[68,113913,3023],{"class":316},[68,113915,32704],{"class":85},[68,113917,103034],{"class":316},[68,113919,103037],{"class":1742},[68,113921,5229],{"class":78},[68,113923,113924],{"class":70,"line":18318},[68,113925,103044],{"class":78},[170,113927,105045],{},[58,113929,113931],{"className":25307,"code":113930,"language":25309,"meta":63,"style":63},"touch ch7_reacher.py\n",[65,113932,113933],{"__ignoreMap":63},[68,113934,113935,113937],{"class":70,"line":71},[68,113936,102758],{"class":74},[68,113938,113939],{"class":1742}," ch7_reacher.py\n",[170,113941,111918],{},[58,113943,113945],{"className":25307,"code":113944,"language":25309,"meta":63,"style":63},"python ch7_reacher.py\n",[65,113946,113947],{"__ignoreMap":63},[68,113948,113949,113951],{"class":70,"line":71},[68,113950,31864],{"class":74},[68,113952,113939],{"class":1742},[19,113954,103047],{"id":103047},[170,113956,113957],{},"读取 site 坐标：",[58,113959,113961],{"className":31862,"code":113960,"language":31864,"meta":63,"style":63},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[65,113962,113963],{"__ignoreMap":63},[68,113964,113965,113967,113969,113971,113973],{"class":70,"line":71},[68,113966,33431],{"class":316},[68,113968,113330],{"class":74},[68,113970,113333],{"class":78},[68,113972,2795],{"class":85},[68,113974,113338],{"class":78},[170,113976,113977],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[170,113979,111934],{},[58,113981,113983],{"className":31862,"code":113982,"language":31864,"meta":63,"style":63},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[65,113984,113985],{"__ignoreMap":63},[68,113986,113987,113989],{"class":70,"line":71},[68,113988,18533],{"class":316},[68,113990,113442],{"class":78},[170,113992,113993],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[170,113995,111259],{},[58,113997,113999],{"className":31862,"code":113998,"language":31864,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[65,114000,114001,114013,114026],{"__ignoreMap":63},[68,114002,114003,114005,114007,114009,114011],{"class":70,"line":71},[68,114004,113070],{"class":78},[68,114006,1685],{"class":316},[68,114008,113075],{"class":78},[68,114010,2160],{"class":316},[68,114012,113080],{"class":78},[68,114014,114015,114018,114020,114022,114024],{"class":70,"line":82},[68,114016,114017],{"class":78},"control_cost ",[68,114019,1685],{"class":316},[68,114021,113511],{"class":85},[68,114023,8007],{"class":316},[68,114025,113516],{"class":78},[68,114027,114028,114030,114032,114034,114036,114038,114040],{"class":70,"line":98},[68,114029,18533],{"class":316},[68,114031,111271],{"class":85},[68,114033,1640],{"class":78},[68,114035,2160],{"class":316},[68,114037,113070],{"class":78},[68,114039,2160],{"class":316},[68,114041,113533],{"class":78},[170,114043,114044],{},"奖励由两部分组成：",[263,114046,114047,114052],{},[27,114048,114049,114051],{},[65,114050,113097],{},"：末端离目标越远，奖励越低。",[27,114053,114054,114057],{},[65,114055,114056],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[170,114059,114060],{},"简单控制器：",[58,114062,114064],{"className":31862,"code":114063,"language":31864,"meta":63,"style":63},"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",[65,114065,114066,114079,114111],{"__ignoreMap":63},[68,114067,114068,114071,114073,114075,114077],{"class":70,"line":71},[68,114069,114070],{"class":78},"error ",[68,114072,1685],{"class":316},[68,114074,113642],{"class":78},[68,114076,2160],{"class":316},[68,114078,113647],{"class":78},[68,114080,114081,114083,114085,114087,114089,114091,114093,114095,114097,114099,114101,114103,114105,114107,114109],{"class":70,"line":82},[68,114082,107345],{"class":78},[68,114084,1248],{"class":85},[68,114086,5933],{"class":78},[68,114088,1685],{"class":316},[68,114090,113664],{"class":78},[68,114092,106734],{"class":85},[68,114094,8007],{"class":316},[68,114096,113671],{"class":78},[68,114098,1715],{"class":85},[68,114100,113676],{"class":78},[68,114102,2160],{"class":316},[68,114104,103878],{"class":85},[68,114106,13923],{"class":78},[68,114108,103878],{"class":85},[68,114110,1646],{"class":78},[68,114112,114113,114115,114117,114119,114121,114123,114125,114127,114129,114131,114133,114135,114137,114139,114141],{"class":70,"line":98},[68,114114,107345],{"class":78},[68,114116,1846],{"class":85},[68,114118,5933],{"class":78},[68,114120,1685],{"class":316},[68,114122,113664],{"class":78},[68,114124,106734],{"class":85},[68,114126,8007],{"class":316},[68,114128,113671],{"class":78},[68,114130,1248],{"class":85},[68,114132,113676],{"class":78},[68,114134,2160],{"class":316},[68,114136,103878],{"class":85},[68,114138,13923],{"class":78},[68,114140,103878],{"class":85},[68,114142,1646],{"class":78},[170,114144,114145],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,114147,103183],{"id":103183},[58,114149,114150],{"className":31862,"code":113960,"language":31864,"meta":63,"style":63},[65,114151,114152],{"__ignoreMap":63},[68,114153,114154,114156,114158,114160,114162],{"class":70,"line":71},[68,114155,33431],{"class":316},[68,114157,113330],{"class":74},[68,114159,113333],{"class":78},[68,114161,2795],{"class":85},[68,114163,113338],{"class":78},[170,114165,114166,114167,114169,114170,1245,114172,29869],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[65,114168,81287],{}," 是 site 的名字，比如 ",[65,114171,113010],{},[65,114173,113433],{},[58,114175,114177],{"className":31862,"code":114176,"language":31864,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[65,114178,114179],{"__ignoreMap":63},[68,114180,114181,114183,114185],{"class":70,"line":71},[68,114182,105109],{"class":78},[68,114184,1685],{"class":316},[68,114186,113347],{"class":78},[170,114188,114189],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[58,114191,114193],{"className":31862,"code":114192,"language":31864,"meta":63,"style":63},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[65,114194,114195,114207],{"__ignoreMap":63},[68,114196,114197,114199,114201,114203,114205],{"class":70,"line":71},[68,114198,3023],{"class":316},[68,114200,104924],{"class":78},[68,114202,2537],{"class":316},[68,114204,5583],{"class":85},[68,114206,5229],{"class":78},[68,114208,114209,114211,114213,114215,114217,114219,114221,114223,114225,114227],{"class":70,"line":82},[68,114210,105370],{"class":316},[68,114212,104910],{"class":85},[68,114214,1640],{"class":78},[68,114216,1691],{"class":316},[68,114218,113372],{"class":1742},[68,114220,2523],{"class":85},[68,114222,81287],{"class":78},[68,114224,2573],{"class":85},[68,114226,1880],{"class":1742},[68,114228,1646],{"class":78},[170,114230,114231,114232,114235,114236,114238],{},"如果 site 没找到，就主动报错。",[65,114233,114234],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[65,114237,81287],{}," 的值放进字符串里。",[58,114240,114242],{"className":31862,"code":114241,"language":31864,"meta":63,"style":63},"return data.site_xpos[site_id].copy()\n",[65,114243,114244],{"__ignoreMap":63},[68,114245,114246,114248],{"class":70,"line":71},[68,114247,18533],{"class":316},[68,114249,113389],{"class":78},[170,114251,114252,114253,114255,114256,114259],{},"返回这个 site 的世界坐标。",[65,114254,105155],{}," 里的每一行都是一个 site 的 ",[65,114257,114258],{},"(x, y, z)"," 坐标。",[58,114261,114263],{"className":31862,"code":114262,"language":31864,"meta":63,"style":63},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[65,114264,114265],{"__ignoreMap":63},[68,114266,114267,114269,114271],{"class":70,"line":71},[68,114268,33431],{"class":316},[68,114270,113404],{"class":74},[68,114272,113407],{"class":78},[170,114274,114275],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[58,114277,114279],{"className":31862,"code":114278,"language":31864,"meta":63,"style":63},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[65,114280,114281,114293],{"__ignoreMap":63},[68,114282,114283,114285,114287,114289,114291],{"class":70,"line":71},[68,114284,113042],{"class":78},[68,114286,1685],{"class":316},[68,114288,113417],{"class":78},[68,114290,113010],{"class":1742},[68,114292,1646],{"class":78},[68,114294,114295,114297,114299,114301,114303],{"class":70,"line":82},[68,114296,113052],{"class":78},[68,114298,1685],{"class":316},[68,114300,113417],{"class":78},[68,114302,113433],{"class":1742},[68,114304,1646],{"class":78},[170,114306,114307],{},"分别读取末端点和目标点的世界坐标。",[58,114309,114310],{"className":31862,"code":113982,"language":31864,"meta":63,"style":63},[65,114311,114312],{"__ignoreMap":63},[68,114313,114314,114316],{"class":70,"line":71},[68,114315,18533],{"class":316},[68,114317,113442],{"class":78},[170,114319,114320],{},"把四部分拼成一个观测数组：",[58,114322,114325],{"className":114323,"code":114324,"language":6676,"meta":63},[6674],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[65,114326,114324],{"__ignoreMap":63},[58,114328,114330],{"className":31862,"code":114329,"language":31864,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\n",[65,114331,114332],{"__ignoreMap":63},[68,114333,114334,114336,114338,114340,114342],{"class":70,"line":71},[68,114335,113070],{"class":78},[68,114337,1685],{"class":316},[68,114339,113075],{"class":78},[68,114341,2160],{"class":316},[68,114343,113080],{"class":78},[170,114345,114346,114347,114350,114351,114354],{},"计算 tip 到 target 的距离。",[65,114348,114349],{},"tip - target"," 得到一个三维向量，",[65,114352,114353],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[170,114356,16121],{},[58,114358,114361],{"className":114359,"code":114360,"language":6676,"meta":63},[6674],"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",[65,114362,114360],{"__ignoreMap":63},[58,114364,114366],{"className":31862,"code":114365,"language":31864,"meta":63,"style":63},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[65,114367,114368],{"__ignoreMap":63},[68,114369,114370,114372,114374,114376,114378],{"class":70,"line":71},[68,114371,114017],{"class":78},[68,114373,1685],{"class":316},[68,114375,113511],{"class":85},[68,114377,8007],{"class":316},[68,114379,113516],{"class":78},[170,114381,114382,114383,114386,114387,114390],{},"计算动作惩罚。",[65,114384,114385],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[65,114388,114389],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[58,114392,114394],{"className":31862,"code":114393,"language":31864,"meta":63,"style":63},"return float(-dist - control_cost)\n",[65,114395,114396],{"__ignoreMap":63},[68,114397,114398,114400,114402,114404,114406,114408,114410],{"class":70,"line":71},[68,114399,18533],{"class":316},[68,114401,111271],{"class":85},[68,114403,1640],{"class":78},[68,114405,2160],{"class":316},[68,114407,113070],{"class":78},[68,114409,2160],{"class":316},[68,114411,113533],{"class":78},[170,114413,114414],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[58,114416,114417],{"className":31862,"code":112277,"language":31864,"meta":63,"style":63},[65,114418,114419],{"__ignoreMap":63},[68,114420,114421,114423,114425],{"class":70,"line":71},[68,114422,112284],{"class":78},[68,114424,1685],{"class":316},[68,114426,106235],{"class":85},[170,114428,114429],{},"累计奖励变量，记录整个运行过程的总分。",[58,114431,114433],{"className":31862,"code":114432,"language":31864,"meta":63,"style":63},"for step in range(500):\n",[65,114434,114435],{"__ignoreMap":63},[68,114436,114437,114439,114441,114443,114445,114447,114449],{"class":70,"line":71},[68,114438,4515],{"class":316},[68,114440,33100],{"class":78},[68,114442,27529],{"class":316},[68,114444,33927],{"class":85},[68,114446,1640],{"class":78},[68,114448,66552],{"class":85},[68,114450,32270],{"class":78},[170,114452,114453],{},"运行 500 个控制步。",[58,114455,114456],{"className":31862,"code":106018,"language":31864,"meta":63,"style":63},[65,114457,114458],{"__ignoreMap":63},[68,114459,114460],{"class":70,"line":71},[68,114461,106018],{"class":78},[170,114463,114464,114465,102493,114467,114469],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[65,114466,104706],{},[65,114468,104709],{}," 是当前状态下的坐标。",[58,114471,114473],{"className":31862,"code":114472,"language":31864,"meta":63,"style":63},"error = target - tip\n",[65,114474,114475],{"__ignoreMap":63},[68,114476,114477,114479,114481,114483,114485],{"class":70,"line":71},[68,114478,114070],{"class":78},[68,114480,1685],{"class":316},[68,114482,113642],{"class":78},[68,114484,2160],{"class":316},[68,114486,113647],{"class":78},[170,114488,114489],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[58,114491,114493],{"className":31862,"code":114492,"language":31864,"meta":63,"style":63},"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",[65,114494,114495,114527],{"__ignoreMap":63},[68,114496,114497,114499,114501,114503,114505,114507,114509,114511,114513,114515,114517,114519,114521,114523,114525],{"class":70,"line":71},[68,114498,107345],{"class":78},[68,114500,1248],{"class":85},[68,114502,5933],{"class":78},[68,114504,1685],{"class":316},[68,114506,113664],{"class":78},[68,114508,106734],{"class":85},[68,114510,8007],{"class":316},[68,114512,113671],{"class":78},[68,114514,1715],{"class":85},[68,114516,113676],{"class":78},[68,114518,2160],{"class":316},[68,114520,103878],{"class":85},[68,114522,13923],{"class":78},[68,114524,103878],{"class":85},[68,114526,1646],{"class":78},[68,114528,114529,114531,114533,114535,114537,114539,114541,114543,114545,114547,114549,114551,114553,114555,114557],{"class":70,"line":82},[68,114530,107345],{"class":78},[68,114532,1846],{"class":85},[68,114534,5933],{"class":78},[68,114536,1685],{"class":316},[68,114538,113664],{"class":78},[68,114540,106734],{"class":85},[68,114542,8007],{"class":316},[68,114544,113671],{"class":78},[68,114546,1248],{"class":85},[68,114548,113676],{"class":78},[68,114550,2160],{"class":316},[68,114552,103878],{"class":85},[68,114554,13923],{"class":78},[68,114556,103878],{"class":85},[68,114558,1646],{"class":78},[170,114560,114561,114562,114565],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[65,114563,114564],{},"error -> ctrl -> step"," 的流程。",[58,114567,114568],{"className":31862,"code":105980,"language":31864,"meta":63,"style":63},[65,114569,114570],{"__ignoreMap":63},[68,114571,114572],{"class":70,"line":71},[68,114573,105980],{"class":78},[170,114575,114576],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[58,114578,114580],{"className":31862,"code":114579,"language":31864,"meta":63,"style":63},"obs = get_obs(model, data)\n",[65,114581,114582],{"__ignoreMap":63},[68,114583,114584,114586,114588],{"class":70,"line":71},[68,114585,112328],{"class":78},[68,114587,1685],{"class":316},[68,114589,113765],{"class":78},[170,114591,114592,114593,114596],{},"读取最新观测。后面打印 ",[65,114594,114595],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114598,103791],{"id":103790},[170,114600,114601],{},"观测维度为:",[58,114603,114606],{"className":114604,"code":114605,"language":6676,"meta":63},[6674],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[65,114607,114605],{"__ignoreMap":63},[170,114609,114610],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[170,114612,114613],{},"程序每 100 步打印：",[58,114615,114618],{"className":114616,"code":114617,"language":6676,"meta":63},[6674],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[65,114619,114617],{"__ignoreMap":63},[170,114621,114622,114623,114625],{},"如果控制有效，你应该看到最终 ",[65,114624,104706],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114627,103823],{"id":103822},[263,114629,114630,114633,114636,114642,114648,114655,114665],{},[27,114631,114632],{},"修改目标点位置。",[27,114634,114635],{},"重新运行，观察最终 tip 是否变化。",[27,114637,114638,114639,114641],{},"把 gravity 改成 ",[65,114640,104064],{},"，观察控制是否变差。",[27,114643,112655,114644,112659,114646,29869],{},[65,114645,103633],{},[65,114647,1715],{},[27,114649,103886,114650,103889,114652,114654],{},[65,114651,112070],{},[65,114653,108781],{},"，观察机械臂是否更难移动。",[27,114656,103886,114657,84007,114659,103889,114661,114664],{},[65,114658,104709],{},[65,114660,105621],{},[65,114662,114663],{},"0.2 0 0.6","，观察 reward 和 final tip。",[27,114666,114667],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114669,103928],{"id":103927},[19,114671,114673],{"id":114672},"site-not-found",[65,114674,114675],{},"site not found",[170,114677,114678,114679,102493,114682,29869],{},"检查 XML 中是否有 ",[65,114680,114681],{},"site name=\"tip\"",[65,114683,114684],{},"site name=\"target\"",[19,114686,114687],{"id":114687},"机械臂完全不动",[170,114689,103998],{},[263,114691,114692,114697,114700,114705],{},[27,114693,114694,114696],{},[65,114695,103633],{}," 是否为 2",[27,114698,114699],{},"actuator 是否引用正确 joint",[27,114701,114702,114704],{},[65,114703,102551],{}," 是否被赋值",[27,114706,114707,114708],{},"是否执行了 ",[65,114709,102160],{},[19,114711,114712],{"id":114712},"控制效果不好",[170,114714,114715],{},"正常。本章重点不是控制器最优，而是任务结构:",[58,114717,114720],{"className":114718,"code":114719,"language":6676,"meta":63},[6674],"obs → action → mj_step → reward → next_obs\n",[65,114721,114719],{"__ignoreMap":63},[19,114723,114725],{"id":114724},"tip-坐标不变化","tip 坐标不变化",[170,114727,104050],{},[263,114729,114730,114735,114743,114752],{},[27,114731,114732,114733,29869],{},"是否每步调用了 ",[65,114734,102160],{},[27,114736,114737,114738,102493,114740,29869],{},"是否写入了 ",[65,114739,107600],{},[65,114741,114742],{},"data.ctrl[1]",[27,114744,114745,114746,1841,114749,29869],{},"actuator 是否正确引用 ",[65,114747,114748],{},"joint1",[65,114750,114751],{},"joint2",[27,114753,114754],{},"控制输入是否太小。",[19,114756,114757],{"id":114757},"目标点不会动",[170,114759,114760],{},"本章的 target 是固定 site：",[58,114762,114764],{"className":54549,"code":114763,"language":54551,"meta":63,"style":63},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[65,114765,114766],{"__ignoreMap":63},[68,114767,114768,114770,114772,114774,114776,114778,114780,114782,114785],{"class":70,"line":71},[68,114769,2537],{"class":78},[68,114771,104685],{"class":52784},[68,114773,16408],{"class":74},[68,114775,1685],{"class":78},[68,114777,113433],{"class":1742},[68,114779,102581],{"class":74},[68,114781,1685],{"class":78},[68,114783,114784],{"class":1742},"\"0.5 0 0.4\"",[68,114786,114787],{"class":78}," ...\u002F>\n",[170,114789,114790,114791,114793],{},"它直接挂在 ",[65,114792,103316],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,114795,114796],{"id":114796},"机械臂不像真实机械臂",[170,114798,114799],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114801,104082],{"id":104081},[170,114803,114804],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[170,114806,114807],{},"核心公式：",[58,114809,114812],{"className":114810,"code":114811,"language":6676,"meta":63},[6674],"distance = ||tip - target||\nreward = -distance - action_cost\n",[65,114813,114811],{"__ignoreMap":63},[170,114815,114816],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1553,114818,114819],{},"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":63,"searchDepth":82,"depth":82,"links":114821},[114822,114823,114824,114829,114833,114834,114835,114843],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":114825},[114826,114827,114828],{"id":113025,"depth":98,"text":113026},{"id":113101,"depth":98,"text":113101},{"id":113131,"depth":98,"text":113132},{"id":102727,"depth":82,"text":102728,"children":114830},[114831,114832],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":114836},[114837,114838,114839,114840,114841,114842],{"id":114672,"depth":98,"text":114675},{"id":114687,"depth":98,"text":114687},{"id":114712,"depth":98,"text":114712},{"id":114724,"depth":98,"text":114725},{"id":114757,"depth":98,"text":114757},{"id":114796,"depth":98,"text":114796},{"id":104081,"depth":82,"text":104082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112829,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114850,"title":114851,"body":114852,"description":63,"extension":1565,"meta":118314,"navigation":1567,"path":118315,"seo":118316,"stem":118317,"__hash__":118318},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114853,"toc":118285},[114854,114857,114859,114862,114865,114890,114893,114899,114902,114908,114910,114912,114936,114938,114956,114958,115001,115003,115030,115032,115035,115087,115090,115096,115105,115108,115146,115149,115188,115191,115199,115206,115209,115215,115217,115271,115278,115323,115326,115330,115346,115356,115358,116619,116621,116633,116635,116646,116648,116651,116672,116675,116678,116711,116717,116720,116753,116756,116759,116800,116805,116819,116822,116835,116840,116863,116865,116880,116890,116905,116912,116932,116947,116965,116968,116985,116993,117009,117015,117047,117060,117092,117102,117137,117151,117197,117211,117253,117264,117277,117283,117316,117319,117346,117356,117396,117406,117423,117430,117448,117451,117492,117505,117520,117523,117546,117549,117561,117564,117583,117588,117609,117612,117627,117630,117664,117676,117691,117694,117719,117722,117741,117744,117776,117779,117803,117809,117839,117846,117859,117862,117864,117866,117872,117875,117878,117890,117893,117895,117949,117951,117955,117961,117970,117973,117980,117982,118005,118008,118012,118014,118032,118038,118040,118073,118076,118082,118086,118089,118109,118114,118118,118125,118145,118150,118154,118157,118177,118180,118266,118270,118273,118279,118282],[10,114855,114851],{"id":114856},"_8gymnasium-风格强化学习接口基础",[14,114858,102122],{"id":102121},[170,114860,114861],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[170,114863,114864],{},"你将实现:",[58,114866,114868],{"className":31862,"code":114867,"language":31864,"meta":63,"style":63},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[65,114869,114870,114880],{"__ignoreMap":63},[68,114871,114872,114875,114877],{"class":70,"line":71},[68,114873,114874],{"class":78},"obs, info ",[68,114876,1685],{"class":316},[68,114878,114879],{"class":78}," env.reset()\n",[68,114881,114882,114885,114887],{"class":70,"line":82},[68,114883,114884],{"class":78},"obs, reward, terminated, truncated, info ",[68,114886,1685],{"class":316},[68,114888,114889],{"class":78}," env.step(action)\n",[170,114891,114892],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[170,114894,114895,114896,114898],{},"前面章节的代码都是“脚本式”的：在 ",[65,114897,103770],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[170,114900,114901],{},"可以先记住 Gymnasium 环境的核心交互：",[58,114903,114906],{"className":114904,"code":114905,"language":6676,"meta":63},[6674],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[65,114907,114905],{"__ignoreMap":63},[14,114909,102245],{"id":102244},[170,114911,102248],{},[58,114913,114914],{"className":25307,"code":105863,"language":25309,"meta":63,"style":63},[65,114915,114916],{"__ignoreMap":63},[68,114917,114918,114920,114922,114924,114926,114928,114930,114932,114934],{"class":70,"line":71},[68,114919,26062],{"class":74},[68,114921,27801],{"class":1742},[68,114923,25319],{"class":1742},[68,114925,27886],{"class":85},[68,114927,105878],{"class":1742},[68,114929,102273],{"class":1742},[68,114931,103976],{"class":1742},[68,114933,102289],{"class":1742},[68,114935,105887],{"class":1742},[170,114937,104294],{},[58,114939,114941],{"className":25307,"code":114940,"language":25309,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[65,114942,114943],{"__ignoreMap":63},[68,114944,114945,114947,114949,114951,114953],{"class":70,"line":71},[68,114946,25316],{"class":74},[68,114948,25319],{"class":1742},[68,114950,102405],{"class":1742},[68,114952,109185],{"class":1742},[68,114954,114955],{"class":1742}," gymnasium\n",[170,114957,104311],{},[58,114959,114961],{"className":25307,"code":114960,"language":25309,"meta":63,"style":63},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[65,114962,114963,114980,114989],{"__ignoreMap":63},[68,114964,114965,114967,114969,114971,114974,114976,114978],{"class":70,"line":71},[68,114966,31814],{"class":74},[68,114968,30660],{"class":1742},[68,114970,26601],{"class":85},[68,114972,114973],{"class":1742}," mujoco-gym-api",[68,114975,102450],{"class":1742},[68,114977,102453],{"class":85},[68,114979,102456],{"class":85},[68,114981,114982,114984,114986],{"class":70,"line":82},[68,114983,31814],{"class":74},[68,114985,102463],{"class":1742},[68,114987,114988],{"class":1742}," mujoco-gym-api\n",[68,114990,114991,114993,114995,114997,114999],{"class":70,"line":98},[68,114992,25316],{"class":74},[68,114994,25319],{"class":1742},[68,114996,102405],{"class":1742},[68,114998,109185],{"class":1742},[68,115000,114955],{"class":1742},[170,115002,102479],{},[263,115004,115005,115015,115018,115024],{},[27,115006,115007,115008,115011,115012,29869],{},"本章使用 ",[65,115009,115010],{},"gymnasium","，不是旧版 ",[65,115013,115014],{},"gym",[27,115016,115017],{},"Gymnasium API 与旧 Gym API 有差异。",[27,115019,115020,115021,29869],{},"旧 Gym 常见返回值是 4 个: ",[65,115022,115023],{},"obs, reward, done, info",[27,115025,115026,115027,29869],{},"Gymnasium 返回值是 5 个: ",[65,115028,115029],{},"obs, reward, terminated, truncated, info",[14,115031,102520],{"id":102519},[170,115033,115034],{},"强化学习环境接口包含:",[128,115036,115037,115046],{},[131,115038,115039],{},[134,115040,115041,115044],{},[137,115042,115043],{"align":92},"方法",[137,115045,104171],{"align":92},[144,115047,115048,115058,115068,115078],{},[134,115049,115050,115055],{},[149,115051,115052],{"align":92},[65,115053,115054],{},"reset()",[149,115056,115057],{"align":92},"重置环境",[134,115059,115060,115065],{},[149,115061,115062],{"align":92},[65,115063,115064],{},"step(action)",[149,115066,115067],{"align":92},"执行动作",[134,115069,115070,115075],{},[149,115071,115072],{"align":92},[65,115073,115074],{},"observation_space",[149,115076,115077],{"align":92},"观测空间",[134,115079,115080,115085],{},[149,115081,115082],{"align":92},[65,115083,115084],{},"action_space",[149,115086,25140],{"align":92},[170,115088,115089],{},"一个最小环境需要完成:",[58,115091,115094],{"className":115092,"code":115093,"language":6676,"meta":63},[6674],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[65,115095,115093],{"__ignoreMap":63},[19,115097,115099,102493,115102,106113],{"id":115098},"terminated-和-truncated-的区别",[65,115100,115101],{},"terminated",[65,115103,115104],{},"truncated",[170,115106,115107],{},"Gymnasium 把“结束”拆成两个概念：",[128,115109,115110,115120],{},[131,115111,115112],{},[134,115113,115114,115116,115118],{},[137,115115,106049],{"align":92},[137,115117,102175],{"align":92},[137,115119,22674],{"align":92},[144,115121,115122,115134],{},[134,115123,115124,115128,115131],{},[149,115125,115126],{"align":92},[65,115127,115101],{},[149,115129,115130],{"align":92},"任务自然结束",[149,115132,115133],{"align":92},"机械臂到达目标、机器人摔倒",[134,115135,115136,115140,115143],{},[149,115137,115138],{"align":92},[65,115139,115104],{},[149,115141,115142],{"align":92},"因外部限制截断",[149,115144,115145],{"align":92},"达到最大步数、时间限制",[170,115147,115148],{},"本章中：",[58,115150,115152],{"className":31862,"code":115151,"language":31864,"meta":63,"style":63},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[65,115153,115154,115169],{"__ignoreMap":63},[68,115155,115156,115159,115161,115164,115166],{"class":70,"line":71},[68,115157,115158],{"class":78},"terminated ",[68,115160,1685],{"class":316},[68,115162,115163],{"class":78}," dist ",[68,115165,2537],{"class":316},[68,115167,115168],{"class":85}," 0.05\n",[68,115170,115171,115174,115176,115178,115181,115183,115185],{"class":70,"line":82},[68,115172,115173],{"class":78},"truncated ",[68,115175,1685],{"class":316},[68,115177,40357],{"class":85},[68,115179,115180],{"class":78},".steps ",[68,115182,3201],{"class":316},[68,115184,40357],{"class":85},[68,115186,115187],{"class":78},".max_steps\n",[170,115189,115190],{},"也就是：",[263,115192,115193,115196],{},[27,115194,115195],{},"末端距离目标小于 0.05，任务成功结束。",[27,115197,115198],{},"步数超过上限，episode 被截断。",[19,115200,115202,102493,115204],{"id":115201},"observation_space-和-action_space",[65,115203,115074],{},[65,115205,115084],{},[170,115207,115208],{},"这两个对象告诉算法：",[58,115210,115213],{"className":115211,"code":115212,"language":6676,"meta":63},[6674],"观测长什么样\n动作允许多大\n",[65,115214,115212],{"__ignoreMap":63},[170,115216,16121],{},[58,115218,115220],{"className":31862,"code":115219,"language":31864,"meta":63,"style":63},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[65,115221,115222],{"__ignoreMap":63},[68,115223,115224,115226,115229,115231,115234,115237,115240,115242,115244,115247,115249,115251,115253,115255,115257,115259,115261,115264,115266,115268],{"class":70,"line":71},[68,115225,32307],{"class":85},[68,115227,115228],{"class":78},".action_space ",[68,115230,1685],{"class":316},[68,115232,115233],{"class":78}," spaces.Box(",[68,115235,115236],{"class":6705},"low",[68,115238,115239],{"class":316},"=-",[68,115241,103878],{"class":85},[68,115243,13923],{"class":78},[68,115245,115246],{"class":6705},"high",[68,115248,1685],{"class":316},[68,115250,103878],{"class":85},[68,115252,13923],{"class":78},[68,115254,97438],{"class":6705},[68,115256,1685],{"class":316},[68,115258,1640],{"class":78},[68,115260,1715],{"class":85},[68,115262,115263],{"class":78},",), ",[68,115265,94975],{"class":6705},[68,115267,1685],{"class":316},[68,115269,115270],{"class":78},"np.float32)\n",[170,115272,115273,115274,115277],{},"表示动作是 2 维数组，每个值都在 ",[65,115275,115276],{},"[-1, 1]"," 范围内。",[58,115279,115281],{"className":31862,"code":115280,"language":31864,"meta":63,"style":63},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[65,115282,115283],{"__ignoreMap":63},[68,115284,115285,115287,115290,115292,115294,115296,115298,115301,115303,115305,115307,115309,115311,115313,115315,115317,115319,115321],{"class":70,"line":71},[68,115286,32307],{"class":85},[68,115288,115289],{"class":78},".observation_space ",[68,115291,1685],{"class":316},[68,115293,115233],{"class":78},[68,115295,115236],{"class":6705},[68,115297,115239],{"class":316},[68,115299,115300],{"class":78},"np.inf, ",[68,115302,115246],{"class":6705},[68,115304,1685],{"class":316},[68,115306,115300],{"class":78},[68,115308,97438],{"class":6705},[68,115310,1685],{"class":316},[68,115312,1640],{"class":78},[68,115314,313],{"class":85},[68,115316,115263],{"class":78},[68,115318,94975],{"class":6705},[68,115320,1685],{"class":316},[68,115322,115270],{"class":78},[170,115324,115325],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,115327,115329],{"id":115328},"frame_skip-是什么","frame_skip 是什么",[58,115331,115333],{"className":31862,"code":115332,"language":31864,"meta":63,"style":63},"self.frame_skip = 5\n",[65,115334,115335],{"__ignoreMap":63},[68,115336,115337,115339,115342,115344],{"class":70,"line":71},[68,115338,32307],{"class":85},[68,115340,115341],{"class":78},".frame_skip ",[68,115343,1685],{"class":316},[68,115345,55908],{"class":85},[170,115347,115348,115349,115352,115353,115355],{},"表示外部调用一次 ",[65,115350,115351],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[65,115354,102690],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115357,102728],{"id":102727},[58,115359,115361],{"className":31862,"code":115360,"language":31864,"meta":63,"style":63},"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",[65,115362,115363,115375,115381,115391,115402,115406,115410,115418,115423,115427,115431,115435,115439,115443,115447,115451,115456,115460,115464,115468,115473,115477,115481,115485,115489,115493,115497,115501,115505,115509,115513,115517,115521,115525,115543,115558,115562,115575,115585,115600,115617,115621,115642,115661,115686,115700,115704,115714,115726,115736,115740,115782,115820,115824,115834,115850,115865,115884,115891,115895,115908,115923,115938,115951,115970,115986,115990,116031,116046,116061,116065,116104,116115,116128,116132,116142,116151,116155,116165,116180,116198,116202,116213,116230,116243,116247,116257,116261,116272,116283,116287,116301,116315,116331,116335,116348,116365,116380,116387,116391,116395,116407,116417,116435,116447,116459,116463,116471,116487,116496,116505,116513,116555,116568,116573,116577,116595,116599,116603,116615],{"__ignoreMap":63},[68,115364,115365,115367,115370,115372],{"class":70,"line":71},[68,115366,31876],{"class":316},[68,115368,115369],{"class":78}," gymnasium ",[68,115371,32867],{"class":316},[68,115373,115374],{"class":78}," gym\n",[68,115376,115377,115379],{"class":70,"line":82},[68,115378,31876],{"class":316},[68,115380,102776],{"class":78},[68,115382,115383,115385,115387,115389],{"class":70,"line":98},[68,115384,31876],{"class":316},[68,115386,32864],{"class":78},[68,115388,32867],{"class":316},[68,115390,32870],{"class":78},[68,115392,115393,115395,115397,115399],{"class":70,"line":104},[68,115394,32221],{"class":316},[68,115396,115369],{"class":78},[68,115398,31876],{"class":316},[68,115400,115401],{"class":78}," spaces\n",[68,115403,115404],{"class":70,"line":112},[68,115405,3890],{"emptyLinePlaceholder":1567},[68,115407,115408],{"class":70,"line":124},[68,115409,3890],{"emptyLinePlaceholder":1567},[68,115411,115412,115414,115416],{"class":70,"line":1496},[68,115413,102789],{"class":85},[68,115415,15052],{"class":316},[68,115417,102794],{"class":1742},[68,115419,115420],{"class":70,"line":1502},[68,115421,115422],{"class":1742},"\u003Cmujoco model=\"gym_reacher\">\n",[68,115424,115425],{"class":70,"line":1510},[68,115426,113212],{"class":1742},[68,115428,115429],{"class":70,"line":1521},[68,115430,3890],{"emptyLinePlaceholder":1567},[68,115432,115433],{"class":70,"line":3103},[68,115434,102813],{"class":1742},[68,115436,115437],{"class":70,"line":3108},[68,115438,113230],{"class":1742},[68,115440,115441],{"class":70,"line":3114},[68,115442,3890],{"emptyLinePlaceholder":1567},[68,115444,115445],{"class":70,"line":3119},[68,115446,113239],{"class":1742},[68,115448,115449],{"class":70,"line":3133},[68,115450,113244],{"class":1742},[68,115452,115453],{"class":70,"line":3138},[68,115454,115455],{"class":1742},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,115457,115458],{"class":70,"line":3144},[68,115459,3890],{"emptyLinePlaceholder":1567},[68,115461,115462],{"class":70,"line":3165},[68,115463,113258],{"class":1742},[68,115465,115466],{"class":70,"line":3170},[68,115467,113263],{"class":1742},[68,115469,115470],{"class":70,"line":3184},[68,115471,115472],{"class":1742},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,115474,115475],{"class":70,"line":3189},[68,115476,113273],{"class":1742},[68,115478,115479],{"class":70,"line":3218},[68,115480,107912],{"class":1742},[68,115482,115483],{"class":70,"line":3223},[68,115484,102842],{"class":1742},[68,115486,115487],{"class":70,"line":3240},[68,115488,102847],{"class":1742},[68,115490,115491],{"class":70,"line":3245},[68,115492,3890],{"emptyLinePlaceholder":1567},[68,115494,115495],{"class":70,"line":3250},[68,115496,107929],{"class":1742},[68,115498,115499],{"class":70,"line":3255},[68,115500,113298],{"class":1742},[68,115502,115503],{"class":70,"line":3269},[68,115504,113303],{"class":1742},[68,115506,115507],{"class":70,"line":3274},[68,115508,107939],{"class":1742},[68,115510,115511],{"class":70,"line":4067},[68,115512,102852],{"class":1742},[68,115514,115515],{"class":70,"line":4081},[68,115516,97173],{"class":1742},[68,115518,115519],{"class":70,"line":4089},[68,115520,3890],{"emptyLinePlaceholder":1567},[68,115522,115523],{"class":70,"line":4094},[68,115524,3890],{"emptyLinePlaceholder":1567},[68,115526,115527,115529,115532,115534,115536,115538,115541],{"class":70,"line":4100},[68,115528,16182],{"class":316},[68,115530,115531],{"class":74}," ReacherEnv",[68,115533,1640],{"class":78},[68,115535,115014],{"class":74},[68,115537,2186],{"class":78},[68,115539,115540],{"class":74},"Env",[68,115542,32270],{"class":78},[68,115544,115545,115548,115550,115552,115555],{"class":70,"line":4106},[68,115546,115547],{"class":78},"    metadata ",[68,115549,1685],{"class":316},[68,115551,5938],{"class":78},[68,115553,115554],{"class":1742},"\"render_modes\"",[68,115556,115557],{"class":78},": []}\n",[68,115559,115560],{"class":70,"line":4111},[68,115561,3890],{"emptyLinePlaceholder":1567},[68,115563,115564,115566,115568,115571,115573],{"class":70,"line":9437},[68,115565,32285],{"class":316},[68,115567,32288],{"class":85},[68,115569,115570],{"class":78},"(self) -> ",[68,115572,97161],{"class":85},[68,115574,5229],{"class":78},[68,115576,115577,115579,115581,115583],{"class":70,"line":9461},[68,115578,32301],{"class":85},[68,115580,18748],{"class":78},[68,115582,32313],{"class":85},[68,115584,3466],{"class":78},[68,115586,115587,115589,115592,115594,115596,115598],{"class":70,"line":9466},[68,115588,32329],{"class":85},[68,115590,115591],{"class":78},".model ",[68,115593,1685],{"class":316},[68,115595,102887],{"class":78},[68,115597,102789],{"class":85},[68,115599,1646],{"class":78},[68,115601,115602,115604,115607,115609,115612,115614],{"class":70,"line":9472},[68,115603,32329],{"class":85},[68,115605,115606],{"class":78},".data ",[68,115608,1685],{"class":316},[68,115610,115611],{"class":78}," mujoco.MjData(",[68,115613,32307],{"class":85},[68,115615,115616],{"class":78},".model)\n",[68,115618,115619],{"class":70,"line":9499},[68,115620,3890],{"emptyLinePlaceholder":1567},[68,115622,115623,115625,115628,115630,115633,115635,115638,115640],{"class":70,"line":9504},[68,115624,32329],{"class":85},[68,115626,115627],{"class":78},".tip_site_id ",[68,115629,1685],{"class":316},[68,115631,115632],{"class":78}," mujoco.mj_name2id(",[68,115634,32307],{"class":85},[68,115636,115637],{"class":78},".model, mujoco.mjtObj.mjOBJ_SITE, ",[68,115639,113010],{"class":1742},[68,115641,1646],{"class":78},[68,115643,115644,115646,115649,115651,115653,115655,115657,115659],{"class":70,"line":9510},[68,115645,32329],{"class":85},[68,115647,115648],{"class":78},".target_site_id ",[68,115650,1685],{"class":316},[68,115652,115632],{"class":78},[68,115654,32307],{"class":85},[68,115656,115637],{"class":78},[68,115658,113433],{"class":1742},[68,115660,1646],{"class":78},[68,115662,115663,115665,115667,115669,115671,115673,115676,115678,115680,115682,115684],{"class":70,"line":9522},[68,115664,3987],{"class":316},[68,115666,40357],{"class":85},[68,115668,115627],{"class":78},[68,115670,2537],{"class":316},[68,115672,5583],{"class":85},[68,115674,115675],{"class":316}," or",[68,115677,40357],{"class":85},[68,115679,115648],{"class":78},[68,115681,2537],{"class":316},[68,115683,5583],{"class":85},[68,115685,5229],{"class":78},[68,115687,115688,115691,115693,115695,115698],{"class":70,"line":9534},[68,115689,115690],{"class":316},"            raise",[68,115692,104910],{"class":85},[68,115694,1640],{"class":78},[68,115696,115697],{"class":1742},"\"required sites not found\"",[68,115699,1646],{"class":78},[68,115701,115702],{"class":70,"line":9546},[68,115703,3890],{"emptyLinePlaceholder":1567},[68,115705,115706,115708,115710,115712],{"class":70,"line":11204},[68,115707,32329],{"class":85},[68,115709,115341],{"class":78},[68,115711,1685],{"class":316},[68,115713,55908],{"class":85},[68,115715,115716,115718,115721,115723],{"class":70,"line":11229},[68,115717,32329],{"class":85},[68,115719,115720],{"class":78},".max_steps ",[68,115722,1685],{"class":316},[68,115724,115725],{"class":85}," 200\n",[68,115727,115728,115730,115732,115734],{"class":70,"line":11252},[68,115729,32329],{"class":85},[68,115731,115180],{"class":78},[68,115733,1685],{"class":316},[68,115735,48817],{"class":85},[68,115737,115738],{"class":70,"line":11276},[68,115739,3890],{"emptyLinePlaceholder":1567},[68,115741,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780],{"class":70,"line":11281},[68,115743,32329],{"class":85},[68,115745,115228],{"class":78},[68,115747,1685],{"class":316},[68,115749,115233],{"class":78},[68,115751,115236],{"class":6705},[68,115753,115239],{"class":316},[68,115755,103878],{"class":85},[68,115757,13923],{"class":78},[68,115759,115246],{"class":6705},[68,115761,1685],{"class":316},[68,115763,103878],{"class":85},[68,115765,13923],{"class":78},[68,115767,97438],{"class":6705},[68,115769,1685],{"class":316},[68,115771,1640],{"class":78},[68,115773,1715],{"class":85},[68,115775,115263],{"class":78},[68,115777,94975],{"class":6705},[68,115779,1685],{"class":316},[68,115781,115270],{"class":78},[68,115783,115784,115786,115788,115790,115792,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818],{"class":70,"line":11286},[68,115785,32329],{"class":85},[68,115787,115289],{"class":78},[68,115789,1685],{"class":316},[68,115791,115233],{"class":78},[68,115793,115236],{"class":6705},[68,115795,115239],{"class":316},[68,115797,115300],{"class":78},[68,115799,115246],{"class":6705},[68,115801,1685],{"class":316},[68,115803,115300],{"class":78},[68,115805,97438],{"class":6705},[68,115807,1685],{"class":316},[68,115809,1640],{"class":78},[68,115811,313],{"class":85},[68,115813,115263],{"class":78},[68,115815,94975],{"class":6705},[68,115817,1685],{"class":316},[68,115819,115270],{"class":78},[68,115821,115822],{"class":70,"line":11291},[68,115823,3890],{"emptyLinePlaceholder":1567},[68,115825,115826,115828,115831],{"class":70,"line":11300},[68,115827,32285],{"class":316},[68,115829,115830],{"class":74}," _get_obs",[68,115832,115833],{"class":78},"(self) -> np.ndarray:\n",[68,115835,115836,115838,115840,115842,115845,115847],{"class":70,"line":11305},[68,115837,113611],{"class":78},[68,115839,1685],{"class":316},[68,115841,40357],{"class":85},[68,115843,115844],{"class":78},".data.site_xpos[",[68,115846,32307],{"class":85},[68,115848,115849],{"class":78},".tip_site_id].copy()\n",[68,115851,115852,115854,115856,115858,115860,115862],{"class":70,"line":11311},[68,115853,113624],{"class":78},[68,115855,1685],{"class":316},[68,115857,40357],{"class":85},[68,115859,115844],{"class":78},[68,115861,32307],{"class":85},[68,115863,115864],{"class":78},".target_site_id].copy()\n",[68,115866,115867,115869,115871,115874,115876,115879,115881],{"class":70,"line":11332},[68,115868,111656],{"class":78},[68,115870,1685],{"class":316},[68,115872,115873],{"class":78}," np.concatenate([",[68,115875,32307],{"class":85},[68,115877,115878],{"class":78},".data.qpos.copy(), ",[68,115880,32307],{"class":85},[68,115882,115883],{"class":78},".data.qvel.copy(), tip, target])\n",[68,115885,115886,115888],{"class":70,"line":11338},[68,115887,16240],{"class":316},[68,115889,115890],{"class":78}," obs.astype(np.float32)\n",[68,115892,115893],{"class":70,"line":11352},[68,115894,3890],{"emptyLinePlaceholder":1567},[68,115896,115897,115899,115902,115904,115906],{"class":70,"line":11358},[68,115898,32285],{"class":316},[68,115900,115901],{"class":74}," _get_reward",[68,115903,115570],{"class":78},[68,115905,1679],{"class":85},[68,115907,5229],{"class":78},[68,115909,115910,115912,115914,115916,115918,115920],{"class":70,"line":11385},[68,115911,113611],{"class":78},[68,115913,1685],{"class":316},[68,115915,40357],{"class":85},[68,115917,115844],{"class":78},[68,115919,32307],{"class":85},[68,115921,115922],{"class":78},".tip_site_id]\n",[68,115924,115925,115927,115929,115931,115933,115935],{"class":70,"line":11394},[68,115926,113624],{"class":78},[68,115928,1685],{"class":316},[68,115930,40357],{"class":85},[68,115932,115844],{"class":78},[68,115934,32307],{"class":85},[68,115936,115937],{"class":78},".target_site_id]\n",[68,115939,115940,115943,115945,115947,115949],{"class":70,"line":11400},[68,115941,115942],{"class":78},"        dist ",[68,115944,1685],{"class":316},[68,115946,113075],{"class":78},[68,115948,2160],{"class":316},[68,115950,113080],{"class":78},[68,115952,115953,115956,115958,115960,115962,115965,115967],{"class":70,"line":11408},[68,115954,115955],{"class":78},"        control_cost ",[68,115957,1685],{"class":316},[68,115959,113511],{"class":85},[68,115961,8007],{"class":316},[68,115963,115964],{"class":78}," np.sum(np.square(",[68,115966,32307],{"class":85},[68,115968,115969],{"class":78},".data.ctrl))\n",[68,115971,115972,115974,115976,115978,115980,115982,115984],{"class":70,"line":11413},[68,115973,16240],{"class":316},[68,115975,111271],{"class":85},[68,115977,1640],{"class":78},[68,115979,2160],{"class":316},[68,115981,113070],{"class":78},[68,115983,2160],{"class":316},[68,115985,113533],{"class":78},[68,115987,115988],{"class":70,"line":18091},[68,115989,3890],{"emptyLinePlaceholder":1567},[68,115991,115992,115994,115997,116000,116002,116005,116007,116009,116011,116013,116015,116018,116021,116023,116025,116027,116029],{"class":70,"line":18097},[68,115993,32285],{"class":316},[68,115995,115996],{"class":74}," reset",[68,115998,115999],{"class":78},"(self, ",[68,116001,2083],{"class":316},[68,116003,116004],{"class":78},", seed: ",[68,116006,1643],{"class":85},[68,116008,26595],{"class":316},[68,116010,40417],{"class":85},[68,116012,15052],{"class":316},[68,116014,40417],{"class":85},[68,116016,116017],{"class":78},", options: ",[68,116019,116020],{"class":85},"dict",[68,116022,26595],{"class":316},[68,116024,40417],{"class":85},[68,116026,15052],{"class":316},[68,116028,40417],{"class":85},[68,116030,32270],{"class":78},[68,116032,116033,116035,116038,116041,116043],{"class":70,"line":18120},[68,116034,32301],{"class":85},[68,116036,116037],{"class":78},"().reset(",[68,116039,116040],{"class":6705},"seed",[68,116042,1685],{"class":316},[68,116044,116045],{"class":78},"seed)\n",[68,116047,116048,116051,116053,116056,116058],{"class":70,"line":18126},[68,116049,116050],{"class":78},"        mujoco.mj_resetData(",[68,116052,32307],{"class":85},[68,116054,116055],{"class":78},".model, ",[68,116057,32307],{"class":85},[68,116059,116060],{"class":78},".data)\n",[68,116062,116063],{"class":70,"line":18149},[68,116064,3890],{"emptyLinePlaceholder":1567},[68,116066,116067,116069,116072,116074,116076,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101],{"class":70,"line":18163},[68,116068,32329],{"class":85},[68,116070,116071],{"class":78},".data.qpos[:] ",[68,116073,1685],{"class":316},[68,116075,40357],{"class":85},[68,116077,116078],{"class":78},".np_random.uniform(",[68,116080,115236],{"class":6705},[68,116082,115239],{"class":316},[68,116084,87686],{"class":85},[68,116086,13923],{"class":78},[68,116088,115246],{"class":6705},[68,116090,1685],{"class":316},[68,116092,87686],{"class":85},[68,116094,13923],{"class":78},[68,116096,32980],{"class":6705},[68,116098,1685],{"class":316},[68,116100,32307],{"class":85},[68,116102,116103],{"class":78},".model.nq)\n",[68,116105,116106,116108,116111,116113],{"class":70,"line":18183},[68,116107,32329],{"class":85},[68,116109,116110],{"class":78},".data.qvel[:] ",[68,116112,1685],{"class":316},[68,116114,106235],{"class":85},[68,116116,116117,116120,116122,116124,116126],{"class":70,"line":18189},[68,116118,116119],{"class":78},"        mujoco.mj_forward(",[68,116121,32307],{"class":85},[68,116123,116055],{"class":78},[68,116125,32307],{"class":85},[68,116127,116060],{"class":78},[68,116129,116130],{"class":70,"line":18200},[68,116131,3890],{"emptyLinePlaceholder":1567},[68,116133,116134,116136,116138,116140],{"class":70,"line":18223},[68,116135,32329],{"class":85},[68,116137,115180],{"class":78},[68,116139,1685],{"class":316},[68,116141,48817],{"class":85},[68,116143,116144,116146,116148],{"class":70,"line":18245},[68,116145,16240],{"class":316},[68,116147,40357],{"class":85},[68,116149,116150],{"class":78},"._get_obs(), {}\n",[68,116152,116153],{"class":70,"line":18250},[68,116154,3890],{"emptyLinePlaceholder":1567},[68,116156,116157,116159,116162],{"class":70,"line":18256},[68,116158,32285],{"class":316},[68,116160,116161],{"class":74}," step",[68,116163,116164],{"class":78},"(self, action):\n",[68,116166,116167,116169,116171,116174,116176,116178],{"class":70,"line":18270},[68,116168,111696],{"class":78},[68,116170,1685],{"class":316},[68,116172,116173],{"class":78}," np.asarray(action, ",[68,116175,94975],{"class":6705},[68,116177,1685],{"class":316},[68,116179,115270],{"class":78},[68,116181,116182,116184,116186,116188,116190,116193,116195],{"class":70,"line":18283},[68,116183,111696],{"class":78},[68,116185,1685],{"class":316},[68,116187,108921],{"class":78},[68,116189,32307],{"class":85},[68,116191,116192],{"class":78},".action_space.low, ",[68,116194,32307],{"class":85},[68,116196,116197],{"class":78},".action_space.high)\n",[68,116199,116200],{"class":70,"line":18288},[68,116201,3890],{"emptyLinePlaceholder":1567},[68,116203,116204,116206,116209,116211],{"class":70,"line":18302},[68,116205,32329],{"class":85},[68,116207,116208],{"class":78},".data.ctrl[:] ",[68,116210,1685],{"class":316},[68,116212,108944],{"class":78},[68,116214,116215,116217,116219,116221,116223,116225,116227],{"class":70,"line":18307},[68,116216,4893],{"class":316},[68,116218,102976],{"class":78},[68,116220,27529],{"class":316},[68,116222,33927],{"class":85},[68,116224,1640],{"class":78},[68,116226,32307],{"class":85},[68,116228,116229],{"class":78},".frame_skip):\n",[68,116231,116232,116235,116237,116239,116241],{"class":70,"line":18313},[68,116233,116234],{"class":78},"            mujoco.mj_step(",[68,116236,32307],{"class":85},[68,116238,116055],{"class":78},[68,116240,32307],{"class":85},[68,116242,116060],{"class":78},[68,116244,116245],{"class":70,"line":18318},[68,116246,3890],{"emptyLinePlaceholder":1567},[68,116248,116249,116251,116253,116255],{"class":70,"line":18332},[68,116250,32329],{"class":85},[68,116252,115180],{"class":78},[68,116254,10965],{"class":316},[68,116256,57177],{"class":85},[68,116258,116259],{"class":70,"line":18337},[68,116260,3890],{"emptyLinePlaceholder":1567},[68,116262,116263,116265,116267,116269],{"class":70,"line":18342},[68,116264,111656],{"class":78},[68,116266,1685],{"class":316},[68,116268,40357],{"class":85},[68,116270,116271],{"class":78},"._get_obs()\n",[68,116273,116274,116276,116278,116280],{"class":70,"line":18356},[68,116275,111761],{"class":78},[68,116277,1685],{"class":316},[68,116279,40357],{"class":85},[68,116281,116282],{"class":78},"._get_reward()\n",[68,116284,116285],{"class":70,"line":18368},[68,116286,3890],{"emptyLinePlaceholder":1567},[68,116288,116289,116291,116293,116295,116297,116299],{"class":70,"line":18373},[68,116290,113611],{"class":78},[68,116292,1685],{"class":316},[68,116294,40357],{"class":85},[68,116296,115844],{"class":78},[68,116298,32307],{"class":85},[68,116300,115922],{"class":78},[68,116302,116303,116305,116307,116309,116311,116313],{"class":70,"line":18386},[68,116304,113624],{"class":78},[68,116306,1685],{"class":316},[68,116308,40357],{"class":85},[68,116310,115844],{"class":78},[68,116312,32307],{"class":85},[68,116314,115937],{"class":78},[68,116316,116317,116319,116321,116323,116326,116328],{"class":70,"line":18391},[68,116318,115942],{"class":78},[68,116320,1685],{"class":316},[68,116322,111271],{"class":85},[68,116324,116325],{"class":78},"(np.linalg.norm(tip ",[68,116327,2160],{"class":316},[68,116329,116330],{"class":78}," target))\n",[68,116332,116333],{"class":70,"line":18396},[68,116334,3890],{"emptyLinePlaceholder":1567},[68,116336,116337,116340,116342,116344,116346],{"class":70,"line":18401},[68,116338,116339],{"class":78},"        terminated ",[68,116341,1685],{"class":316},[68,116343,115163],{"class":78},[68,116345,2537],{"class":316},[68,116347,115168],{"class":85},[68,116349,116350,116353,116355,116357,116359,116361,116363],{"class":70,"line":18414},[68,116351,116352],{"class":78},"        truncated ",[68,116354,1685],{"class":316},[68,116356,40357],{"class":85},[68,116358,115180],{"class":78},[68,116360,3201],{"class":316},[68,116362,40357],{"class":85},[68,116364,115187],{"class":78},[68,116366,116367,116370,116372,116374,116377],{"class":70,"line":18419},[68,116368,116369],{"class":78},"        info ",[68,116371,1685],{"class":316},[68,116373,5938],{"class":78},[68,116375,116376],{"class":1742},"\"distance\"",[68,116378,116379],{"class":78},": dist}\n",[68,116381,116382,116384],{"class":70,"line":34117},[68,116383,16240],{"class":316},[68,116385,116386],{"class":78}," obs, reward, terminated, truncated, info\n",[68,116388,116389],{"class":70,"line":34123},[68,116390,3890],{"emptyLinePlaceholder":1567},[68,116392,116393],{"class":70,"line":34129},[68,116394,3890],{"emptyLinePlaceholder":1567},[68,116396,116397,116399,116401,116403,116405],{"class":70,"line":34135},[68,116398,33431],{"class":316},[68,116400,3463],{"class":74},[68,116402,102873],{"class":78},[68,116404,97161],{"class":85},[68,116406,5229],{"class":78},[68,116408,116409,116412,116414],{"class":70,"line":34141},[68,116410,116411],{"class":78},"    env ",[68,116413,1685],{"class":316},[68,116415,116416],{"class":78}," ReacherEnv()\n",[68,116418,116419,116422,116424,116427,116429,116431,116433],{"class":70,"line":34152},[68,116420,116421],{"class":78},"    obs, info ",[68,116423,1685],{"class":316},[68,116425,116426],{"class":78}," env.reset(",[68,116428,116040],{"class":6705},[68,116430,1685],{"class":316},[68,116432,1248],{"class":85},[68,116434,1646],{"class":78},[68,116436,116437,116439,116441,116444],{"class":70,"line":34158},[68,116438,32783],{"class":85},[68,116440,1640],{"class":78},[68,116442,116443],{"class":1742},"\"initial obs shape:\"",[68,116445,116446],{"class":78},", obs.shape)\n",[68,116448,116449,116451,116453,116456],{"class":70,"line":34178},[68,116450,32783],{"class":85},[68,116452,1640],{"class":78},[68,116454,116455],{"class":1742},"\"initial info:\"",[68,116457,116458],{"class":78},", info)\n",[68,116460,116461],{"class":70,"line":34184},[68,116462,3890],{"emptyLinePlaceholder":1567},[68,116464,116465,116467,116469],{"class":70,"line":34195},[68,116466,111627],{"class":78},[68,116468,1685],{"class":316},[68,116470,106235],{"class":85},[68,116472,116473,116475,116477,116479,116481,116483,116485],{"class":70,"line":34201},[68,116474,4691],{"class":316},[68,116476,33100],{"class":78},[68,116478,27529],{"class":316},[68,116480,33927],{"class":85},[68,116482,1640],{"class":78},[68,116484,333],{"class":85},[68,116486,32270],{"class":78},[68,116488,116489,116491,116493],{"class":70,"line":34207},[68,116490,111696],{"class":78},[68,116492,1685],{"class":316},[68,116494,116495],{"class":78}," env.action_space.sample()\n",[68,116497,116498,116501,116503],{"class":70,"line":34213},[68,116499,116500],{"class":78},"        obs, reward, terminated, truncated, info ",[68,116502,1685],{"class":316},[68,116504,114889],{"class":78},[68,116506,116507,116509,116511],{"class":70,"line":34219},[68,116508,111771],{"class":78},[68,116510,10965],{"class":316},[68,116512,111776],{"class":78},[68,116514,116515,116517,116519,116521,116523,116526,116528,116530,116533,116535,116537,116540,116542,116544,116547,116549,116551,116553],{"class":70,"line":34225},[68,116516,33935],{"class":85},[68,116518,1640],{"class":78},[68,116520,111805],{"class":1742},[68,116522,111808],{"class":78},[68,116524,116525],{"class":1742},"\"reward:\"",[68,116527,13923],{"class":78},[68,116529,33502],{"class":85},[68,116531,116532],{"class":78},"(reward, ",[68,116534,1709],{"class":85},[68,116536,111819],{"class":78},[68,116538,116539],{"class":1742},"\"distance:\"",[68,116541,13923],{"class":78},[68,116543,33502],{"class":85},[68,116545,116546],{"class":78},"(info[",[68,116548,116376],{"class":1742},[68,116550,113676],{"class":78},[68,116552,1709],{"class":85},[68,116554,31981],{"class":78},[68,116556,116557,116559,116562,116565],{"class":70,"line":34231},[68,116558,3987],{"class":316},[68,116560,116561],{"class":78}," terminated ",[68,116563,116564],{"class":316},"or",[68,116566,116567],{"class":78}," truncated:\n",[68,116569,116570],{"class":70,"line":34237},[68,116571,116572],{"class":316},"            break\n",[68,116574,116575],{"class":70,"line":34257},[68,116576,3890],{"emptyLinePlaceholder":1567},[68,116578,116579,116581,116583,116585,116587,116589,116591,116593],{"class":70,"line":34263},[68,116580,32783],{"class":85},[68,116582,1640],{"class":78},[68,116584,111850],{"class":1742},[68,116586,13923],{"class":78},[68,116588,33502],{"class":85},[68,116590,111857],{"class":78},[68,116592,1709],{"class":85},[68,116594,31981],{"class":78},[68,116596,116597],{"class":70,"line":34279},[68,116598,3890],{"emptyLinePlaceholder":1567},[68,116600,116601],{"class":70,"line":34285},[68,116602,3890],{"emptyLinePlaceholder":1567},[68,116604,116605,116607,116609,116611,116613],{"class":70,"line":34299},[68,116606,3023],{"class":316},[68,116608,32704],{"class":85},[68,116610,103034],{"class":316},[68,116612,103037],{"class":1742},[68,116614,5229],{"class":78},[68,116616,116617],{"class":70,"line":34305},[68,116618,103044],{"class":78},[170,116620,105045],{},[58,116622,116624],{"className":25307,"code":116623,"language":25309,"meta":63,"style":63},"touch ch8_gym_env.py\n",[65,116625,116626],{"__ignoreMap":63},[68,116627,116628,116630],{"class":70,"line":71},[68,116629,102758],{"class":74},[68,116631,116632],{"class":1742}," ch8_gym_env.py\n",[170,116634,111918],{},[58,116636,116638],{"className":25307,"code":116637,"language":25309,"meta":63,"style":63},"python ch8_gym_env.py\n",[65,116639,116640],{"__ignoreMap":63},[68,116641,116642,116644],{"class":70,"line":71},[68,116643,31864],{"class":74},[68,116645,116632],{"class":1742},[19,116647,103047],{"id":103047},[170,116649,116650],{},"继承 Gymnasium 环境：",[58,116652,116654],{"className":31862,"code":116653,"language":31864,"meta":63,"style":63},"class ReacherEnv(gym.Env):\n",[65,116655,116656],{"__ignoreMap":63},[68,116657,116658,116660,116662,116664,116666,116668,116670],{"class":70,"line":71},[68,116659,16182],{"class":316},[68,116661,115531],{"class":74},[68,116663,1640],{"class":78},[68,116665,115014],{"class":74},[68,116667,2186],{"class":78},[68,116669,115540],{"class":74},[68,116671,32270],{"class":78},[170,116673,116674],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[170,116676,116677],{},"初始化模型：",[58,116679,116681],{"className":31862,"code":116680,"language":31864,"meta":63,"style":63},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[65,116682,116683,116697],{"__ignoreMap":63},[68,116684,116685,116687,116689,116691,116693,116695],{"class":70,"line":71},[68,116686,32307],{"class":85},[68,116688,115591],{"class":78},[68,116690,1685],{"class":316},[68,116692,102887],{"class":78},[68,116694,102789],{"class":85},[68,116696,1646],{"class":78},[68,116698,116699,116701,116703,116705,116707,116709],{"class":70,"line":82},[68,116700,32307],{"class":85},[68,116702,115606],{"class":78},[68,116704,1685],{"class":316},[68,116706,115611],{"class":78},[68,116708,32307],{"class":85},[68,116710,115616],{"class":78},[170,116712,116713,116714,116716],{},"这和前面章节一样，只是现在放到了类的 ",[65,116715,32313],{}," 里。",[170,116718,116719],{},"缓存 site ID：",[58,116721,116723],{"className":31862,"code":116722,"language":31864,"meta":63,"style":63},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[65,116724,116725,116739],{"__ignoreMap":63},[68,116726,116727,116729,116731,116733,116735,116737],{"class":70,"line":71},[68,116728,32307],{"class":85},[68,116730,115627],{"class":78},[68,116732,1685],{"class":316},[68,116734,115632],{"class":78},[68,116736,91029],{"class":85},[68,116738,1646],{"class":78},[68,116740,116741,116743,116745,116747,116749,116751],{"class":70,"line":82},[68,116742,32307],{"class":85},[68,116744,115648],{"class":78},[68,116746,1685],{"class":316},[68,116748,115632],{"class":78},[68,116750,91029],{"class":85},[68,116752,1646],{"class":78},[170,116754,116755],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[170,116757,116758],{},"reset：",[58,116760,116762],{"className":31862,"code":116761,"language":31864,"meta":63,"style":63},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[65,116763,116764],{"__ignoreMap":63},[68,116765,116766,116768,116770,116772,116774,116776,116778,116780,116782,116784,116786,116788,116790,116792,116794,116796,116798],{"class":70,"line":71},[68,116767,33431],{"class":316},[68,116769,115996],{"class":74},[68,116771,115999],{"class":78},[68,116773,2083],{"class":316},[68,116775,116004],{"class":78},[68,116777,1643],{"class":85},[68,116779,26595],{"class":316},[68,116781,40417],{"class":85},[68,116783,15052],{"class":316},[68,116785,40417],{"class":85},[68,116787,116017],{"class":78},[68,116789,116020],{"class":85},[68,116791,26595],{"class":316},[68,116793,40417],{"class":85},[68,116795,15052],{"class":316},[68,116797,40417],{"class":85},[68,116799,32270],{"class":78},[170,116801,116802,116804],{},[65,116803,71534],{}," 做四件事：",[263,116806,116807,116810,116813,116816],{},[27,116808,116809],{},"设置随机种子。",[27,116811,116812],{},"重置 MuJoCo data。",[27,116814,116815],{},"随机初始化关节角。",[27,116817,116818],{},"返回初始观测和 info。",[170,116820,116821],{},"step：",[58,116823,116825],{"className":31862,"code":116824,"language":31864,"meta":63,"style":63},"def step(self, action):\n",[65,116826,116827],{"__ignoreMap":63},[68,116828,116829,116831,116833],{"class":70,"line":71},[68,116830,33431],{"class":316},[68,116832,116161],{"class":74},[68,116834,116164],{"class":78},[170,116836,116837,116839],{},[65,116838,108608],{}," 做六件事：",[263,116841,116842,116845,116851,116854,116857,116860],{},[27,116843,116844],{},"检查并裁剪 action。",[27,116846,116847,116848,29869],{},"写入 ",[65,116849,116850],{},"self.data.ctrl",[27,116852,116853],{},"连续推进若干个 MuJoCo 物理步。",[27,116855,116856],{},"计算新观测。",[27,116858,116859],{},"计算奖励和结束条件。",[27,116861,116862],{},"返回 Gymnasium 标准五元组。",[19,116864,103183],{"id":103183},[58,116866,116868],{"className":31862,"code":116867,"language":31864,"meta":63,"style":63},"import gymnasium as gym\n",[65,116869,116870],{"__ignoreMap":63},[68,116871,116872,116874,116876,116878],{"class":70,"line":71},[68,116873,31876],{"class":316},[68,116875,115369],{"class":78},[68,116877,32867],{"class":316},[68,116879,115374],{"class":78},[170,116881,116882,116883,116885,116886,116889],{},"导入 Gymnasium，并起别名 ",[65,116884,115014],{},"。后面写 ",[65,116887,116888],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[58,116891,116893],{"className":31862,"code":116892,"language":31864,"meta":63,"style":63},"from gymnasium import spaces\n",[65,116894,116895],{"__ignoreMap":63},[68,116896,116897,116899,116901,116903],{"class":70,"line":71},[68,116898,32221],{"class":316},[68,116900,115369],{"class":78},[68,116902,31876],{"class":316},[68,116904,115401],{"class":78},[170,116906,116907,116908,116911],{},"导入空间定义工具。",[65,116909,116910],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[58,116913,116914],{"className":31862,"code":116653,"language":31864,"meta":63,"style":63},[65,116915,116916],{"__ignoreMap":63},[68,116917,116918,116920,116922,116924,116926,116928,116930],{"class":70,"line":71},[68,116919,16182],{"class":316},[68,116921,115531],{"class":74},[68,116923,1640],{"class":78},[68,116925,115014],{"class":74},[68,116927,2186],{"class":78},[68,116929,115540],{"class":74},[68,116931,32270],{"class":78},[170,116933,116934,116935,116938,116939,116941,116942,102493,116944,116946],{},"定义一个类，名字叫 ",[65,116936,116937],{},"ReacherEnv","。括号里的 ",[65,116940,116888],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[65,116943,71534],{},[65,116945,108608],{}," 这两个核心方法。",[58,116948,116950],{"className":31862,"code":116949,"language":31864,"meta":63,"style":63},"metadata = {\"render_modes\": []}\n",[65,116951,116952],{"__ignoreMap":63},[68,116953,116954,116957,116959,116961,116963],{"class":70,"line":71},[68,116955,116956],{"class":78},"metadata ",[68,116958,1685],{"class":316},[68,116960,5938],{"class":78},[68,116962,115554],{"class":1742},[68,116964,115557],{"class":78},[170,116966,116967],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[58,116969,116971],{"className":31862,"code":116970,"language":31864,"meta":63,"style":63},"def __init__(self) -> None:\n",[65,116972,116973],{"__ignoreMap":63},[68,116974,116975,116977,116979,116981,116983],{"class":70,"line":71},[68,116976,33431],{"class":316},[68,116978,32288],{"class":85},[68,116980,115570],{"class":78},[68,116982,97161],{"class":85},[68,116984,5229],{"class":78},[170,116986,116987,116989,116990,29869],{},[65,116988,32313],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[65,116991,116992],{},"env = ReacherEnv()",[58,116994,116996],{"className":31862,"code":116995,"language":31864,"meta":63,"style":63},"super().__init__()\n",[65,116997,116998],{"__ignoreMap":63},[68,116999,117000,117003,117005,117007],{"class":70,"line":71},[68,117001,117002],{"class":85},"super",[68,117004,18748],{"class":78},[68,117006,32313],{"class":85},[68,117008,3466],{"class":78},[170,117010,117011,117012,117014],{},"调用父类 ",[65,117013,116888],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[58,117016,117017],{"className":31862,"code":116680,"language":31864,"meta":63,"style":63},[65,117018,117019,117033],{"__ignoreMap":63},[68,117020,117021,117023,117025,117027,117029,117031],{"class":70,"line":71},[68,117022,32307],{"class":85},[68,117024,115591],{"class":78},[68,117026,1685],{"class":316},[68,117028,102887],{"class":78},[68,117030,102789],{"class":85},[68,117032,1646],{"class":78},[68,117034,117035,117037,117039,117041,117043,117045],{"class":70,"line":82},[68,117036,32307],{"class":85},[68,117038,115606],{"class":78},[68,117040,1685],{"class":316},[68,117042,115611],{"class":78},[68,117044,32307],{"class":85},[68,117046,115616],{"class":78},[170,117048,117049,117050,117052,117053,102493,117056,117059],{},"把 MuJoCo 模型和状态保存到 ",[65,117051,32307],{}," 上。",[65,117054,117055],{},"self.model",[65,117057,117058],{},"self.data"," 表示这个环境对象自己的模型和状态。",[58,117061,117062],{"className":31862,"code":116722,"language":31864,"meta":63,"style":63},[65,117063,117064,117078],{"__ignoreMap":63},[68,117065,117066,117068,117070,117072,117074,117076],{"class":70,"line":71},[68,117067,32307],{"class":85},[68,117069,115627],{"class":78},[68,117071,1685],{"class":316},[68,117073,115632],{"class":78},[68,117075,91029],{"class":85},[68,117077,1646],{"class":78},[68,117079,117080,117082,117084,117086,117088,117090],{"class":70,"line":82},[68,117081,32307],{"class":85},[68,117083,115648],{"class":78},[68,117085,1685],{"class":316},[68,117087,115632],{"class":78},[68,117089,91029],{"class":85},[68,117091,1646],{"class":78},[170,117093,117094,117095,102493,117098,117101],{},"提前查好 tip 和 target 的 site ID。这样 ",[65,117096,117097],{},"_get_obs",[65,117099,117100],{},"_get_reward"," 里就不用每次按名字查找。",[58,117103,117105],{"className":31862,"code":117104,"language":31864,"meta":63,"style":63},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[65,117106,117107,117117,117127],{"__ignoreMap":63},[68,117108,117109,117111,117113,117115],{"class":70,"line":71},[68,117110,32307],{"class":85},[68,117112,115341],{"class":78},[68,117114,1685],{"class":316},[68,117116,55908],{"class":85},[68,117118,117119,117121,117123,117125],{"class":70,"line":82},[68,117120,32307],{"class":85},[68,117122,115720],{"class":78},[68,117124,1685],{"class":316},[68,117126,115725],{"class":85},[68,117128,117129,117131,117133,117135],{"class":70,"line":98},[68,117130,32307],{"class":85},[68,117132,115180],{"class":78},[68,117134,1685],{"class":316},[68,117136,48817],{"class":85},[170,117138,117139,117142,117143,117146,117147,117150],{},[65,117140,117141],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[65,117144,117145],{},"max_steps"," 是一个 episode 最多运行多少步。",[65,117148,117149],{},"steps"," 记录当前 episode 已经走了多少步。",[58,117152,117153],{"className":31862,"code":115219,"language":31864,"meta":63,"style":63},[65,117154,117155],{"__ignoreMap":63},[68,117156,117157,117159,117161,117163,117165,117167,117169,117171,117173,117175,117177,117179,117181,117183,117185,117187,117189,117191,117193,117195],{"class":70,"line":71},[68,117158,32307],{"class":85},[68,117160,115228],{"class":78},[68,117162,1685],{"class":316},[68,117164,115233],{"class":78},[68,117166,115236],{"class":6705},[68,117168,115239],{"class":316},[68,117170,103878],{"class":85},[68,117172,13923],{"class":78},[68,117174,115246],{"class":6705},[68,117176,1685],{"class":316},[68,117178,103878],{"class":85},[68,117180,13923],{"class":78},[68,117182,97438],{"class":6705},[68,117184,1685],{"class":316},[68,117186,1640],{"class":78},[68,117188,1715],{"class":85},[68,117190,115263],{"class":78},[68,117192,94975],{"class":6705},[68,117194,1685],{"class":316},[68,117196,115270],{"class":78},[170,117198,117199,117200,117203,117204,102493,117207,117210],{},"定义动作空间。",[65,117201,117202],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[65,117205,117206],{},"low=-1.0",[65,117208,117209],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[58,117212,117213],{"className":31862,"code":115280,"language":31864,"meta":63,"style":63},[65,117214,117215],{"__ignoreMap":63},[68,117216,117217,117219,117221,117223,117225,117227,117229,117231,117233,117235,117237,117239,117241,117243,117245,117247,117249,117251],{"class":70,"line":71},[68,117218,32307],{"class":85},[68,117220,115289],{"class":78},[68,117222,1685],{"class":316},[68,117224,115233],{"class":78},[68,117226,115236],{"class":6705},[68,117228,115239],{"class":316},[68,117230,115300],{"class":78},[68,117232,115246],{"class":6705},[68,117234,1685],{"class":316},[68,117236,115300],{"class":78},[68,117238,97438],{"class":6705},[68,117240,1685],{"class":316},[68,117242,1640],{"class":78},[68,117244,313],{"class":85},[68,117246,115263],{"class":78},[68,117248,94975],{"class":6705},[68,117250,1685],{"class":316},[68,117252,115270],{"class":78},[170,117254,117255,117256,117259,117260,117263],{},"定义观测空间。",[65,117257,117258],{},"shape=(10,)"," 表示观测是 10 个数。",[65,117261,117262],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[58,117265,117267],{"className":31862,"code":117266,"language":31864,"meta":63,"style":63},"def _get_obs(self) -> np.ndarray:\n",[65,117268,117269],{"__ignoreMap":63},[68,117270,117271,117273,117275],{"class":70,"line":71},[68,117272,33431],{"class":316},[68,117274,115830],{"class":74},[68,117276,115833],{"class":78},[170,117278,117279,117280,117282],{},"定义内部函数，用来生成观测。函数名前面的 ",[65,117281,2619],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[58,117284,117286],{"className":31862,"code":117285,"language":31864,"meta":63,"style":63},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[65,117287,117288,117302],{"__ignoreMap":63},[68,117289,117290,117292,117294,117296,117298,117300],{"class":70,"line":71},[68,117291,113042],{"class":78},[68,117293,1685],{"class":316},[68,117295,40357],{"class":85},[68,117297,115844],{"class":78},[68,117299,32307],{"class":85},[68,117301,115849],{"class":78},[68,117303,117304,117306,117308,117310,117312,117314],{"class":70,"line":82},[68,117305,113052],{"class":78},[68,117307,1685],{"class":316},[68,117309,40357],{"class":85},[68,117311,115844],{"class":78},[68,117313,32307],{"class":85},[68,117315,115864],{"class":78},[170,117317,117318],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[58,117320,117322],{"className":31862,"code":117321,"language":31864,"meta":63,"style":63},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[65,117323,117324,117340],{"__ignoreMap":63},[68,117325,117326,117328,117330,117332,117334,117336,117338],{"class":70,"line":71},[68,117327,112328],{"class":78},[68,117329,1685],{"class":316},[68,117331,115873],{"class":78},[68,117333,32307],{"class":85},[68,117335,115878],{"class":78},[68,117337,32307],{"class":85},[68,117339,115883],{"class":78},[68,117341,117342,117344],{"class":70,"line":82},[68,117343,18533],{"class":316},[68,117345,115890],{"class":78},[170,117347,117348,117349,117352,117353,117355],{},"拼接观测，并转换成 ",[65,117350,117351],{},"float32","。很多强化学习库默认使用 ",[65,117354,117351],{},"，所以这里主动转换。",[58,117357,117358],{"className":31862,"code":116761,"language":31864,"meta":63,"style":63},[65,117359,117360],{"__ignoreMap":63},[68,117361,117362,117364,117366,117368,117370,117372,117374,117376,117378,117380,117382,117384,117386,117388,117390,117392,117394],{"class":70,"line":71},[68,117363,33431],{"class":316},[68,117365,115996],{"class":74},[68,117367,115999],{"class":78},[68,117369,2083],{"class":316},[68,117371,116004],{"class":78},[68,117373,1643],{"class":85},[68,117375,26595],{"class":316},[68,117377,40417],{"class":85},[68,117379,15052],{"class":316},[68,117381,40417],{"class":85},[68,117383,116017],{"class":78},[68,117385,116020],{"class":85},[68,117387,26595],{"class":316},[68,117389,40417],{"class":85},[68,117391,15052],{"class":316},[68,117393,40417],{"class":85},[68,117395,32270],{"class":78},[170,117397,117398,117399,117401,117402,117405],{},"定义 reset。",[65,117400,116040],{}," 用来控制随机数，保证实验可以复现。",[65,117403,117404],{},"options"," 用来接收额外配置，本章暂时不用。",[58,117407,117409],{"className":31862,"code":117408,"language":31864,"meta":63,"style":63},"super().reset(seed=seed)\n",[65,117410,117411],{"__ignoreMap":63},[68,117412,117413,117415,117417,117419,117421],{"class":70,"line":71},[68,117414,117002],{"class":85},[68,117416,116037],{"class":78},[68,117418,116040],{"class":6705},[68,117420,1685],{"class":316},[68,117422,116045],{"class":78},[170,117424,117425,117426,117429],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[65,117427,117428],{},"self.np_random"," 生成可复现的随机数。",[58,117431,117433],{"className":31862,"code":117432,"language":31864,"meta":63,"style":63},"mujoco.mj_resetData(self.model, self.data)\n",[65,117434,117435],{"__ignoreMap":63},[68,117436,117437,117440,117442,117444,117446],{"class":70,"line":71},[68,117438,117439],{"class":78},"mujoco.mj_resetData(",[68,117441,32307],{"class":85},[68,117443,116055],{"class":78},[68,117445,32307],{"class":85},[68,117447,116060],{"class":78},[170,117449,117450],{},"把 MuJoCo 状态重置到默认状态。",[58,117452,117454],{"className":31862,"code":117453,"language":31864,"meta":63,"style":63},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[65,117455,117456],{"__ignoreMap":63},[68,117457,117458,117460,117462,117464,117466,117468,117470,117472,117474,117476,117478,117480,117482,117484,117486,117488,117490],{"class":70,"line":71},[68,117459,32307],{"class":85},[68,117461,116071],{"class":78},[68,117463,1685],{"class":316},[68,117465,40357],{"class":85},[68,117467,116078],{"class":78},[68,117469,115236],{"class":6705},[68,117471,115239],{"class":316},[68,117473,87686],{"class":85},[68,117475,13923],{"class":78},[68,117477,115246],{"class":6705},[68,117479,1685],{"class":316},[68,117481,87686],{"class":85},[68,117483,13923],{"class":78},[68,117485,32980],{"class":6705},[68,117487,1685],{"class":316},[68,117489,32307],{"class":85},[68,117491,116103],{"class":78},[170,117493,116815,117494,117497,117498,117501,117502,117504],{},[65,117495,117496],{},"[:]"," 表示修改整个数组。",[65,117499,117500],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[65,117503,103625],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[58,117506,117508],{"className":31862,"code":117507,"language":31864,"meta":63,"style":63},"self.data.qvel[:] = 0.0\n",[65,117509,117510],{"__ignoreMap":63},[68,117511,117512,117514,117516,117518],{"class":70,"line":71},[68,117513,32307],{"class":85},[68,117515,116110],{"class":78},[68,117517,1685],{"class":316},[68,117519,106235],{"class":85},[170,117521,117522],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[58,117524,117526],{"className":31862,"code":117525,"language":31864,"meta":63,"style":63},"self.steps = 0\nreturn self._get_obs(), {}\n",[65,117527,117528,117538],{"__ignoreMap":63},[68,117529,117530,117532,117534,117536],{"class":70,"line":71},[68,117531,32307],{"class":85},[68,117533,115180],{"class":78},[68,117535,1685],{"class":316},[68,117537,48817],{"class":85},[68,117539,117540,117542,117544],{"class":70,"line":82},[68,117541,18533],{"class":316},[68,117543,40357],{"class":85},[68,117545,116150],{"class":78},[170,117547,117548],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[58,117550,117551],{"className":31862,"code":116824,"language":31864,"meta":63,"style":63},[65,117552,117553],{"__ignoreMap":63},[68,117554,117555,117557,117559],{"class":70,"line":71},[68,117556,33431],{"class":316},[68,117558,116161],{"class":74},[68,117560,116164],{"class":78},[170,117562,117563],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[58,117565,117567],{"className":31862,"code":117566,"language":31864,"meta":63,"style":63},"action = np.asarray(action, dtype=np.float32)\n",[65,117568,117569],{"__ignoreMap":63},[68,117570,117571,117573,117575,117577,117579,117581],{"class":70,"line":71},[68,117572,108916],{"class":78},[68,117574,1685],{"class":316},[68,117576,116173],{"class":78},[68,117578,94975],{"class":6705},[68,117580,1685],{"class":316},[68,117582,115270],{"class":78},[170,117584,117585,117586,29869],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[65,117587,117351],{},[58,117589,117591],{"className":31862,"code":117590,"language":31864,"meta":63,"style":63},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[65,117592,117593],{"__ignoreMap":63},[68,117594,117595,117597,117599,117601,117603,117605,117607],{"class":70,"line":71},[68,117596,108916],{"class":78},[68,117598,1685],{"class":316},[68,117600,108921],{"class":78},[68,117602,32307],{"class":85},[68,117604,116192],{"class":78},[68,117606,32307],{"class":85},[68,117608,116197],{"class":78},[170,117610,117611],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[58,117613,117615],{"className":31862,"code":117614,"language":31864,"meta":63,"style":63},"self.data.ctrl[:] = action\n",[65,117616,117617],{"__ignoreMap":63},[68,117618,117619,117621,117623,117625],{"class":70,"line":71},[68,117620,32307],{"class":85},[68,117622,116208],{"class":78},[68,117624,1685],{"class":316},[68,117626,108944],{"class":78},[170,117628,117629],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[58,117631,117633],{"className":31862,"code":117632,"language":31864,"meta":63,"style":63},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[65,117634,117635,117651],{"__ignoreMap":63},[68,117636,117637,117639,117641,117643,117645,117647,117649],{"class":70,"line":71},[68,117638,4515],{"class":316},[68,117640,102976],{"class":78},[68,117642,27529],{"class":316},[68,117644,33927],{"class":85},[68,117646,1640],{"class":78},[68,117648,32307],{"class":85},[68,117650,116229],{"class":78},[68,117652,117653,117656,117658,117660,117662],{"class":70,"line":82},[68,117654,117655],{"class":78},"    mujoco.mj_step(",[68,117657,32307],{"class":85},[68,117659,116055],{"class":78},[68,117661,32307],{"class":85},[68,117663,116060],{"class":78},[170,117665,117666,117667,117670,117671,117673,117674,29869],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[65,117668,117669],{},"frame_skip=5","，所以外部调用一次 ",[65,117672,115351],{},"，内部实际执行 5 次 ",[65,117675,102690],{},[58,117677,117679],{"className":31862,"code":117678,"language":31864,"meta":63,"style":63},"self.steps += 1\n",[65,117680,117681],{"__ignoreMap":63},[68,117682,117683,117685,117687,117689],{"class":70,"line":71},[68,117684,32307],{"class":85},[68,117686,115180],{"class":78},[68,117688,10965],{"class":316},[68,117690,57177],{"class":85},[170,117692,117693],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[58,117695,117697],{"className":31862,"code":117696,"language":31864,"meta":63,"style":63},"obs = self._get_obs()\nreward = self._get_reward()\n",[65,117698,117699,117709],{"__ignoreMap":63},[68,117700,117701,117703,117705,117707],{"class":70,"line":71},[68,117702,112328],{"class":78},[68,117704,1685],{"class":316},[68,117706,40357],{"class":85},[68,117708,116271],{"class":78},[68,117710,117711,117713,117715,117717],{"class":70,"line":82},[68,117712,112479],{"class":78},[68,117714,1685],{"class":316},[68,117716,40357],{"class":85},[68,117718,116282],{"class":78},[170,117720,117721],{},"计算新的观测和奖励。",[58,117723,117725],{"className":31862,"code":117724,"language":31864,"meta":63,"style":63},"dist = float(np.linalg.norm(tip - target))\n",[65,117726,117727],{"__ignoreMap":63},[68,117728,117729,117731,117733,117735,117737,117739],{"class":70,"line":71},[68,117730,113070],{"class":78},[68,117732,1685],{"class":316},[68,117734,111271],{"class":85},[68,117736,116325],{"class":78},[68,117738,2160],{"class":316},[68,117740,116330],{"class":78},[170,117742,117743],{},"计算末端到目标的距离，并转换成 Python float。",[58,117745,117746],{"className":31862,"code":115151,"language":31864,"meta":63,"style":63},[65,117747,117748,117760],{"__ignoreMap":63},[68,117749,117750,117752,117754,117756,117758],{"class":70,"line":71},[68,117751,115158],{"class":78},[68,117753,1685],{"class":316},[68,117755,115163],{"class":78},[68,117757,2537],{"class":316},[68,117759,115168],{"class":85},[68,117761,117762,117764,117766,117768,117770,117772,117774],{"class":70,"line":82},[68,117763,115173],{"class":78},[68,117765,1685],{"class":316},[68,117767,40357],{"class":85},[68,117769,115180],{"class":78},[68,117771,3201],{"class":316},[68,117773,40357],{"class":85},[68,117775,115187],{"class":78},[170,117777,117778],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[58,117780,117782],{"className":31862,"code":117781,"language":31864,"meta":63,"style":63},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[65,117783,117784,117797],{"__ignoreMap":63},[68,117785,117786,117789,117791,117793,117795],{"class":70,"line":71},[68,117787,117788],{"class":78},"info ",[68,117790,1685],{"class":316},[68,117792,5938],{"class":78},[68,117794,116376],{"class":1742},[68,117796,116379],{"class":78},[68,117798,117799,117801],{"class":70,"line":82},[68,117800,18533],{"class":316},[68,117802,116386],{"class":78},[170,117804,117805,117808],{},[65,117806,117807],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[58,117810,117812],{"className":31862,"code":117811,"language":31864,"meta":63,"style":63},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[65,117813,117814,117823],{"__ignoreMap":63},[68,117815,117816,117819,117821],{"class":70,"line":71},[68,117817,117818],{"class":78},"env ",[68,117820,1685],{"class":316},[68,117822,116416],{"class":78},[68,117824,117825,117827,117829,117831,117833,117835,117837],{"class":70,"line":82},[68,117826,114874],{"class":78},[68,117828,1685],{"class":316},[68,117830,116426],{"class":78},[68,117832,116040],{"class":6705},[68,117834,1685],{"class":316},[68,117836,1248],{"class":85},[68,117838,1646],{"class":78},[170,117840,117841,117842,117845],{},"创建环境并重置。",[65,117843,117844],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[58,117847,117849],{"className":31862,"code":117848,"language":31864,"meta":63,"style":63},"action = env.action_space.sample()\n",[65,117850,117851],{"__ignoreMap":63},[68,117852,117853,117855,117857],{"class":70,"line":71},[68,117854,108916],{"class":78},[68,117856,1685],{"class":316},[68,117858,116495],{"class":78},[170,117860,117861],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117863,103791],{"id":103790},[170,117865,106958],{},[58,117867,117870],{"className":117868,"code":117869,"language":6676,"meta":63},[6674],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[65,117871,117869],{"__ignoreMap":63},[170,117873,117874],{},"这个环境已经具备强化学习环境的基本结构。",[170,117876,117877],{},"主函数里使用随机动作：",[58,117879,117880],{"className":31862,"code":117848,"language":31864,"meta":63,"style":63},[65,117881,117882],{"__ignoreMap":63},[68,117883,117884,117886,117888],{"class":70,"line":71},[68,117885,108916],{"class":78},[68,117887,1685],{"class":316},[68,117889,116495],{"class":78},[170,117891,117892],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117894,103823],{"id":103822},[263,117896,117897,117900,117906,117915,117924,117933,117939],{},[27,117898,117899],{},"运行程序。",[27,117901,117902,117903,29869],{},"确认 ",[65,117904,117905],{},"obs.shape == (10,)",[27,117907,112655,117908,117911,117912,29869],{},[65,117909,117910],{},"env.action_space","，应类似 ",[65,117913,117914],{},"Box(-1.0, 1.0, (2,), float32)",[27,117916,107059,117917,117920,117921,29869],{},[65,117918,117919],{},"self.max_steps = 10","，确认环境会更快 ",[65,117922,117923],{},"truncated=True",[27,117925,103886,117926,103889,117929,117932],{},[65,117927,117928],{},"terminated = dist \u003C 0.05",[65,117930,117931],{},"dist \u003C 0.2","，观察是否更容易结束。",[27,117934,103886,117935,117938],{},[65,117936,117937],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[27,117940,117941,117942,117944,117945,117948],{},"在 ",[65,117943,117807],{}," 里加入 ",[65,117946,117947],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117950,103928],{"id":103927},[19,117952,117954],{"id":117953},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[170,117956,117957,117958,117960],{},"Gymnasium 的 ",[65,117959,108608],{}," 返回 5 个值:",[58,117962,117964],{"className":31862,"code":117963,"language":31864,"meta":63,"style":63},"obs, reward, terminated, truncated, info\n",[65,117965,117966],{"__ignoreMap":63},[68,117967,117968],{"class":70,"line":71},[68,117969,117963],{"class":78},[170,117971,117972],{},"不是旧 Gym 的 4 个值。",[19,117974,117976,117979],{"id":117975},"datactrl-action-维度错误",[65,117977,117978],{},"data.ctrl[:] = action"," 维度错误",[170,117981,103998],{},[58,117983,117985],{"className":31862,"code":117984,"language":31864,"meta":63,"style":63},"print(self.model.nu)\nprint(action.shape)\n",[65,117986,117987,117998],{"__ignoreMap":63},[68,117988,117989,117991,117993,117995],{"class":70,"line":71},[68,117990,31899],{"class":85},[68,117992,1640],{"class":78},[68,117994,32307],{"class":85},[68,117996,117997],{"class":78},".model.nu)\n",[68,117999,118000,118002],{"class":70,"line":82},[68,118001,31899],{"class":85},[68,118003,118004],{"class":78},"(action.shape)\n",[170,118006,118007],{},"两者必须匹配。",[19,118009,118011],{"id":118010},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[170,118013,103937],{},[58,118015,118017],{"className":31862,"code":118016,"language":31864,"meta":63,"style":63},"mujoco.mj_forward(self.model, self.data)\n",[65,118018,118019],{"__ignoreMap":63},[68,118020,118021,118024,118026,118028,118030],{"class":70,"line":71},[68,118022,118023],{"class":78},"mujoco.mj_forward(",[68,118025,32307],{"class":85},[68,118027,116055],{"class":78},[68,118029,32307],{"class":85},[68,118031,116060],{"class":78},[19,118033,118035,118037],{"id":118034},"observation_space-维度和-obs-不一致",[65,118036,115074],{}," 维度和 obs 不一致",[170,118039,104050],{},[58,118041,118043],{"className":31862,"code":118042,"language":31864,"meta":63,"style":63},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[65,118044,118045,118055,118062],{"__ignoreMap":63},[68,118046,118047,118049,118051,118053],{"class":70,"line":71},[68,118048,112328],{"class":78},[68,118050,1685],{"class":316},[68,118052,40357],{"class":85},[68,118054,116271],{"class":78},[68,118056,118057,118059],{"class":70,"line":82},[68,118058,31899],{"class":85},[68,118060,118061],{"class":78},"(obs.shape)\n",[68,118063,118064,118066,118068,118070],{"class":70,"line":98},[68,118065,31899],{"class":85},[68,118067,1640],{"class":78},[68,118069,32307],{"class":85},[68,118071,118072],{"class":78},".observation_space.shape)\n",[170,118074,118075],{},"两者必须一致。本章观测是：",[58,118077,118080],{"className":118078,"code":118079,"language":6676,"meta":63},[6674],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[65,118081,118079],{"__ignoreMap":63},[19,118083,118085],{"id":118084},"action-超过范围","action 超过范围",[170,118087,118088],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[58,118090,118091],{"className":31862,"code":117590,"language":31864,"meta":63,"style":63},[65,118092,118093],{"__ignoreMap":63},[68,118094,118095,118097,118099,118101,118103,118105,118107],{"class":70,"line":71},[68,118096,108916],{"class":78},[68,118098,1685],{"class":316},[68,118100,108921],{"class":78},[68,118102,32307],{"class":85},[68,118104,116192],{"class":78},[68,118106,32307],{"class":85},[68,118108,116197],{"class":78},[170,118110,118111,118112,29869],{},"这能避免无效动作直接写入 ",[65,118113,102551],{},[19,118115,118117],{"id":118116},"忘记返回-info","忘记返回 info",[170,118119,117957,118120,102493,118122,118124],{},[65,118121,71534],{},[65,118123,108608],{}," 都会返回 info：",[58,118126,118127],{"className":31862,"code":114867,"language":31864,"meta":63,"style":63},[65,118128,118129,118137],{"__ignoreMap":63},[68,118130,118131,118133,118135],{"class":70,"line":71},[68,118132,114874],{"class":78},[68,118134,1685],{"class":316},[68,118136,114879],{"class":78},[68,118138,118139,118141,118143],{"class":70,"line":82},[68,118140,114884],{"class":78},[68,118142,1685],{"class":316},[68,118144,114889],{"class":78},[170,118146,118147,118148,29869],{},"即使暂时没有额外信息，也返回 ",[65,118149,33943],{},[14,118151,118153],{"id":118152},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[170,118155,118156],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[263,118158,118159,118162,118165,118168,118171,118174],{},[27,118160,118161],{},"更稳定的 reward。",[27,118163,118164],{},"合理的 episode 长度。",[27,118166,118167],{},"可重复的随机目标采样。",[27,118169,118170],{},"render 接口。",[27,118172,118173],{},"环境注册代码。",[27,118175,118176],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[170,118178,118179],{},"如果只是自己写训练循环，最小形式是：",[58,118181,118183],{"className":31862,"code":118182,"language":31864,"meta":63,"style":63},"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",[65,118184,118185,118193,118209,118213,118229,118238,118247,118257],{"__ignoreMap":63},[68,118186,118187,118189,118191],{"class":70,"line":71},[68,118188,117818],{"class":78},[68,118190,1685],{"class":316},[68,118192,116416],{"class":78},[68,118194,118195,118197,118199,118201,118203,118205,118207],{"class":70,"line":82},[68,118196,114874],{"class":78},[68,118198,1685],{"class":316},[68,118200,116426],{"class":78},[68,118202,116040],{"class":6705},[68,118204,1685],{"class":316},[68,118206,1248],{"class":85},[68,118208,1646],{"class":78},[68,118210,118211],{"class":70,"line":98},[68,118212,3890],{"emptyLinePlaceholder":1567},[68,118214,118215,118217,118219,118221,118223,118225,118227],{"class":70,"line":104},[68,118216,4515],{"class":316},[68,118218,102976],{"class":78},[68,118220,27529],{"class":316},[68,118222,33927],{"class":85},[68,118224,1640],{"class":78},[68,118226,7899],{"class":85},[68,118228,32270],{"class":78},[68,118230,118231,118234,118236],{"class":70,"line":112},[68,118232,118233],{"class":78},"    action ",[68,118235,1685],{"class":316},[68,118237,116495],{"class":78},[68,118239,118240,118243,118245],{"class":70,"line":124},[68,118241,118242],{"class":78},"    obs, reward, terminated, truncated, info ",[68,118244,1685],{"class":316},[68,118246,114889],{"class":78},[68,118248,118249,118251,118253,118255],{"class":70,"line":1496},[68,118250,4591],{"class":316},[68,118252,116561],{"class":78},[68,118254,116564],{"class":316},[68,118256,116567],{"class":78},[68,118258,118259,118262,118264],{"class":70,"line":1502},[68,118260,118261],{"class":78},"        obs, info ",[68,118263,1685],{"class":316},[68,118265,114879],{"class":78},[14,118267,118269],{"id":118268},"_9本章小结","9.本章小结",[170,118271,118272],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[58,118274,118277],{"className":118275,"code":118276,"language":6676,"meta":63},[6674],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[65,118278,118276],{"__ignoreMap":63},[170,118280,118281],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1553,118283,118284],{},"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":63,"searchDepth":82,"depth":82,"links":118286},[118287,118288,118289,118296,118300,118301,118302,118312,118313],{"id":102121,"depth":82,"text":102122},{"id":102244,"depth":82,"text":102245},{"id":102519,"depth":82,"text":102520,"children":118290},[118291,118293,118295],{"id":115098,"depth":98,"text":118292},"terminated 和 truncated 的区别",{"id":115201,"depth":98,"text":118294},"observation_space 和 action_space",{"id":115328,"depth":98,"text":115329},{"id":102727,"depth":82,"text":102728,"children":118297},[118298,118299],{"id":103047,"depth":98,"text":103047},{"id":103183,"depth":98,"text":103183},{"id":103790,"depth":82,"text":103791},{"id":103822,"depth":82,"text":103823},{"id":103927,"depth":82,"text":103928,"children":118303},[118304,118305,118307,118308,118310,118311],{"id":117953,"depth":98,"text":117954},{"id":117975,"depth":98,"text":118306},"data.ctrl[:] = action 维度错误",{"id":118010,"depth":98,"text":118011},{"id":118034,"depth":98,"text":118309},"observation_space 维度和 obs 不一致",{"id":118084,"depth":98,"text":118085},{"id":118116,"depth":98,"text":118117},{"id":118152,"depth":82,"text":118153},{"id":118268,"depth":82,"text":118269},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114851,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118320,"title":118321,"body":118322,"description":118745,"extension":1565,"meta":118746,"navigation":1567,"path":118747,"seo":118748,"stem":118749,"__hash__":118750},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118323,"toc":118735},[118324,118328,118331,118334,118354,118360,118366,118376,118379,118382,118402,118405,118409,118412,118418,118421,118435,118438,118441,118515,118518,118524,118527,118550,118553,118603,118606,118612,118615,118618,118621,118640,118643,118649,118652,118655,118658,118678,118681,118684,118687,118732],[10,118325,118327],{"id":118326},"mujoco-学习","MuJoCo 学习",[170,118329,118330],{},"初版",[170,118332,118333],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[263,118335,118336,118339,118342,118351],{},[27,118337,118338],{},"MuJoCo 模型文件在描述什么。",[27,118340,118341],{},"Python 代码怎样读取和推进仿真。",[27,118343,118344,1841,118346,1841,118348,118350],{},[65,118345,105505],{},[65,118347,105835],{},[65,118349,105838],{}," 这些数组为什么重要。",[27,118352,118353],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[170,118355,118356,118357,118359],{},"默认环境为 Fedora 44、Python >= 3.10、",[65,118358,102502],{}," 官方 Python bindings。",[170,118361,118362,118363,118365],{},"注意：本文禁止使用 ",[65,118364,102487],{},"。所有示例均使用：",[58,118367,118368],{"className":31862,"code":103053,"language":31864,"meta":63,"style":63},[65,118369,118370],{"__ignoreMap":63},[68,118371,118372,118374],{"class":70,"line":71},[68,118373,31876],{"class":316},[68,118375,102776],{"class":78},[14,118377,118378],{"id":118378},"适合谁阅读",[170,118380,118381],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[263,118383,118384,118387,118390,118393],{},[27,118385,118386],{},"没学过 MuJoCo，只会一点 Python。",[27,118388,118389],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[27,118391,118392],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[27,118394,118395,118396,118398,118399,118401],{},"以前接触过 ",[65,118397,102487],{},"，现在想迁移到官方 ",[65,118400,102496],{}," Python bindings。",[170,118403,118404],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118406,118408],{"id":118407},"mujoco-到底是什么","MuJoCo 到底是什么",[170,118410,118411],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[58,118413,118416],{"className":118414,"code":118415,"language":6676,"meta":63},[6674],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[65,118417,118415],{"__ignoreMap":63},[170,118419,118420],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[263,118422,118423,118426,118429,118432],{},[27,118424,118425],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[27,118427,118428],{},"快速测试控制算法，不必一开始就上真实机器人。",[27,118430,118431],{},"生成强化学习环境。",[27,118433,118434],{},"采集状态、动作、图像、奖励等训练数据。",[14,118436,118437],{"id":118437},"学习前的心智模型",[170,118439,118440],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[128,118442,118443,118455],{},[131,118444,118445],{},[134,118446,118447,118450,118453],{},[137,118448,118449],{"align":92},"部分",[137,118451,118452],{"align":92},"负责什么",[137,118454,22674],{"align":92},[144,118456,118457,118468,118480,118492,118504],{},[134,118458,118459,118462,118465],{},[149,118460,118461],{"align":92},"MJCF XML",[149,118463,118464],{"align":92},"定义世界和机器人结构",[149,118466,118467],{"align":92},"地面、盒子、关节、电机、摄像头",[134,118469,118470,118474,118477],{},[149,118471,118472],{"align":92},[65,118473,102184],{},[149,118475,118476],{"align":92},"编译后的静态模型",[149,118478,118479],{"align":92},"有几个关节、有几个电机、时间步长是多少",[134,118481,118482,118486,118489],{},[149,118483,118484],{"align":92},[65,118485,102194],{},[149,118487,118488],{"align":92},"运行中的动态状态",[149,118490,118491],{"align":92},"当前时间、位置、速度、电机输入",[134,118493,118494,118498,118501],{},[149,118495,118496],{"align":92},[65,118497,102690],{},[149,118499,118500],{"align":92},"推进一步物理仿真",[149,118502,118503],{"align":92},"根据重力、力、碰撞更新状态",[134,118505,118506,118509,118512],{},[149,118507,118508],{"align":92},"Viewer \u002F Renderer",[149,118510,118511],{"align":92},"把仿真显示出来",[149,118513,118514],{"align":92},"打开窗口或保存图片",[170,118516,118517],{},"一句话总结：",[58,118519,118522],{"className":118520,"code":118521,"language":6676,"meta":63},[6674],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[65,118523,118521],{"__ignoreMap":63},[170,118525,118526],{},"参考来源：",[24,118528,118529,118536,118543],{},[27,118530,118531,118532],{},"MuJoCo Python 官方文档：",[1867,118533,118534],{"href":118534,"rel":118535},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25350],[27,118537,118538,118539],{},"MuJoCo XML Reference：",[1867,118540,118541],{"href":118541,"rel":118542},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25350],[27,118544,118545,118546],{},"MuJoCo Overview：",[1867,118547,118548],{"href":118548,"rel":118549},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25350],[14,118551,118552],{"id":118552},"章节目录",[263,118554,118555,118561,118567,118573,118579,118585,118591,118597],{},[27,118556,118557],{},[1867,118558,118560],{"href":118559},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[27,118562,118563],{},[1867,118564,118566],{"href":118565},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[27,118568,118569],{},[1867,118570,118572],{"href":118571},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[27,118574,118575],{},[1867,118576,118578],{"href":118577},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[27,118580,118581],{},[1867,118582,118584],{"href":118583},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[27,118586,118587],{},[1867,118588,118590],{"href":118589},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[27,118592,118593],{},[1867,118594,118596],{"href":118595},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[27,118598,118599],{},[1867,118600,118602],{"href":118601},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118604,118605],{"id":118605},"推荐学习路线",[58,118607,118610],{"className":118608,"code":118609,"language":6676,"meta":63},[6674],"环境安装\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",[65,118611,118609],{"__ignoreMap":63},[170,118613,118614],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118616,118617],{"id":118617},"建议的目录结构",[170,118619,118620],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[58,118622,118624],{"className":25307,"code":118623,"language":25309,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[65,118625,118626,118634],{"__ignoreMap":63},[68,118627,118628,118630,118632],{"class":70,"line":71},[68,118629,102741],{"class":74},[68,118631,30700],{"class":85},[68,118633,102746],{"class":1742},[68,118635,118636,118638],{"class":70,"line":82},[68,118637,102751],{"class":85},[68,118639,102746],{"class":1742},[170,118641,118642],{},"每一章的代码都单独保存：",[58,118644,118647],{"className":118645,"code":118646,"language":6676,"meta":63},[6674],"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",[65,118648,118646],{"__ignoreMap":63},[170,118650,118651],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118653,118654],{"id":118654},"学习方法",[170,118656,118657],{},"每章建议按这个顺序操作：",[263,118659,118660,118663,118666,118669,118672,118675],{},[27,118661,118662],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[27,118664,118665],{},"复制最小可运行代码，保存成指定文件。",[27,118667,118668],{},"运行代码，确认没有报错。",[27,118670,118671],{},"对照“运行结果说明”理解输出。",[27,118673,118674],{},"做“验证步骤”，主动改一两个参数。",[27,118676,118677],{},"遇到报错先看“常见错误与解决方案”。",[170,118679,118680],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118682,118683],{"id":118683},"全局排错顺序",[170,118685,118686],{},"遇到问题时，按下面顺序查：",[263,118688,118689,118695,118701,118706,118709,118712,118719,118729],{},[27,118690,118691,118692],{},"Python 环境是否激活：",[65,118693,118694],{},"which python",[27,118696,118697,118698],{},"MuJoCo 是否能导入：",[65,118699,118700],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[27,118702,118703,118704],{},"是否误装了 ",[65,118705,102487],{},[27,118707,118708],{},"XML 标签是否闭合、属性是否拼写正确",[27,118710,118711],{},"actuator 引用的 joint 名字是否存在",[27,118713,118714,118716,118717],{},[65,118715,102551],{}," 的长度是否等于 ",[65,118718,103633],{},[27,118720,107059,118721,1245,118723,118725,118726],{},[65,118722,105505],{},[65,118724,105835],{}," 后是否调用了 ",[65,118727,118728],{},"mujoco.mj_forward",[27,118730,118731],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1553,118733,118734],{},"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":63,"searchDepth":82,"depth":82,"links":118736},[118737,118738,118739,118740,118741,118742,118743,118744],{"id":118378,"depth":82,"text":118378},{"id":118407,"depth":82,"text":118408},{"id":118437,"depth":82,"text":118437},{"id":118552,"depth":82,"text":118552},{"id":118605,"depth":82,"text":118605},{"id":118617,"depth":82,"text":118617},{"id":118654,"depth":82,"text":118654},{"id":118683,"depth":82,"text":118683},"仿真搭建。",{"category":24864},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118321,"description":118745},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118752,"title":118753,"body":118754,"description":1564,"extension":1565,"meta":119209,"navigation":1567,"path":119210,"seo":119211,"stem":119212,"__hash__":119213},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118755,"toc":119207},[118756,118759,118762,118768,119204],[10,118757,118753],{"id":118758},"_1-最常用的基本操作更新",[170,118760,118761],{},"装linux系统教程：",[170,118763,118764],{},[1867,118765,118766],{"href":118766,"rel":118767},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25350],[58,118769,118773],{"className":118770,"code":118771,"language":118772,"meta":63,"style":63},"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",[65,118774,118775,118780,118785,118794,118799,118808,118813,118833,118838,118849,118854,118863,118868,118896,118901,118920,118925,118944,118948,118953,118969,118973,118978,119008,119012,119017,119033,119037,119042,119057,119061,119066,119082,119086,119091,119103,119115,119119,119124,119141,119145,119150,119168,119172,119177,119186,119190,119195],{"__ignoreMap":63},[68,118776,118777],{"class":70,"line":71},[68,118778,118779],{"class":302},"#更新相关的知识\n",[68,118781,118782],{"class":70,"line":82},[68,118783,118784],{"class":302},"# 更新软件包列表（从服务器获取最新软件信息）\n",[68,118786,118787,118789,118792],{"class":70,"line":98},[68,118788,26062],{"class":74},[68,118790,118791],{"class":1742}," apt",[68,118793,27728],{"class":1742},[68,118795,118796],{"class":70,"line":104},[68,118797,118798],{"class":302},"# 升级所有可更新的软件包（不删除旧包）\n",[68,118800,118801,118803,118805],{"class":70,"line":112},[68,118802,26062],{"class":74},[68,118804,118791],{"class":1742},[68,118806,118807],{"class":1742}," upgrade\n",[68,118809,118810],{"class":70,"line":124},[68,118811,118812],{"class":302},"#更新和升级软件包\n",[68,118814,118815,118817,118819,118822,118824,118826,118828,118831],{"class":70,"line":1496},[68,118816,26062],{"class":74},[68,118818,118791],{"class":1742},[68,118820,118821],{"class":1742}," update",[68,118823,27676],{"class":78},[68,118825,26062],{"class":74},[68,118827,118791],{"class":1742},[68,118829,118830],{"class":1742}," upgrade",[68,118832,102456],{"class":85},[68,118834,118835],{"class":70,"line":1502},[68,118836,118837],{"class":302},"#列出可更新的软件包及版本信息\n",[68,118839,118840,118843,118846],{"class":70,"line":1510},[68,118841,118842],{"class":74},"apt",[68,118844,118845],{"class":1742}," list",[68,118847,118848],{"class":85}," --upgradable\n",[68,118850,118851],{"class":70,"line":1521},[68,118852,118853],{"class":302},"#彻底升级（处理依赖关系，可能删除旧包）\n",[68,118855,118856,118858,118860],{"class":70,"line":3103},[68,118857,26062],{"class":74},[68,118859,118791],{"class":1742},[68,118861,118862],{"class":1742}," full-upgrade\n",[68,118864,118865],{"class":70,"line":3108},[68,118866,118867],{"class":302},"#设置指定版本\n",[68,118869,118870,118872,118874,118876,118878,118881,118883,118885,118887,118889,118892,118894],{"class":70,"line":3114},[68,118871,26062],{"class":74},[68,118873,118791],{"class":1742},[68,118875,25319],{"class":1742},[68,118877,30386],{"class":316},[68,118879,118880],{"class":1742},"package_nam",[68,118882,1712],{"class":78},[68,118884,2587],{"class":316},[68,118886,1685],{"class":1742},[68,118888,2537],{"class":316},[68,118890,118891],{"class":1742},"version_numbe",[68,118893,2298],{"class":78},[68,118895,52791],{"class":316},[68,118897,118898],{"class":70,"line":3119},[68,118899,118900],{"class":302},"#只安装软件包不升级\n",[68,118902,118903,118905,118907,118909,118911,118913,118915,118917],{"class":70,"line":3133},[68,118904,26062],{"class":74},[68,118906,118791],{"class":1742},[68,118908,25319],{"class":1742},[68,118910,30386],{"class":316},[68,118912,118880],{"class":1742},[68,118914,1712],{"class":78},[68,118916,2587],{"class":316},[68,118918,118919],{"class":85}," --no-upgrade\n",[68,118921,118922],{"class":70,"line":3138},[68,118923,118924],{"class":302},"#只升级，不存在就不安装\n",[68,118926,118927,118929,118931,118933,118935,118937,118939,118941],{"class":70,"line":3144},[68,118928,26062],{"class":74},[68,118930,118791],{"class":1742},[68,118932,25319],{"class":1742},[68,118934,30386],{"class":316},[68,118936,118880],{"class":1742},[68,118938,1712],{"class":78},[68,118940,2587],{"class":316},[68,118942,118943],{"class":85}," --only-upgrade\n",[68,118945,118946],{"class":70,"line":3165},[68,118947,3890],{"emptyLinePlaceholder":1567},[68,118949,118950],{"class":70,"line":3170},[68,118951,118952],{"class":302},"#安装指定的软件命令\n",[68,118954,118955,118957,118959,118961,118963,118965,118967],{"class":70,"line":3184},[68,118956,26062],{"class":74},[68,118958,118791],{"class":1742},[68,118960,25319],{"class":1742},[68,118962,30386],{"class":316},[68,118964,118880],{"class":1742},[68,118966,1712],{"class":78},[68,118968,52791],{"class":316},[68,118970,118971],{"class":70,"line":3189},[68,118972,3890],{"emptyLinePlaceholder":1567},[68,118974,118975],{"class":70,"line":3218},[68,118976,118977],{"class":302},"#安装多个软件包\n",[68,118979,118980,118982,118984,118986,118988,118991,118994,118996,118998,119001,119003,119005],{"class":70,"line":3223},[68,118981,26062],{"class":74},[68,118983,118791],{"class":1742},[68,118985,25319],{"class":1742},[68,118987,30386],{"class":316},[68,118989,118990],{"class":1742},"package_",[68,118992,118993],{"class":316},"1>",[68,118995,30386],{"class":316},[68,118997,118990],{"class":1742},[68,118999,119000],{"class":316},"2>",[68,119002,30386],{"class":316},[68,119004,118990],{"class":1742},[68,119006,119007],{"class":316},"3>\n",[68,119009,119010],{"class":70,"line":3240},[68,119011,3890],{"emptyLinePlaceholder":1567},[68,119013,119014],{"class":70,"line":3245},[68,119015,119016],{"class":302},"#更新指定的软件命令\n",[68,119018,119019,119021,119023,119025,119027,119029,119031],{"class":70,"line":3250},[68,119020,26062],{"class":74},[68,119022,118791],{"class":1742},[68,119024,118821],{"class":1742},[68,119026,30386],{"class":316},[68,119028,118880],{"class":1742},[68,119030,1712],{"class":78},[68,119032,52791],{"class":316},[68,119034,119035],{"class":70,"line":3255},[68,119036,3890],{"emptyLinePlaceholder":1567},[68,119038,119039],{"class":70,"line":3269},[68,119040,119041],{"class":302},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[68,119043,119044,119046,119049,119051,119053,119055],{"class":70,"line":3274},[68,119045,118842],{"class":74},[68,119047,119048],{"class":1742}," show",[68,119050,30386],{"class":316},[68,119052,118880],{"class":1742},[68,119054,1712],{"class":78},[68,119056,52791],{"class":316},[68,119058,119059],{"class":70,"line":4067},[68,119060,3890],{"emptyLinePlaceholder":1567},[68,119062,119063],{"class":70,"line":4081},[68,119064,119065],{"class":302},"#删除软件包命令\n",[68,119067,119068,119070,119072,119074,119076,119078,119080],{"class":70,"line":4089},[68,119069,26062],{"class":74},[68,119071,118791],{"class":1742},[68,119073,27565],{"class":1742},[68,119075,30386],{"class":316},[68,119077,118880],{"class":1742},[68,119079,1712],{"class":78},[68,119081,52791],{"class":316},[68,119083,119084],{"class":70,"line":4094},[68,119085,3890],{"emptyLinePlaceholder":1567},[68,119087,119088],{"class":70,"line":4100},[68,119089,119090],{"class":302},"# 清理旧版本和缓存（释放磁盘空间）\n",[68,119092,119093,119095,119097,119100],{"class":70,"line":4106},[68,119094,26062],{"class":74},[68,119096,118791],{"class":1742},[68,119098,119099],{"class":1742}," autoremove",[68,119101,119102],{"class":302},"  # 删除不再需要的依赖和库文件\n",[68,119104,119105,119107,119109,119112],{"class":70,"line":4111},[68,119106,26062],{"class":74},[68,119108,118791],{"class":1742},[68,119110,119111],{"class":1742}," clean",[68,119113,119114],{"class":302},"       # 清理下载的缓存包\n",[68,119116,119117],{"class":70,"line":9437},[68,119118,3890],{"emptyLinePlaceholder":1567},[68,119120,119121],{"class":70,"line":9461},[68,119122,119123],{"class":302},"#移除软件包及配置文件\n",[68,119125,119126,119128,119130,119133,119135,119137,119139],{"class":70,"line":9466},[68,119127,26062],{"class":74},[68,119129,118791],{"class":1742},[68,119131,119132],{"class":1742}," purge",[68,119134,30386],{"class":316},[68,119136,118880],{"class":1742},[68,119138,1712],{"class":78},[68,119140,52791],{"class":316},[68,119142,119143],{"class":70,"line":9472},[68,119144,3890],{"emptyLinePlaceholder":1567},[68,119146,119147],{"class":70,"line":9499},[68,119148,119149],{"class":302},"#查找软件包命令\n",[68,119151,119152,119154,119156,119159,119161,119164,119166],{"class":70,"line":9504},[68,119153,26062],{"class":74},[68,119155,118791],{"class":1742},[68,119157,119158],{"class":1742}," search",[68,119160,30386],{"class":316},[68,119162,119163],{"class":1742},"keywor",[68,119165,1943],{"class":78},[68,119167,52791],{"class":316},[68,119169,119170],{"class":70,"line":9510},[68,119171,3890],{"emptyLinePlaceholder":1567},[68,119173,119174],{"class":70,"line":9522},[68,119175,119176],{"class":302},"#列出所有已安装的包\n",[68,119178,119179,119181,119183],{"class":70,"line":9534},[68,119180,118842],{"class":74},[68,119182,118845],{"class":1742},[68,119184,119185],{"class":85}," --installed\n",[68,119187,119188],{"class":70,"line":9546},[68,119189,3890],{"emptyLinePlaceholder":1567},[68,119191,119192],{"class":70,"line":11204},[68,119193,119194],{"class":302},"#列出所有已安装的包的版本信息\n",[68,119196,119197,119199,119201],{"class":70,"line":11229},[68,119198,118842],{"class":74},[68,119200,118845],{"class":1742},[68,119202,119203],{"class":85}," --all-versions\n",[1553,119205,119206],{},"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":63,"searchDepth":82,"depth":82,"links":119208},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118753,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119215,"title":119216,"body":119217,"description":1564,"extension":1565,"meta":119958,"navigation":1567,"path":119959,"seo":119960,"stem":119961,"__hash__":119962},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119218,"toc":119945},[119219,119222,119226,119229,119235,119239,119243,119249,119254,119259,119264,119269,119274,119277,119280,119283,119286,119290,119293,119298,119301,119306,119309,119314,119321,119324,119327,119330,119333,119336,119347,119351,119355,119360,119365,119369,119374,119378,119383,119387,119391,119396,119399,119444,119449,119453,119457,119462,119468,119473,119483,119488,119498,119503,119508,119535,119539,119542,119547,119550,119575,119579,119584,119587,119592,119597,119617,119622,119625,119640,119644,119697,119700,119705,119709,119712,119727,119730,119733,119738,119742,119746,119749,119753,119757,119760,119765,119770,119774,119781,119789,119792,119799,119804,119809,119812,119817,119824,119829,119836,119840,119842,119847,119851,119854,119857,119862,119865,119870,119873,119878,119883,119888,119892,119897,119901,119942],[10,119220,119216],{"id":119221},"_2-linux装机教程",[14,119223,119225],{"id":119224},"_21-实体机","2.1 实体机",[170,119227,119228],{},"使用清华源：（Ubuntu24.04）",[170,119230,119231],{},[1867,119232,119233],{"href":119233,"rel":119234},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25350],[14,119236,119238],{"id":119237},"_22-普通虚拟机","2.2 普通虚拟机",[19,119240,119242],{"id":119241},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[170,119244,119245],{},[1867,119246,119247],{"href":119247,"rel":119248},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25350],[170,119250,119251],{},[801,119252],{"alt":63,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[170,119255,119256],{},[801,119257],{"alt":63,"src":119258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[170,119260,119261],{},[801,119262],{"alt":63,"src":119263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[170,119265,119266],{},[801,119267],{"alt":63,"src":119268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[170,119270,119271],{},[801,119272],{"alt":63,"src":119273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[170,119275,119276],{},"内存4G（4096MB）；",[170,119278,119279],{},"CPU给4个核；",[170,119281,119282],{},"硬盘动态分配60G；",[170,119284,119285],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,119287,119289],{"id":119288},"_222-安装ubuntu","2.2.2 安装Ubuntu",[170,119291,119292],{},"按照1.1的步骤下载Ubuntu",[170,119294,119295],{},[801,119296],{"alt":63,"src":119297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[170,119299,119300],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[170,119302,119303],{},[801,119304],{"alt":63,"src":119305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[170,119307,119308],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[170,119310,119311],{},[801,119312],{"alt":63,"src":119313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[170,119315,119316,119317,119320],{},"选择“正常安装”(找不到都用Alt+F7)， ",[268,119318,119319],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[170,119322,119323],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[170,119325,119326],{},"将改动写入磁盘吗 继续",[170,119328,119329],{},"选择东八区（shanghai，大致在地图上点一下），继续",[170,119331,119332],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[170,119334,119335],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[170,119337,119338,119339,119342,119343,119346],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[268,119340,119341],{},"除了"," 选不发送系统信息与不升级之外， ",[268,119344,119345],{},"其它"," 都跳过或前进）",[19,119348,119350],{"id":119349},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[245,119352,119354],{"id":119353},"_2231-全屏","2.2.3.1 全屏",[170,119356,119357],{},[801,119358],{"alt":63,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[170,119361,119362],{},[801,119363],{"alt":63,"src":119364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[245,119366,119368],{"id":119367},"_2232-文件交换","2.2.3.2 文件交换",[170,119370,119371],{},[801,119372],{"alt":63,"src":119373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[245,119375,119377],{"id":119376},"_2233-新建文本文档","2.2.3.3 新建文本文档",[170,119379,119380],{},[801,119381],{"alt":63,"src":119382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119384,119386],{"id":119385},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,119388,119390],{"id":119389},"_231-简介与优缺点","2.3.1 简介与优缺点",[263,119392,119393],{},[27,119394,119395],{},"什么情况下推荐？",[170,119397,119398],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[263,119400,119401],{"start":82},[27,119402,119403,119404],{},"优缺点：",[263,119405,119406,119436],{},[27,119407,119408,119409],{},"优点：",[263,119410,119411,119414,119421,119424,119427,119430,119433],{},[27,119412,119413],{},"WSL2是最好的Linux发行版;(bushi)",[27,119415,119416,119417,119420],{},"性能损耗极低。且比在Windows上跑深度性能 ",[268,119418,119419],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[27,119422,119423],{},"非常方便调用USB设备，可以USB直通;",[27,119425,119426],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[27,119428,119429],{},"非常方便Win与WSL2互相传文件等协同操作;",[27,119431,119432],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[27,119434,119435],{},"非常方便使用Windows的VScode远程开发;",[27,119437,119438,119439],{},"缺点：",[263,119440,119441],{},[27,119442,119443],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[170,119445,119446],{},[801,119447],{"alt":63,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,119450,119452],{"id":119451},"_232-安装教程","2.3.2 安装教程",[245,119454,119456],{"id":119455},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[263,119458,119459],{},[27,119460,119461],{},"方法一(图形界面)",[170,119463,119464,119465,26104],{},"用Win+R输入",[65,119466,119467],{},"appwiz.cpl",[170,119469,119470],{},[801,119471],{"alt":63,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[170,119474,119475,119476,119479,119480,27959],{},"点击OK进入 ",[268,119477,119478],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[268,119481,119482],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[170,119484,119485],{},[801,119486],{"alt":63,"src":119487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[170,119489,119490,119491,102493,119494,119497],{},"选择 ",[268,119492,119493],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[268,119495,119496],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[170,119499,119500],{},[801,119501],{"alt":63,"src":119502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[263,119504,119505],{"start":82},[27,119506,119507],{},"方法二(命令行)",[58,119509,119513],{"className":119510,"code":119511,"language":119512,"meta":63,"style":63},"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",[65,119514,119515,119520,119525,119530],{"__ignoreMap":63},[68,119516,119517],{"class":70,"line":71},[68,119518,119519],{},"# 开启 Linux 子系统\n",[68,119521,119522],{"class":70,"line":82},[68,119523,119524],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[68,119526,119527],{"class":70,"line":98},[68,119528,119529],{},"# 开启虚拟机平台\n",[68,119531,119532],{"class":70,"line":104},[68,119533,119534],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[245,119536,119538],{"id":119537},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[170,119540,119541],{},"用管理员权限打开powershell",[170,119543,119544],{},[801,119545],{"alt":63,"src":119546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[170,119548,119549],{},"升级WSL并设置默认版本为WSL2",[58,119551,119553],{"className":119510,"code":119552,"language":119512,"meta":63,"style":63},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[65,119554,119555,119560,119565,119570],{"__ignoreMap":63},[68,119556,119557],{"class":70,"line":71},[68,119558,119559],{},"# 更新 wsl\n",[68,119561,119562],{"class":70,"line":82},[68,119563,119564],{},"wsl --update\n",[68,119566,119567],{"class":70,"line":98},[68,119568,119569],{},"# 将 wsl 版本设置为 wsl2\n",[68,119571,119572],{"class":70,"line":104},[68,119573,119574],{},"wsl --set-default-version 2\n",[245,119576,119578],{"id":119577},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[263,119580,119581],{},[27,119582,119583],{},"方式一(商店下载)",[170,119585,119586],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[170,119588,119589],{},[801,119590],{"alt":63,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[263,119593,119594],{"start":82},[27,119595,119596],{},"方式二(命令行安装)",[58,119598,119600],{"className":119510,"code":119599,"language":119512,"meta":63,"style":63},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[65,119601,119602,119607,119612],{"__ignoreMap":63},[68,119603,119604],{"class":70,"line":71},[68,119605,119606],{},"# 列出可安装的 Linux 版本\n",[68,119608,119609],{"class":70,"line":82},[68,119610,119611],{},"#（需要科学手段）\n",[68,119613,119614],{"class":70,"line":98},[68,119615,119616],{},"wsl --list --online\n",[170,119618,119619],{},[801,119620],{"alt":63,"src":119621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[170,119623,119624],{},"选择对应发行版并安装",[58,119626,119628],{"className":119510,"code":119627,"language":119512,"meta":63,"style":63},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[65,119629,119630,119635],{"__ignoreMap":63},[68,119631,119632],{"class":70,"line":71},[68,119633,119634],{},"# Ubuntu安装完毕后需要重启系统\n",[68,119636,119637],{"class":70,"line":82},[68,119638,119639],{},"wsl --install -d Ubuntu-24.04\n",[245,119641,119643],{"id":119642},"_2324-查看系统状态","2.3.2.4 查看系统状态",[58,119645,119647],{"className":119510,"code":119646,"language":119512,"meta":63,"style":63},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[65,119648,119649,119654,119659,119664,119669,119673,119677,119682,119687,119692],{"__ignoreMap":63},[68,119650,119651],{"class":70,"line":71},[68,119652,119653],{},"# 查看 wsl\n",[68,119655,119656],{"class":70,"line":82},[68,119657,119658],{},"wsl -l\n",[68,119660,119661],{"class":70,"line":98},[68,119662,119663],{},"# 查看 wsl 运行版本或模式\n",[68,119665,119666],{"class":70,"line":104},[68,119667,119668],{},"wsl -l -v\n",[68,119670,119671],{"class":70,"line":112},[68,119672,3890],{"emptyLinePlaceholder":1567},[68,119674,119675],{"class":70,"line":124},[68,119676,3890],{"emptyLinePlaceholder":1567},[68,119678,119679],{"class":70,"line":1496},[68,119680,119681],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[68,119683,119684],{"class":70,"line":1502},[68,119685,119686],{},"wsl --set-version \u003Cdistro> 2\n",[68,119688,119689],{"class":70,"line":1510},[68,119690,119691],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[68,119693,119694],{"class":70,"line":1521},[68,119695,119696],{},"wsl --unregister \u003Cdistro>\n",[170,119698,119699],{},"输出Version为2即正常",[170,119701,119702],{},[801,119703],{"alt":63,"src":119704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[245,119706,119708],{"id":119707},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[170,119710,119711],{},"直接在Powershell里输入wsl命令进入子系统",[58,119713,119715],{"className":119510,"code":119714,"language":119512,"meta":63,"style":63},"# 进入子系统\nwsl\n",[65,119716,119717,119722],{"__ignoreMap":63},[68,119718,119719],{"class":70,"line":71},[68,119720,119721],{},"# 进入子系统\n",[68,119723,119724],{"class":70,"line":82},[68,119725,119726],{},"wsl\n",[170,119728,119729],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[170,119731,119732],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[170,119734,119735],{},[801,119736],{"alt":63,"src":119737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,119739,119741],{"id":119740},"_233-配置各种环境","2.3.3 配置各种环境",[245,119743,119745],{"id":119744},"_2331-换源","2.3.3.1 换源",[170,119747,119748],{},"(同实体机LINUX，往下找教程)",[245,119750,119752],{"id":119751},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24396,119754,119756],{"id":119755},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[170,119758,119759],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[170,119761,119762],{},[801,119763],{"alt":63,"src":119764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[170,119766,119767],{},[801,119768],{"alt":63,"src":119769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24396,119771,119773],{"id":119772},"_23322-cuda","2.3.3.2.2 CUDA",[170,119775,119776,119777],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1867,119778,119779],{"href":119779,"rel":119780},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25350],[170,119782,119783,119786],{},[801,119784],{"alt":63,"src":119785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[801,119787],{"alt":63,"src":119788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[170,119790,119791],{},"在下方的网站，选择合适的版本。",[170,119793,119794,119795],{},"WSL2 专属 CUDA 指南：",[1867,119796,119797],{"href":119797,"rel":119798},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25350],[170,119800,119801],{},[268,119802,119803],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[170,119805,119806],{},[801,119807],{"alt":63,"src":119808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[170,119810,119811],{},"挨行敲一遍",[170,119813,119814],{},[801,119815],{"alt":63,"src":119816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[170,119818,119819,119820,119823],{},"敲完后，输入",[65,119821,119822],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[170,119825,119826],{},[801,119827],{"alt":63,"src":119828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[170,119830,119831,119832,119835],{},"（请详看下方教程的",[268,119833,119834],{},"安装CUDA的配置环境来看","如何配置环境）",[24396,119837,119839],{"id":119838},"_23323-cudnn","2.3.3.2.3 cuDNN",[170,119841,119748],{},[170,119843,119844],{},[801,119845],{"alt":63,"src":119846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[245,119848,119850],{"id":119849},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[170,119852,119853],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[170,119855,119856],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[170,119858,119859],{},[801,119860],{"alt":63,"src":119861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[170,119863,119864],{},"连接WSL2",[170,119866,119867],{},[801,119868],{"alt":63,"src":119869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[170,119871,119872],{},"远程开发成功。",[170,119874,119875],{},[801,119876],{"alt":63,"src":119877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[170,119879,119880],{},[801,119881],{"alt":63,"src":119882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[170,119884,119885],{},[801,119886],{"alt":63,"src":119887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[245,119889,119891],{"id":119890},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[170,119893,119894],{},[801,119895],{"alt":63,"src":119896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[245,119898,119900],{"id":119899},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[58,119902,119904],{"className":118770,"code":119903,"language":118772,"meta":63,"style":63},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[65,119905,119906,119914,119922,119933,119937],{"__ignoreMap":63},[68,119907,119908,119910,119912],{"class":70,"line":71},[68,119909,26062],{"class":74},[68,119911,118791],{"class":1742},[68,119913,27728],{"class":1742},[68,119915,119916,119918,119920],{"class":70,"line":82},[68,119917,26062],{"class":74},[68,119919,118791],{"class":1742},[68,119921,118807],{"class":1742},[68,119923,119924,119926,119928,119930],{"class":70,"line":98},[68,119925,26062],{"class":74},[68,119927,118791],{"class":1742},[68,119929,25319],{"class":1742},[68,119931,119932],{"class":1742}," mesa-utils\n",[68,119934,119935],{"class":70,"line":104},[68,119936,3890],{"emptyLinePlaceholder":1567},[68,119938,119939],{"class":70,"line":112},[68,119940,119941],{"class":302},"#然后重启wsl2即可\n",[1553,119943,119944],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":63,"searchDepth":82,"depth":82,"links":119946},[119947,119948,119953],{"id":119224,"depth":82,"text":119225},{"id":119237,"depth":82,"text":119238,"children":119949},[119950,119951,119952],{"id":119241,"depth":98,"text":119242},{"id":119288,"depth":98,"text":119289},{"id":119349,"depth":98,"text":119350},{"id":119385,"depth":82,"text":119386,"children":119954},[119955,119956,119957],{"id":119389,"depth":98,"text":119390},{"id":119451,"depth":98,"text":119452},{"id":119740,"depth":98,"text":119741},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119216,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119964,"title":119965,"body":119966,"description":1564,"extension":1565,"meta":122902,"navigation":1567,"path":122903,"seo":122904,"stem":122905,"__hash__":122906},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119967,"toc":122874},[119968,119971,119975,119981,119985,119991,119995,120183,120186,120191,120195,120199,120202,120205,120211,120216,120219,120222,120227,120260,120265,120269,120346,120349,120354,120358,120361,120400,120403,120412,120430,120435,120442,120559,120564,120567,120594,120599,120603,120612,120662,120669,120673,120676,120690,120697,120731,120736,120740,120763,120766,120771,120775,120778,120781,120784,120826,120830,120833,120836,120877,120881,120885,120888,120893,120898,120901,120924,120927,120935,120940,120943,120948,120953,120956,120961,120965,120970,120993,120998,121060,121068,121073,121078,121081,121086,121089,121094,121099,121117,121122,121128,121133,121147,121151,121154,121157,121160,121203,121206,121211,121312,121315,121320,121324,121328,121365,121369,121373,121377,121423,121427,121472,121476,121483,121491,121546,121549,121626,121629,121652,121656,121659,121664,121669,121677,121680,121685,121690,121695,121698,121703,121712,121715,121720,121723,121794,121799,121802,121807,121810,121815,121818,121823,121826,121831,121836,121839,121914,121917,121930,121935,121938,121952,121955,121984,121989,122018,122021,122026,122030,122035,122044,122047,122052,122055,122060,122063,122066,122071,122074,122079,122084,122087,122092,122095,122220,122225,122255,122258,122263,122268,122285,122288,122331,122334,122361,122366,122379,122522,122526,122531,122545,122548,122599,122602,122632,122635,122651,122656,122670,122673,122740,122745,122754,122759,122762,122774,122779,122786,122810,122813,122818,122821,122840,122845,122852,122864,122871],[10,119969,119965],{"id":119970},"_3-安装必备配置",[14,119972,119974],{"id":119973},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[58,119976,119979],{"className":119977,"code":119978,"language":6676},[6674],"  打开下方网站（注意，该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",[65,119980,119978],{"__ignoreMap":63},[19,119982,119984],{"id":119983},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[58,119986,119989],{"className":119987,"code":119988,"language":6676},[6674],"  输入以下命令\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",[65,119990,119988],{"__ignoreMap":63},[19,119992,119994],{"id":119993},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[58,119996,120000],{"className":119997,"code":119998,"language":119999,"meta":63,"style":63},"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",[65,120001,120002,120010,120021,120033,120047,120051,120061,120066,120070,120074,120079,120083,120095,120099,120104,120108,120119,120123,120139,120143,120154,120158,120163,120167,120175],{"__ignoreMap":63},[68,120003,120004,120006,120008],{"class":70,"line":71},[68,120005,26062],{"class":74},[68,120007,118791],{"class":1742},[68,120009,27728],{"class":1742},[68,120011,120012,120014,120016,120018],{"class":70,"line":82},[68,120013,26062],{"class":74},[68,120015,118791],{"class":1742},[68,120017,25319],{"class":1742},[68,120019,120020],{"class":1742}," vim\n",[68,120022,120023,120025,120028,120030],{"class":70,"line":98},[68,120024,26062],{"class":74},[68,120026,120027],{"class":1742}," rm",[68,120029,26811],{"class":85},[68,120031,120032],{"class":1742}," \u002Fetc\u002Fapt\u002Fsources.list\n",[68,120034,120035,120037,120039,120041,120044],{"class":70,"line":104},[68,120036,26062],{"class":74},[68,120038,120027],{"class":1742},[68,120040,26811],{"class":85},[68,120042,120043],{"class":1742}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[68,120045,120046],{"class":85},"**\n",[68,120048,120049],{"class":70,"line":112},[68,120050,3890],{"emptyLinePlaceholder":1567},[68,120052,120053,120055,120058],{"class":70,"line":124},[68,120054,26062],{"class":74},[68,120056,120057],{"class":1742}," vim",[68,120059,120060],{"class":1742}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[68,120062,120063],{"class":70,"line":1496},[68,120064,120065],{"class":1742},"```\n",[68,120067,120068],{"class":70,"line":1502},[68,120069,3890],{"emptyLinePlaceholder":1567},[68,120071,120072],{"class":70,"line":1510},[68,120073,3890],{"emptyLinePlaceholder":1567},[68,120075,120076],{"class":70,"line":1521},[68,120077,120078],{"class":74},"选择好Ubuntu版本后，复制下方的内容。\n",[68,120080,120081],{"class":70,"line":3103},[68,120082,3890],{"emptyLinePlaceholder":1567},[68,120084,120085,120087,120090,120093],{"class":70,"line":3108},[68,120086,1855],{"class":316},[68,120088,120089],{"class":1742},"[](",[68,120091,120092],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[68,120094,1646],{"class":1742},[68,120096,120097],{"class":70,"line":3114},[68,120098,3890],{"emptyLinePlaceholder":1567},[68,120100,120101],{"class":70,"line":3119},[68,120102,120103],{"class":74},"粘贴进去\n",[68,120105,120106],{"class":70,"line":3133},[68,120107,3890],{"emptyLinePlaceholder":1567},[68,120109,120110,120112,120114,120117],{"class":70,"line":3138},[68,120111,1855],{"class":316},[68,120113,120089],{"class":1742},[68,120115,120116],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[68,120118,1646],{"class":1742},[68,120120,120121],{"class":70,"line":3144},[68,120122,3890],{"emptyLinePlaceholder":1567},[68,120124,120125,120128,120131,120134,120136],{"class":70,"line":3165},[68,120126,120127],{"class":74},"按一下ESC，然后英文冒号，输入",[68,120129,120130],{"class":1742}," `",[68,120132,120133],{"class":74},":wq!",[68,120135,2599],{"class":1742},[68,120137,120138],{"class":74},"然后回车\n",[68,120140,120141],{"class":70,"line":3170},[68,120142,3890],{"emptyLinePlaceholder":1567},[68,120144,120145,120147,120149,120152],{"class":70,"line":3184},[68,120146,1855],{"class":316},[68,120148,120089],{"class":1742},[68,120150,120151],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[68,120153,1646],{"class":1742},[68,120155,120156],{"class":70,"line":3189},[68,120157,3890],{"emptyLinePlaceholder":1567},[68,120159,120160],{"class":70,"line":3218},[68,120161,120162],{"class":74},"输入以下命令\n",[68,120164,120165],{"class":70,"line":3223},[68,120166,3890],{"emptyLinePlaceholder":1567},[68,120168,120169,120172],{"class":70,"line":3240},[68,120170,120171],{"class":1742},"```",[68,120173,120174],{"class":74},"Bash\n",[68,120176,120177,120179,120181],{"class":70,"line":3245},[68,120178,26062],{"class":74},[68,120180,118791],{"class":1742},[68,120182,27728],{"class":1742},[170,120184,120185],{},"这里被替换成对应学校则成功",[170,120187,120188],{},[801,120189],{"alt":63,"src":120190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120192,120194],{"id":120193},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,120196,120198],{"id":120197},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[170,120200,120201],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[170,120203,120204],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[170,120206,120207],{},[1867,120208,120209],{"href":120209,"rel":120210},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25350],[170,120212,120213],{},[801,120214],{"alt":63,"src":120215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[170,120217,120218],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[170,120220,120221],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[170,120223,120224],{},[801,120225],{"alt":63,"src":120226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[58,120228,120230],{"className":118770,"code":120229,"language":118772,"meta":63,"style":63},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[65,120231,120232,120237,120244,120249],{"__ignoreMap":63},[68,120233,120234],{"class":70,"line":71},[68,120235,120236],{"class":302},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[68,120238,120239,120241],{"class":70,"line":82},[68,120240,102751],{"class":85},[68,120242,120243],{"class":1742}," ~\u002FDownloads\n",[68,120245,120246],{"class":70,"line":98},[68,120247,120248],{"class":302},"#下方chrome安装包名不一定是这个，根据名字来看\n",[68,120250,120251,120253,120255,120257],{"class":70,"line":104},[68,120252,26062],{"class":74},[68,120254,118791],{"class":1742},[68,120256,25319],{"class":1742},[68,120258,120259],{"class":1742}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[170,120261,120262],{},[801,120263],{"alt":63,"src":120264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,120266,120268],{"id":120267},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[58,120270,120272],{"className":118770,"code":120271,"language":118772,"meta":63,"style":63},"# 老版\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",[65,120273,120274,120279,120287,120298,120303,120307,120312,120322,120330,120341],{"__ignoreMap":63},[68,120275,120276],{"class":70,"line":71},[68,120277,120278],{"class":302},"# 老版\n",[68,120280,120281,120283,120285],{"class":70,"line":82},[68,120282,26062],{"class":74},[68,120284,118791],{"class":1742},[68,120286,27728],{"class":1742},[68,120288,120289,120291,120293,120295],{"class":70,"line":98},[68,120290,26062],{"class":74},[68,120292,118791],{"class":1742},[68,120294,25319],{"class":1742},[68,120296,120297],{"class":1742}," neofetch\n",[68,120299,120300],{"class":70,"line":104},[68,120301,120302],{"class":74},"neofetch\n",[68,120304,120305],{"class":70,"line":112},[68,120306,3890],{"emptyLinePlaceholder":1567},[68,120308,120309],{"class":70,"line":124},[68,120310,120311],{"class":302},"# 新版\n",[68,120313,120314,120316,120319],{"class":70,"line":1496},[68,120315,26062],{"class":74},[68,120317,120318],{"class":1742}," add-apt-repository",[68,120320,120321],{"class":1742}," ppa:zhangsongcui3371\u002Ffastfetch\n",[68,120323,120324,120326,120328],{"class":70,"line":1502},[68,120325,26062],{"class":74},[68,120327,118791],{"class":1742},[68,120329,27728],{"class":1742},[68,120331,120332,120334,120336,120338],{"class":70,"line":1510},[68,120333,26062],{"class":74},[68,120335,118791],{"class":1742},[68,120337,25319],{"class":1742},[68,120339,120340],{"class":1742}," fastfetch\n",[68,120342,120343],{"class":70,"line":1521},[68,120344,120345],{"class":74},"fastfetch\n",[170,120347,120348],{},"这里显示，一共有3162个debian的程序，7个snap程序",[170,120350,120351],{},[801,120352],{"alt":63,"src":120353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,120355,120357],{"id":120356},"_323-移除snap应用","3.2.3 移除snap应用",[170,120359,120360],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[58,120362,120364],{"className":118770,"code":120363,"language":118772,"meta":63,"style":63},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[65,120365,120366,120378,120389],{"__ignoreMap":63},[68,120367,120368,120370,120372,120375],{"class":70,"line":71},[68,120369,26062],{"class":74},[68,120371,27999],{"class":1742},[68,120373,120374],{"class":1742}," disable",[68,120376,120377],{"class":1742}," snapd.service\n",[68,120379,120380,120382,120384,120386],{"class":70,"line":82},[68,120381,26062],{"class":74},[68,120383,27999],{"class":1742},[68,120385,120374],{"class":1742},[68,120387,120388],{"class":1742}," snapd.socket\n",[68,120390,120391,120393,120395,120397],{"class":70,"line":98},[68,120392,26062],{"class":74},[68,120394,27999],{"class":1742},[68,120396,120374],{"class":1742},[68,120398,120399],{"class":1742}," snapd.seeded.service\n",[170,120401,120402],{},"然后查看snap应用列表",[170,120404,120405,120406,120411],{},"根据你安装的选择不同（最小安装或普通安装），有",[1867,120407,120410],{"href":120408,"rel":120409},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25350],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[58,120413,120415],{"className":118770,"code":120414,"language":118772,"meta":63,"style":63},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[65,120416,120417,120422],{"__ignoreMap":63},[68,120418,120419],{"class":70,"line":71},[68,120420,120421],{"class":302},"# 查询当前系统上snap安装了哪些app\n",[68,120423,120424,120427],{"class":70,"line":82},[68,120425,120426],{"class":74},"snap",[68,120428,120429],{"class":1742}," list\n",[170,120431,120432],{},[801,120433],{"alt":63,"src":120434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[170,120436,120437,120438,120441],{},"卸载掉图中所有应用，按照 ",[268,120439,120440],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[58,120443,120445],{"className":118770,"code":120444,"language":118772,"meta":63,"style":63},"#移除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",[65,120446,120447,120452,120464,120469,120480,120485,120496,120501,120512,120517,120521,120526,120537,120548],{"__ignoreMap":63},[68,120448,120449],{"class":70,"line":71},[68,120450,120451],{"class":302},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[68,120453,120454,120456,120459,120461],{"class":70,"line":82},[68,120455,26062],{"class":74},[68,120457,120458],{"class":1742}," snap",[68,120460,27565],{"class":1742},[68,120462,120463],{"class":1742}," snap-store\n",[68,120465,120466],{"class":70,"line":98},[68,120467,120468],{"class":302},"#移除firefox浏览器\n",[68,120470,120471,120473,120475,120477],{"class":70,"line":104},[68,120472,26062],{"class":74},[68,120474,120458],{"class":1742},[68,120476,27565],{"class":1742},[68,120478,120479],{"class":1742}," firefox\n",[68,120481,120482],{"class":70,"line":112},[68,120483,120484],{"class":302},"#移除gnome-42-2204\n",[68,120486,120487,120489,120491,120493],{"class":70,"line":124},[68,120488,26062],{"class":74},[68,120490,120458],{"class":1742},[68,120492,27565],{"class":1742},[68,120494,120495],{"class":1742}," gnome-42-2204\n",[68,120497,120498],{"class":70,"line":1496},[68,120499,120500],{"class":302},"#移除gtk-common-themes\n",[68,120502,120503,120505,120507,120509],{"class":70,"line":1502},[68,120504,26062],{"class":74},[68,120506,120458],{"class":1742},[68,120508,27565],{"class":1742},[68,120510,120511],{"class":1742}," gtk-common-themes\n",[68,120513,120514],{"class":70,"line":1510},[68,120515,120516],{"class":302},"#移除其它...\n",[68,120518,120519],{"class":70,"line":1521},[68,120520,4164],{"class":78},[68,120522,120523],{"class":70,"line":3103},[68,120524,120525],{"class":302},"#移除core22,bare以及snapd\n",[68,120527,120528,120530,120532,120534],{"class":70,"line":3108},[68,120529,26062],{"class":74},[68,120531,120458],{"class":1742},[68,120533,27565],{"class":1742},[68,120535,120536],{"class":1742}," core22\n",[68,120538,120539,120541,120543,120545],{"class":70,"line":3114},[68,120540,26062],{"class":74},[68,120542,120458],{"class":1742},[68,120544,27565],{"class":1742},[68,120546,120547],{"class":1742}," bare\n",[68,120549,120550,120552,120554,120556],{"class":70,"line":3119},[68,120551,26062],{"class":74},[68,120553,120458],{"class":1742},[68,120555,27565],{"class":1742},[68,120557,120558],{"class":1742}," snapd\n",[170,120560,120561],{},[801,120562],{"alt":63,"src":120563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[170,120565,120566],{},"输入以下命令查看是否还有snap包",[58,120568,120570],{"className":118770,"code":120569,"language":118772,"meta":63,"style":63},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[65,120571,120572,120578,120582,120586,120590],{"__ignoreMap":63},[68,120573,120574,120576],{"class":70,"line":71},[68,120575,120426],{"class":74},[68,120577,120429],{"class":1742},[68,120579,120580],{"class":70,"line":82},[68,120581,120278],{"class":302},[68,120583,120584],{"class":70,"line":98},[68,120585,120302],{"class":74},[68,120587,120588],{"class":70,"line":104},[68,120589,120311],{"class":302},[68,120591,120592],{"class":70,"line":112},[68,120593,120345],{"class":74},[170,120595,120596],{},[801,120597],{"alt":63,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,120600,120602],{"id":120601},"_324-移除snap","3.2.4 移除snap",[170,120604,120605,120606,120611],{},"在删除掉",[1867,120607,120610],{"href":120608,"rel":120609},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25350],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[58,120613,120615],{"className":118770,"code":120614,"language":118772,"meta":63,"style":63}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[65,120616,120617,120622,120635,120640,120651],{"__ignoreMap":63},[68,120618,120619],{"class":70,"line":71},[68,120620,120621],{"class":302}," #使用apt移除掉snap\n",[68,120623,120624,120626,120628,120630,120633],{"class":70,"line":82},[68,120625,26062],{"class":74},[68,120627,118791],{"class":1742},[68,120629,119099],{"class":1742},[68,120631,120632],{"class":85}," --purge",[68,120634,120558],{"class":1742},[68,120636,120637],{"class":70,"line":98},[68,120638,120639],{"class":302},"#移除snapd的一些目录\n",[68,120641,120642,120644,120646,120648],{"class":70,"line":104},[68,120643,26062],{"class":74},[68,120645,120027],{"class":1742},[68,120647,26811],{"class":85},[68,120649,120650],{"class":1742}," \u002Fvar\u002Fcache\u002Fsnapd\n",[68,120652,120653,120655,120657,120659],{"class":70,"line":112},[68,120654,26062],{"class":74},[68,120656,120027],{"class":1742},[68,120658,26811],{"class":85},[68,120660,120661],{"class":1742}," ~\u002Fsnap\n",[170,120663,120664,120665,120668],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[65,120666,120667],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,120670,120672],{"id":120671},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[170,120674,120675],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[58,120677,120679],{"className":118770,"code":120678,"language":118772,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[65,120680,120681],{"__ignoreMap":63},[68,120682,120683,120685,120687],{"class":70,"line":71},[68,120684,26062],{"class":74},[68,120686,120057],{"class":1742},[68,120688,120689],{"class":1742}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[170,120691,120692,120693,120696],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[65,120694,120695],{},":wq"," 回车",[58,120698,120700],{"className":118770,"code":120699,"language":118772,"meta":63,"style":63},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[65,120701,120702,120709,120723],{"__ignoreMap":63},[68,120703,120704,120707],{"class":70,"line":71},[68,120705,120706],{"class":74},"Package:",[68,120708,120558],{"class":1742},[68,120710,120711,120714,120717,120720],{"class":70,"line":82},[68,120712,120713],{"class":74},"Pin:",[68,120715,120716],{"class":1742}," release",[68,120718,120719],{"class":1742}," a=",[68,120721,120722],{"class":85},"*\n",[68,120724,120725,120728],{"class":70,"line":98},[68,120726,120727],{"class":74},"Pin-Priority:",[68,120729,120730],{"class":85}," -10\n",[170,120732,120733],{},[801,120734],{"alt":63,"src":120735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,120737,120739],{"id":120738},"_326-测试是否成功","3.2.6 测试是否成功",[58,120741,120743],{"className":118770,"code":120742,"language":118772,"meta":63,"style":63},"sudo apt update\nsudo apt install firefox\n",[65,120744,120745,120753],{"__ignoreMap":63},[68,120746,120747,120749,120751],{"class":70,"line":71},[68,120748,26062],{"class":74},[68,120750,118791],{"class":1742},[68,120752,27728],{"class":1742},[68,120754,120755,120757,120759,120761],{"class":70,"line":82},[68,120756,26062],{"class":74},[68,120758,118791],{"class":1742},[68,120760,25319],{"class":1742},[68,120762,120479],{"class":1742},[170,120764,120765],{},"这里提示snapd无法被安装，就证明成功了",[170,120767,120768],{},[801,120769],{"alt":63,"src":120770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,120772,120774],{"id":120773},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[170,120776,120777],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[170,120779,120780],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[170,120782,120783],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[58,120785,120787],{"className":118770,"code":120786,"language":118772,"meta":63,"style":63},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[65,120788,120789,120794,120803,120808,120816],{"__ignoreMap":63},[68,120790,120791],{"class":70,"line":71},[68,120792,120793],{"class":302},"# 添加Mozilla提供的源\n",[68,120795,120796,120798,120800],{"class":70,"line":82},[68,120797,26062],{"class":74},[68,120799,120318],{"class":1742},[68,120801,120802],{"class":1742}," ppa:mozillateam\u002Fppa\n",[68,120804,120805],{"class":70,"line":98},[68,120806,120807],{"class":302},"# 安装Firefox\n",[68,120809,120810,120812,120814],{"class":70,"line":104},[68,120811,26062],{"class":74},[68,120813,118791],{"class":1742},[68,120815,27728],{"class":1742},[68,120817,120818,120820,120822,120824],{"class":70,"line":112},[68,120819,26062],{"class":74},[68,120821,118791],{"class":1742},[68,120823,25319],{"class":1742},[68,120825,120479],{"class":1742},[19,120827,120829],{"id":120828},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[170,120831,120832],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[170,120834,120835],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[58,120837,120839],{"className":118770,"code":120838,"language":118772,"meta":63,"style":63},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[65,120840,120841,120846,120856,120864,120868],{"__ignoreMap":63},[68,120842,120843],{"class":70,"line":71},[68,120844,120845],{"class":302},"#删掉禁止安装snap的配置文件\n",[68,120847,120848,120850,120852,120854],{"class":70,"line":82},[68,120849,26062],{"class":74},[68,120851,120027],{"class":1742},[68,120853,26811],{"class":85},[68,120855,120689],{"class":1742},[68,120857,120858,120860,120862],{"class":70,"line":98},[68,120859,26062],{"class":74},[68,120861,118791],{"class":1742},[68,120863,27728],{"class":1742},[68,120865,120866],{"class":70,"line":104},[68,120867,3890],{"emptyLinePlaceholder":1567},[68,120869,120870,120872,120874],{"class":70,"line":112},[68,120871,26062],{"class":74},[68,120873,118791],{"class":1742},[68,120875,120876],{"class":1742}," dist-update\n",[14,120878,120880],{"id":120879},"_33-中文输入法","3.3 中文输入法",[19,120882,120884],{"id":120883},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[170,120886,120887],{},"官网下载搜狗输入法",[170,120889,120890],{},[801,120891],{"alt":63,"src":120892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[170,120894,120895],{},[801,120896],{"alt":63,"src":120897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[170,120899,120900],{},"打开终端输入如下",[58,120902,120904],{"className":118770,"code":120903,"language":118772,"meta":63,"style":63},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[65,120905,120906,120913],{"__ignoreMap":63},[68,120907,120908,120910],{"class":70,"line":71},[68,120909,102751],{"class":85},[68,120911,120912],{"class":1742}," ~\u002FDownloads\u002F\n",[68,120914,120915,120917,120919,120921],{"class":70,"line":82},[68,120916,26062],{"class":74},[68,120918,118791],{"class":1742},[68,120920,25319],{"class":1742},[68,120922,120923],{"class":1742}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[170,120925,120926],{},"打开Fcitx",[170,120928,120929,120932],{},[801,120930],{"alt":63,"src":120931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[801,120933],{"alt":63,"src":120934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[170,120936,120937],{},[801,120938],{"alt":63,"src":120939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[170,120941,120942],{},"添加搜狗输入法",[170,120944,120945],{},[801,120946],{"alt":63,"src":120947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[170,120949,120950],{},[801,120951],{"alt":63,"src":120952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[170,120954,120955],{},"将搜狗输入法设置为唯一输入法",[170,120957,120958],{},[801,120959],{"alt":63,"src":120960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,120962,120964],{"id":120963},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[263,120966,120967],{},[27,120968,120969],{},"卸载旧输入法",[58,120971,120973],{"className":119997,"code":120972,"language":119999,"meta":63,"style":63},"sudo apt purge fcitx* ibus*\n",[65,120974,120975],{"__ignoreMap":63},[68,120976,120977,120979,120981,120983,120986,120988,120991],{"class":70,"line":71},[68,120978,26062],{"class":74},[68,120980,118791],{"class":1742},[68,120982,119132],{"class":1742},[68,120984,120985],{"class":1742}," fcitx",[68,120987,2083],{"class":85},[68,120989,120990],{"class":1742}," ibus",[68,120992,120722],{"class":85},[263,120994,120995],{"start":82},[27,120996,120997],{},"安装Fcitx5",[58,120999,121001],{"className":118770,"code":121000,"language":118772,"meta":63,"style":63},"# 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",[65,121002,121003,121008,121022,121026,121031,121040,121048],{"__ignoreMap":63},[68,121004,121005],{"class":70,"line":71},[68,121006,121007],{"class":302},"# Ubuntu22.04及以上、Debian12及以上\n",[68,121009,121010,121012,121014,121016,121019],{"class":70,"line":82},[68,121011,26062],{"class":74},[68,121013,118791],{"class":1742},[68,121015,25319],{"class":1742},[68,121017,121018],{"class":1742}," fcitx5",[68,121020,121021],{"class":1742}," fcitx5-chinese-addons\n",[68,121023,121024],{"class":70,"line":98},[68,121025,3890],{"emptyLinePlaceholder":1567},[68,121027,121028],{"class":70,"line":104},[68,121029,121030],{"class":302},"# Ubuntu20.04\n",[68,121032,121033,121035,121037],{"class":70,"line":112},[68,121034,26062],{"class":74},[68,121036,120318],{"class":1742},[68,121038,121039],{"class":1742}," ppa:zhsj\u002Ffcitx5\n",[68,121041,121042,121044,121046],{"class":70,"line":124},[68,121043,26062],{"class":74},[68,121045,118791],{"class":1742},[68,121047,27728],{"class":1742},[68,121049,121050,121052,121054,121056,121058],{"class":70,"line":1496},[68,121051,26062],{"class":74},[68,121053,118791],{"class":1742},[68,121055,25319],{"class":1742},[68,121057,121018],{"class":1742},[68,121059,121021],{"class":1742},[263,121061,121062,121065],{"start":98},[27,121063,121064],{},"Reboot System",[27,121066,121067],{},"启动Fcitx5",[170,121069,121070],{},[801,121071],{"alt":63,"src":121072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[263,121074,121075],{"start":112},[27,121076,121077],{},"修改一些设置",[170,121079,121080],{},"将Pinyin和Keyboard - English US加入到左边。",[170,121082,121083],{},[801,121084],{"alt":63,"src":121085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[170,121087,121088],{},"添加快捷键以便于更好切换中英文",[170,121090,121091],{},[801,121092],{"alt":63,"src":121093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[263,121095,121096],{"start":124},[27,121097,121098],{},"重启",[58,121100,121102],{"className":119997,"code":121101,"language":119999,"meta":63,"style":63},"sudo shutdown -r now\n",[65,121103,121104],{"__ignoreMap":63},[68,121105,121106,121108,121111,121114],{"class":70,"line":71},[68,121107,26062],{"class":74},[68,121109,121110],{"class":1742}," shutdown",[68,121112,121113],{"class":85}," -r",[68,121115,121116],{"class":1742}," now\n",[263,121118,121119],{"start":1496},[27,121120,121121],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[170,121123,121124],{},[1867,121125,121126],{"href":121126,"rel":121127},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25350],[263,121129,121130],{"start":1502},[27,121131,121132],{},"再重启",[58,121134,121135],{"className":119997,"code":121101,"language":119999,"meta":63,"style":63},[65,121136,121137],{"__ignoreMap":63},[68,121138,121139,121141,121143,121145],{"class":70,"line":71},[68,121140,26062],{"class":74},[68,121142,121110],{"class":1742},[68,121144,121113],{"class":85},[68,121146,121116],{"class":1742},[14,121148,121150],{"id":121149},"_34-pip3源替换","3.4 pip3源替换",[170,121152,121153],{},"非Debian系发行版需要做。",[170,121155,121156],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[170,121158,121159],{},"使用dnf的系统也可能不用做。",[58,121161,121163],{"className":118770,"code":121162,"language":118772,"meta":63,"style":63},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,121164,121165,121170,121177,121182,121187],{"__ignoreMap":63},[68,121166,121167],{"class":70,"line":71},[68,121168,121169],{"class":302},"# 检查是否已安装 pip\n",[68,121171,121172,121175],{"class":70,"line":82},[68,121173,121174],{"class":74},"pip3",[68,121176,27779],{"class":85},[68,121178,121179],{"class":70,"line":98},[68,121180,121181],{"class":302},"# 如果未安装，先安装 pip3（见下方）\n",[68,121183,121184],{"class":70,"line":104},[68,121185,121186],{"class":302},"# 配置 pip 使用清华源\n",[68,121188,121189,121191,121194,121197,121200],{"class":70,"line":112},[68,121190,121174],{"class":74},[68,121192,121193],{"class":1742}," config",[68,121195,121196],{"class":1742}," set",[68,121198,121199],{"class":1742}," global.index-url",[68,121201,121202],{"class":1742}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[170,121204,121205],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[170,121207,121208],{},[801,121209],{"alt":63,"src":121210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[58,121212,121214],{"className":118770,"code":121213,"language":118772,"meta":63,"style":63},"#安装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",[65,121215,121216,121221,121229,121240,121244,121249,121268,121272,121277,121289,121293,121298],{"__ignoreMap":63},[68,121217,121218],{"class":70,"line":71},[68,121219,121220],{"class":302},"#安装pip3\n",[68,121222,121223,121225,121227],{"class":70,"line":82},[68,121224,26062],{"class":74},[68,121226,118791],{"class":1742},[68,121228,27728],{"class":1742},[68,121230,121231,121233,121235,121237],{"class":70,"line":98},[68,121232,26062],{"class":74},[68,121234,27562],{"class":1742},[68,121236,25319],{"class":1742},[68,121238,121239],{"class":1742}," python3-pip\n",[68,121241,121242],{"class":70,"line":104},[68,121243,3890],{"emptyLinePlaceholder":1567},[68,121245,121246],{"class":70,"line":112},[68,121247,121248],{"class":302},"#更新pip3\n",[68,121250,121251,121253,121255,121257,121259,121261,121264,121266],{"class":70,"line":124},[68,121252,102354],{"class":74},[68,121254,102357],{"class":85},[68,121256,102380],{"class":1742},[68,121258,25319],{"class":1742},[68,121260,27916],{"class":85},[68,121262,121263],{"class":1742}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[68,121265,102385],{"class":85},[68,121267,102388],{"class":1742},[68,121269,121270],{"class":70,"line":1496},[68,121271,3890],{"emptyLinePlaceholder":1567},[68,121273,121274],{"class":70,"line":1502},[68,121275,121276],{"class":302},"#设置pip源为清华源\n",[68,121278,121279,121281,121283,121285,121287],{"class":70,"line":1510},[68,121280,121174],{"class":74},[68,121282,121193],{"class":1742},[68,121284,121196],{"class":1742},[68,121286,121199],{"class":1742},[68,121288,121202],{"class":1742},[68,121290,121291],{"class":70,"line":1521},[68,121292,3890],{"emptyLinePlaceholder":1567},[68,121294,121295],{"class":70,"line":3103},[68,121296,121297],{"class":302},"#测试\n",[68,121299,121300,121302,121304,121306,121308,121310],{"class":70,"line":3108},[68,121301,102354],{"class":74},[68,121303,102357],{"class":85},[68,121305,102380],{"class":1742},[68,121307,25319],{"class":1742},[68,121309,102385],{"class":85},[68,121311,102388],{"class":1742},[170,121313,121314],{},"成功的话，会看到Looking后面是tsinghua字样。",[170,121316,121317],{},[801,121318],{"alt":63,"src":121319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121321,121323],{"id":121322},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,121325,121327],{"id":121326},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[58,121329,121331],{"className":119997,"code":121330,"language":119999,"meta":63,"style":63},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[65,121332,121333,121338,121353,121358],{"__ignoreMap":63},[68,121334,121335],{"class":70,"line":71},[68,121336,121337],{"class":302},"# 如果是使用apt安装的驱动\n",[68,121339,121340,121342,121344,121346,121348,121351],{"class":70,"line":82},[68,121341,26062],{"class":74},[68,121343,27562],{"class":1742},[68,121345,27565],{"class":1742},[68,121347,120632],{"class":85},[68,121349,121350],{"class":1742}," nvidia",[68,121352,120722],{"class":85},[68,121354,121355],{"class":70,"line":98},[68,121356,121357],{"class":302},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[68,121359,121360,121362],{"class":70,"line":104},[68,121361,26062],{"class":74},[68,121363,121364],{"class":1742}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,121366,121368],{"id":121367},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[245,121370,121372],{"id":121371},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24396,121374,121376],{"id":121375},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[58,121378,121380],{"className":119997,"code":121379,"language":119999,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121381,121382,121387,121398,121403,121413,121418],{"__ignoreMap":63},[68,121383,121384],{"class":70,"line":71},[68,121385,121386],{"class":302},"# 安装英伟达驱动\n",[68,121388,121389,121391,121393,121395],{"class":70,"line":82},[68,121390,26062],{"class":74},[68,121392,118791],{"class":1742},[68,121394,25319],{"class":1742},[68,121396,121397],{"class":1742}," nvidia-driver-版本号\n",[68,121399,121400],{"class":70,"line":98},[68,121401,121402],{"class":302},"# 重启 \n",[68,121404,121405,121407,121409,121411],{"class":70,"line":104},[68,121406,26062],{"class":74},[68,121408,121110],{"class":1742},[68,121410,121113],{"class":85},[68,121412,121116],{"class":1742},[68,121414,121415],{"class":70,"line":112},[68,121416,121417],{"class":302},"# 检查驱动是否安装成功\n",[68,121419,121420],{"class":70,"line":124},[68,121421,121422],{"class":74},"nvidia-smi\n",[24396,121424,121426],{"id":121425},"_35212-debian","3.5.2.1.2 Debian",[58,121428,121430],{"className":119997,"code":121429,"language":119999,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121431,121432,121436,121450,121454,121464,121468],{"__ignoreMap":63},[68,121433,121434],{"class":70,"line":71},[68,121435,121386],{"class":302},[68,121437,121438,121440,121442,121444,121447],{"class":70,"line":82},[68,121439,26062],{"class":74},[68,121441,118791],{"class":1742},[68,121443,25319],{"class":1742},[68,121445,121446],{"class":1742}," nvidia-driver",[68,121448,121449],{"class":1742}," nvidia-settings\n",[68,121451,121452],{"class":70,"line":98},[68,121453,121402],{"class":302},[68,121455,121456,121458,121460,121462],{"class":70,"line":104},[68,121457,26062],{"class":74},[68,121459,121110],{"class":1742},[68,121461,121113],{"class":85},[68,121463,121116],{"class":1742},[68,121465,121466],{"class":70,"line":112},[68,121467,121417],{"class":302},[68,121469,121470],{"class":70,"line":124},[68,121471,121422],{"class":74},[245,121473,121475],{"id":121474},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[170,121477,121478,121479,121482],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[268,121480,121481],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[170,121484,121485,121486],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25039,121487,121488],{},[268,121489,121490],{},"（也可以不禁用桌面环境，直接进行下一步。）",[58,121492,121494],{"className":119997,"code":121493,"language":119999,"meta":63,"style":63},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[65,121495,121496,121501,121511,121516,121529,121534],{"__ignoreMap":63},[68,121497,121498],{"class":70,"line":71},[68,121499,121500],{"class":302},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[68,121502,121503,121505,121508],{"class":70,"line":82},[68,121504,26062],{"class":74},[68,121506,121507],{"class":1742}," telinit",[68,121509,121510],{"class":85}," 3\n",[68,121512,121513],{"class":70,"line":98},[68,121514,121515],{"class":302},"# ubuntu 使用下方命令\n",[68,121517,121518,121520,121523,121526],{"class":70,"line":104},[68,121519,26062],{"class":74},[68,121521,121522],{"class":1742}," service",[68,121524,121525],{"class":1742}," lightdm",[68,121527,121528],{"class":1742}," stop\n",[68,121530,121531],{"class":70,"line":112},[68,121532,121533],{"class":302},"# Fedora 使用下方命令\n",[68,121535,121536,121538,121540,121543],{"class":70,"line":124},[68,121537,26062],{"class":74},[68,121539,27999],{"class":1742},[68,121541,121542],{"class":1742}," isolate",[68,121544,121545],{"class":1742}," multi-user.target\n",[170,121547,121548],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[58,121550,121552],{"className":119997,"code":121551,"language":119999,"meta":63,"style":63},"# 编译环境+准备工作\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",[65,121553,121554,121559,121570,121575,121582,121587,121599,121604,121611,121616],{"__ignoreMap":63},[68,121555,121556],{"class":70,"line":71},[68,121557,121558],{"class":302},"# 编译环境+准备工作\n",[68,121560,121561,121563,121565,121567],{"class":70,"line":82},[68,121562,26062],{"class":74},[68,121564,118791],{"class":1742},[68,121566,25319],{"class":1742},[68,121568,121569],{"class":1742}," build-essential\n",[68,121571,121572],{"class":70,"line":98},[68,121573,121574],{"class":302},"# 进入到.run目录中\n",[68,121576,121577,121579],{"class":70,"line":104},[68,121578,102751],{"class":85},[68,121580,121581],{"class":1742}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[68,121583,121584],{"class":70,"line":112},[68,121585,121586],{"class":302},"# 给驱动文件增加可执行权限：\n",[68,121588,121589,121591,121593,121596],{"class":70,"line":124},[68,121590,26062],{"class":74},[68,121592,26065],{"class":1742},[68,121594,121595],{"class":1742}," a+x",[68,121597,121598],{"class":1742}," NVIDIA-Linux-x86_64-550.107.02.run\n",[68,121600,121601],{"class":70,"line":1496},[68,121602,121603],{"class":302},"# 然后执行安装：\n",[68,121605,121606,121608],{"class":70,"line":1502},[68,121607,26062],{"class":74},[68,121609,121610],{"class":1742}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[68,121612,121613],{"class":70,"line":1510},[68,121614,121615],{"class":302},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[68,121617,121618,121620,121623],{"class":70,"line":1521},[68,121619,26062],{"class":74},[68,121621,121622],{"class":1742}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[68,121624,121625],{"class":85},"  --no-opengl-files\n",[170,121627,121628],{},"安装完毕重启即可",[58,121630,121632],{"className":119997,"code":121631,"language":119999,"meta":63,"style":63},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,121633,121634,121638,121644,121648],{"__ignoreMap":63},[68,121635,121636],{"class":70,"line":71},[68,121637,121402],{"class":302},[68,121639,121640,121642],{"class":70,"line":82},[68,121641,26062],{"class":74},[68,121643,28133],{"class":1742},[68,121645,121646],{"class":70,"line":98},[68,121647,121417],{"class":302},[68,121649,121650],{"class":70,"line":104},[68,121651,121422],{"class":74},[19,121653,121655],{"id":121654},"_353-安装cuda","3.5.3 安装CUDA",[170,121657,121658],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[170,121660,121661],{},[801,121662],{"alt":63,"src":121663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[263,121665,121666],{},[27,121667,121668],{},"先查看显卡驱动所支持的最高CUDA版本",[58,121670,121671],{"className":119997,"code":121422,"language":119999,"meta":63,"style":63},[65,121672,121673],{"__ignoreMap":63},[68,121674,121675],{"class":70,"line":71},[68,121676,121422],{"class":74},[170,121678,121679],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[170,121681,121682],{},[801,121683],{"alt":63,"src":121684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[263,121686,121687],{"start":82},[27,121688,121689],{},"下载CUDA并安装CUDA",[170,121691,119776,121692],{},[1867,121693,119779],{"href":119779,"rel":121694},[25350],[170,121696,121697],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[170,121699,121700],{},[801,121701],{"alt":63,"src":121702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[170,121704,121705,121706,121711],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1867,121707,121710],{"href":121708,"rel":121709},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25350],"Vinci机器人队单片机教程","）",[170,121713,121714],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[170,121716,121717],{},[801,121718],{"alt":63,"src":121719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[170,121721,121722],{},"将最下方框框里的命令敲入终端",[58,121724,121726],{"className":119997,"code":121725,"language":119999,"meta":63,"style":63},"# 在当前文件夹下创建一个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",[65,121727,121728,121733,121742,121747,121754,121759,121767,121772,121783,121788],{"__ignoreMap":63},[68,121729,121730],{"class":70,"line":71},[68,121731,121732],{"class":302},"# 在当前文件夹下创建一个ttt的子文件夹\n",[68,121734,121735,121737,121739],{"class":70,"line":82},[68,121736,102741],{"class":74},[68,121738,30700],{"class":85},[68,121740,121741],{"class":1742}," .\u002Fttt\n",[68,121743,121744],{"class":70,"line":98},[68,121745,121746],{"class":302},"# 进入ttt文件夹\n",[68,121748,121749,121751],{"class":70,"line":104},[68,121750,102751],{"class":85},[68,121752,121753],{"class":1742}," ttt\n",[68,121755,121756],{"class":70,"line":112},[68,121757,121758],{"class":302},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[68,121760,121761,121764],{"class":70,"line":124},[68,121762,121763],{"class":74},"wget",[68,121765,121766],{"class":1742}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,121768,121769],{"class":70,"line":1496},[68,121770,121771],{"class":302},"# 给予权限\n",[68,121773,121774,121776,121778,121780],{"class":70,"line":1502},[68,121775,26062],{"class":74},[68,121777,26065],{"class":1742},[68,121779,121595],{"class":1742},[68,121781,121782],{"class":1742}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,121784,121785],{"class":70,"line":1510},[68,121786,121787],{"class":302},"# 运行脚本\n",[68,121789,121790,121792],{"class":70,"line":1521},[68,121791,26062],{"class":74},[68,121793,121782],{"class":1742},[170,121795,121796],{},[801,121797],{"alt":63,"src":121798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[170,121800,121801],{},"正在安装中：",[170,121803,121804],{},[801,121805],{"alt":63,"src":121806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[170,121808,121809],{},"输入accept接受即可",[170,121811,121812],{},[801,121813],{"alt":63,"src":121814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[170,121816,121817],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[170,121819,121820],{},[801,121821],{"alt":63,"src":121822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[170,121824,121825],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[170,121827,121828],{},[801,121829],{"alt":63,"src":121830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[263,121832,121833],{"start":98},[27,121834,121835],{},"配置环境",[170,121837,121838],{},"根据上方确认一下路径，比如我上面红色框起来的为",[58,121840,121842],{"className":119997,"code":121841,"language":119999,"meta":63,"style":63},"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",[65,121843,121844,121860,121875],{"__ignoreMap":63},[68,121845,121846,121849,121852,121855,121858],{"class":70,"line":71},[68,121847,121848],{"class":74},"Please",[68,121850,121851],{"class":1742}," make",[68,121853,121854],{"class":1742}," sure",[68,121856,121857],{"class":1742}," that",[68,121859,4164],{"class":78},[68,121861,121862,121864,121867,121870,121873],{"class":70,"line":82},[68,121863,53753],{"class":74},[68,121865,121866],{"class":1742},"   PATH",[68,121868,121869],{"class":1742}," includes",[68,121871,121872],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[68,121874,4164],{"class":78},[68,121876,121877,121879,121882,121884,121887,121890,121892,121895,121898,121901,121904,121906,121909,121911],{"class":70,"line":98},[68,121878,53753],{"class":74},[68,121880,121881],{"class":1742},"   LD_LIBRARY_PATH",[68,121883,121869],{"class":1742},[68,121885,121886],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[68,121888,121889],{"class":1742}," or,",[68,121891,6698],{"class":1742},[68,121893,121894],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[68,121896,121897],{"class":1742}," to",[68,121899,121900],{"class":1742}," \u002Fetc\u002Fld.so.conf",[68,121902,121903],{"class":1742}," and",[68,121905,28716],{"class":1742},[68,121907,121908],{"class":1742}," ldconfig",[68,121910,66082],{"class":1742},[68,121912,121913],{"class":1742}," root\n",[170,121915,121916],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[58,121918,121920],{"className":119997,"code":121919,"language":119999,"meta":63,"style":63},"which nvcc\n",[65,121921,121922],{"__ignoreMap":63},[68,121923,121924,121927],{"class":70,"line":71},[68,121925,121926],{"class":85},"which",[68,121928,121929],{"class":1742}," nvcc\n",[170,121931,121932],{},[801,121933],{"alt":63,"src":121934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[170,121936,121937],{},"所以我进行以下操作：",[58,121939,121941],{"className":119997,"code":121940,"language":119999,"meta":63,"style":63},"sudo vim ~\u002F.bashrc\n",[65,121942,121943],{"__ignoreMap":63},[68,121944,121945,121947,121949],{"class":70,"line":71},[68,121946,26062],{"class":74},[68,121948,120057],{"class":1742},[68,121950,121951],{"class":1742}," ~\u002F.bashrc\n",[170,121953,121954],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[58,121956,121958],{"className":119997,"code":121957,"language":119999,"meta":63,"style":63},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[65,121959,121960,121972],{"__ignoreMap":63},[68,121961,121962,121964,121967,121969],{"class":70,"line":71},[68,121963,26528],{"class":316},[68,121965,121966],{"class":78}," PATH",[68,121968,1685],{"class":316},[68,121970,121971],{"class":78},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[68,121973,121974,121976,121979,121981],{"class":70,"line":82},[68,121975,26528],{"class":316},[68,121977,121978],{"class":78}," LD_LIBRARY_PATH",[68,121980,1685],{"class":316},[68,121982,121983],{"class":78},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[170,121985,121986],{},[801,121987],{"alt":63,"src":121988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[58,121990,121992],{"className":119997,"code":121991,"language":119999,"meta":63,"style":63},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[65,121993,121994,121999,122005,122010],{"__ignoreMap":63},[68,121995,121996],{"class":70,"line":71},[68,121997,121998],{"class":302},"# 刷新当前终端的环境变量\n",[68,122000,122001,122003],{"class":70,"line":82},[68,122002,102368],{"class":85},[68,122004,121951],{"class":1742},[68,122006,122007],{"class":70,"line":98},[68,122008,122009],{"class":302},"# 验证CUDA是否安装成功\n",[68,122011,122012,122015],{"class":70,"line":104},[68,122013,122014],{"class":74},"nvcc",[68,122016,122017],{"class":85}," -V\n",[170,122019,122020],{},"出现下图这种则安装成功。",[170,122022,122023],{},[801,122024],{"alt":63,"src":122025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,122027,122029],{"id":122028},"_354-安装cudnn","3.5.4 安装cuDNN",[263,122031,122032],{},[27,122033,122034],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[170,122036,122037,122038,122043],{},"前往 NVIDIA cuDNN 下载页面：",[1867,122039,122042],{"href":122040,"rel":122041},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25350],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[170,122045,122046],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[170,122048,122049],{},[801,122050],{"alt":63,"src":122051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[170,122053,122054],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[170,122056,122057],{},[801,122058],{"alt":63,"src":122059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[170,122061,122062],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[170,122064,122065],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[170,122067,122068],{},[268,122069,122070],{},"我这里选择所有Linux X86_64最通用的办法：",[170,122072,122073],{},"下载好的：",[170,122075,122076],{},[801,122077],{"alt":63,"src":122078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[263,122080,122081],{"start":82},[27,122082,122083],{},"安装cuDNN",[170,122085,122086],{},"找到该文件所在目录，并打开终端，cd到该目录。",[170,122088,122089],{},[801,122090],{"alt":63,"src":122091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[170,122093,122094],{},"解压文件，并复制到对应位置完成安装",[58,122096,122098],{"className":119997,"code":122097,"language":119999,"meta":63,"style":63},"# 解压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",[65,122099,122100,122105,122116,122121,122128,122133,122149,122163,122168,122179,122188,122192,122208],{"__ignoreMap":63},[68,122101,122102],{"class":70,"line":71},[68,122103,122104],{"class":302},"# 解压cuDNN文件\n",[68,122106,122107,122110,122113],{"class":70,"line":82},[68,122108,122109],{"class":74},"tar",[68,122111,122112],{"class":85}," -xvf",[68,122114,122115],{"class":1742}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[68,122117,122118],{"class":70,"line":98},[68,122119,122120],{"class":302},"# cd进文件夹\n",[68,122122,122123,122125],{"class":70,"line":104},[68,122124,102751],{"class":85},[68,122126,122127],{"class":1742}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[68,122129,122130],{"class":70,"line":112},[68,122131,122132],{"class":302},"# 复制cuDNN文件到CUDA目录\n",[68,122134,122135,122137,122139,122142,122144,122147],{"class":70,"line":124},[68,122136,26062],{"class":74},[68,122138,29345],{"class":1742},[68,122140,122141],{"class":1742}," include\u002Fcudnn",[68,122143,2083],{"class":85},[68,122145,122146],{"class":1742},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[68,122148,4164],{"class":78},[68,122150,122151,122153,122155,122158,122160],{"class":70,"line":1496},[68,122152,26062],{"class":74},[68,122154,29345],{"class":1742},[68,122156,122157],{"class":1742}," lib\u002Flibcudnn",[68,122159,2083],{"class":85},[68,122161,122162],{"class":1742},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[68,122164,122165],{"class":70,"line":1502},[68,122166,122167],{"class":302},"# 对比一下有没有缺文件\n",[68,122169,122170,122172,122175,122177],{"class":70,"line":1510},[68,122171,28247],{"class":74},[68,122173,122174],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[68,122176,2083],{"class":85},[68,122178,4164],{"class":78},[68,122180,122181,122183,122186],{"class":70,"line":1521},[68,122182,28247],{"class":74},[68,122184,122185],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[68,122187,120722],{"class":85},[68,122189,122190],{"class":70,"line":3103},[68,122191,121771],{"class":302},[68,122193,122194,122196,122198,122201,122203,122205],{"class":70,"line":3108},[68,122195,26062],{"class":74},[68,122197,26065],{"class":1742},[68,122199,122200],{"class":1742}," a+r",[68,122202,122174],{"class":1742},[68,122204,2083],{"class":85},[68,122206,122207],{"class":78},"   \n",[68,122209,122210,122212,122214,122216,122218],{"class":70,"line":3114},[68,122211,26062],{"class":74},[68,122213,26065],{"class":1742},[68,122215,122200],{"class":1742},[68,122217,122185],{"class":1742},[68,122219,120722],{"class":85},[263,122221,122222],{"start":98},[27,122223,122224],{},"检查是否安装成功",[58,122226,122228],{"className":119997,"code":122227,"language":119999,"meta":63,"style":63},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[65,122229,122230,122235],{"__ignoreMap":63},[68,122231,122232],{"class":70,"line":71},[68,122233,122234],{"class":302},"# 检查cuDNN版本命令\n",[68,122236,122237,122240,122243,122245,122247,122250,122253],{"class":70,"line":82},[68,122238,122239],{"class":74},"cat",[68,122241,122242],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[68,122244,26595],{"class":316},[68,122246,31720],{"class":74},[68,122248,122249],{"class":1742}," CUDNN_MAJOR",[68,122251,122252],{"class":85}," -A",[68,122254,49207],{"class":85},[170,122256,122257],{},"出现下图这样的就是安装成功了",[170,122259,122260],{},[801,122261],{"alt":63,"src":122262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[263,122264,122265],{"start":104},[27,122266,122267],{},"软链接(一般不需要)",[58,122269,122271],{"className":119997,"code":122270,"language":119999,"meta":63,"style":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[65,122272,122273,122278],{"__ignoreMap":63},[68,122274,122275],{"class":70,"line":71},[68,122276,122277],{"class":302},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[68,122279,122280,122282],{"class":70,"line":82},[68,122281,26062],{"class":74},[68,122283,122284],{"class":1742}," ldconfig\n",[170,122286,122287],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[58,122289,122294],{"className":122290,"code":122291,"language":122292,"meta":122293,"style":63},"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",[65,122295,122296,122301,122306,122311,122316,122321,122326],{"__ignoreMap":63},[68,122297,122298],{"class":70,"line":71},[68,122299,122300],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[68,122302,122303],{"class":70,"line":82},[68,122304,122305],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[68,122307,122308],{"class":70,"line":98},[68,122309,122310],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[68,122312,122313],{"class":70,"line":104},[68,122314,122315],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[68,122317,122318],{"class":70,"line":112},[68,122319,122320],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[68,122322,122323],{"class":70,"line":124},[68,122324,122325],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[68,122327,122328],{"class":70,"line":1496},[68,122329,122330],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[170,122332,122333],{},"运行下方的命令",[58,122335,122337],{"className":119997,"code":122336,"language":119999,"meta":63,"style":63},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[65,122338,122339,122344,122351,122356],{"__ignoreMap":63},[68,122340,122341],{"class":70,"line":71},[68,122342,122343],{"class":302},"# cd进入CUDA路径\n",[68,122345,122346,122348],{"class":70,"line":82},[68,122347,102751],{"class":85},[68,122349,122350],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[68,122352,122353],{"class":70,"line":98},[68,122354,122355],{"class":302}," # 查看本路径下的需要软链接的文件名\n",[68,122357,122358],{"class":70,"line":104},[68,122359,122360],{"class":74}," ls\n",[170,122362,122363],{},[801,122364],{"alt":63,"src":122365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[170,122367,122368,122369,19897,122372,19897,122375,122378],{},"如上图，我需要将",[65,122370,122371],{},"libcudnn_xxx_xxxxx.so.8.9.7",[65,122373,122374],{},"libcudnn_xxx_xxxxx.so.8",[65,122376,122377],{},"libcudnn_xxx_xxxxx.so","软链接",[58,122380,122382],{"className":119997,"code":122381,"language":119999,"meta":63,"style":63},"# 创建符号链接。对于每个 .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",[65,122383,122384,122389,122405,122419,122433,122447,122461,122475,122489,122494,122500,122505],{"__ignoreMap":63},[68,122385,122386],{"class":70,"line":71},[68,122387,122388],{"class":302},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[68,122390,122391,122393,122396,122399,122402],{"class":70,"line":82},[68,122392,26062],{"class":74},[68,122394,122395],{"class":1742}," ln",[68,122397,122398],{"class":85}," -sf",[68,122400,122401],{"class":1742}," libcudnn_cnn_train.so.8.9.7",[68,122403,122404],{"class":1742}," libcudnn_cnn_train.so.8\n",[68,122406,122407,122409,122411,122413,122416],{"class":70,"line":98},[68,122408,26062],{"class":74},[68,122410,122395],{"class":1742},[68,122412,122398],{"class":85},[68,122414,122415],{"class":1742}," libcudnn_adv_infer.so.8.9.7",[68,122417,122418],{"class":1742}," libcudnn_adv_infer.so.8\n",[68,122420,122421,122423,122425,122427,122430],{"class":70,"line":104},[68,122422,26062],{"class":74},[68,122424,122395],{"class":1742},[68,122426,122398],{"class":85},[68,122428,122429],{"class":1742}," libcudnn_adv_train.so.8.9.7",[68,122431,122432],{"class":1742}," libcudnn_adv_train.so.8\n",[68,122434,122435,122437,122439,122441,122444],{"class":70,"line":112},[68,122436,26062],{"class":74},[68,122438,122395],{"class":1742},[68,122440,122398],{"class":85},[68,122442,122443],{"class":1742}," libcudnn_cnn_infer.so.8.9.7",[68,122445,122446],{"class":1742}," libcudnn_cnn_infer.so.8\n",[68,122448,122449,122451,122453,122455,122458],{"class":70,"line":124},[68,122450,26062],{"class":74},[68,122452,122395],{"class":1742},[68,122454,122398],{"class":85},[68,122456,122457],{"class":1742}," libcudnn.so.8.9.7",[68,122459,122460],{"class":1742}," libcudnn.so.8\n",[68,122462,122463,122465,122467,122469,122472],{"class":70,"line":1496},[68,122464,26062],{"class":74},[68,122466,122395],{"class":1742},[68,122468,122398],{"class":85},[68,122470,122471],{"class":1742}," libcudnn_ops_infer.so.8.9.7",[68,122473,122474],{"class":1742}," libcudnn_ops_infer.so.8\n",[68,122476,122477,122479,122481,122483,122486],{"class":70,"line":1502},[68,122478,26062],{"class":74},[68,122480,122395],{"class":1742},[68,122482,122398],{"class":85},[68,122484,122485],{"class":1742}," libcudnn_ops_train.so.8.9.7",[68,122487,122488],{"class":1742}," libcudnn_ops_train.so.8\n",[68,122490,122491],{"class":70,"line":1510},[68,122492,122493],{"class":302},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[68,122495,122496,122498],{"class":70,"line":1521},[68,122497,26062],{"class":74},[68,122499,122284],{"class":1742},[68,122501,122502],{"class":70,"line":3103},[68,122503,122504],{"class":302},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[68,122506,122507,122509,122512,122515,122517,122520],{"class":70,"line":3108},[68,122508,28247],{"class":74},[68,122510,122511],{"class":85}," -l",[68,122513,122514],{"class":1742}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[68,122516,2083],{"class":85},[68,122518,122519],{"class":1742},".so",[68,122521,120722],{"class":85},[19,122523,122525],{"id":122524},"_355-常见问题","3.5.5 常见问题",[263,122527,122528],{},[27,122529,122530],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[58,122532,122534],{"className":119997,"code":122533,"language":119999,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[65,122535,122536],{"__ignoreMap":63},[68,122537,122538,122540,122542],{"class":70,"line":71},[68,122539,26062],{"class":74},[68,122541,120057],{"class":1742},[68,122543,122544],{"class":1742}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[170,122546,122547],{},"blacklist-nouveau.conf文件内容如下：",[58,122549,122551],{"className":119997,"code":122550,"language":119999,"meta":63,"style":63},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[65,122552,122553,122561,122568,122580,122590],{"__ignoreMap":63},[68,122554,122555,122558],{"class":70,"line":71},[68,122556,122557],{"class":74},"blacklist",[68,122559,122560],{"class":1742}," nouveau\n",[68,122562,122563,122565],{"class":70,"line":82},[68,122564,122557],{"class":74},[68,122566,122567],{"class":1742}," lbm-nouveau\n",[68,122569,122570,122572,122575,122578],{"class":70,"line":98},[68,122571,117404],{"class":74},[68,122573,122574],{"class":1742}," nouveau",[68,122576,122577],{"class":1742}," modeset=",[68,122579,4575],{"class":85},[68,122581,122582,122585,122587],{"class":70,"line":104},[68,122583,122584],{"class":85},"alias",[68,122586,122574],{"class":1742},[68,122588,122589],{"class":1742}," off\n",[68,122591,122592,122594,122597],{"class":70,"line":112},[68,122593,122584],{"class":85},[68,122595,122596],{"class":1742}," lbm-nouveau",[68,122598,122589],{"class":1742},[170,122600,122601],{},"接着运行下方命令",[58,122603,122605],{"className":119997,"code":122604,"language":119999,"meta":63,"style":63},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[65,122606,122607,122617,122622],{"__ignoreMap":63},[68,122608,122609,122611,122614],{"class":70,"line":71},[68,122610,26062],{"class":74},[68,122612,122613],{"class":1742}," update-initramfs",[68,122615,122616],{"class":85}," -u\n",[68,122618,122619],{"class":70,"line":82},[68,122620,122621],{"class":74},"或者\n",[68,122623,122624,122626,122629],{"class":70,"line":98},[68,122625,26062],{"class":74},[68,122627,122628],{"class":1742}," dracut",[68,122630,122631],{"class":85}," --force\n",[170,122633,122634],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[58,122636,122638],{"className":119997,"code":122637,"language":119999,"meta":63,"style":63},"lsmod | grep nouveau\n",[65,122639,122640],{"__ignoreMap":63},[68,122641,122642,122645,122647,122649],{"class":70,"line":71},[68,122643,122644],{"class":74},"lsmod",[68,122646,26595],{"class":316},[68,122648,31720],{"class":74},[68,122650,122560],{"class":1742},[263,122652,122653],{"start":82},[27,122654,122655],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[58,122657,122659],{"className":119997,"code":122658,"language":119999,"meta":63,"style":63},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[65,122660,122661],{"__ignoreMap":63},[68,122662,122663,122665,122667],{"class":70,"line":71},[68,122664,26062],{"class":74},[68,122666,120057],{"class":1742},[68,122668,122669],{"class":1742}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[170,122671,122672],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[58,122674,122676],{"className":119997,"code":122675,"language":119999,"meta":63,"style":63},"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",[65,122677,122678,122686,122694,122702,122709,122717,122727,122735],{"__ignoreMap":63},[68,122679,122680,122683],{"class":70,"line":71},[68,122681,122682],{"class":74},"Section",[68,122684,122685],{"class":1742}," \"OutputClass\"\n",[68,122687,122688,122691],{"class":70,"line":82},[68,122689,122690],{"class":74},"   Identifier",[68,122692,122693],{"class":1742}," \"nvidia\"\n",[68,122695,122696,122699],{"class":70,"line":98},[68,122697,122698],{"class":74},"   MatchDriver",[68,122700,122701],{"class":1742}," \"nvidia-drm\"\n",[68,122703,122704,122707],{"class":70,"line":104},[68,122705,122706],{"class":74},"   Driver",[68,122708,122693],{"class":1742},[68,122710,122711,122714],{"class":70,"line":112},[68,122712,122713],{"class":74},"   Option",[68,122715,122716],{"class":1742}," \"AllowEmptyInitialConfiguration\"\n",[68,122718,122719,122721,122724],{"class":70,"line":124},[68,122720,122713],{"class":74},[68,122722,122723],{"class":1742}," \"PrimaryGPU\"",[68,122725,122726],{"class":1742}," \"yes\"\n",[68,122728,122729,122732],{"class":70,"line":1496},[68,122730,122731],{"class":74},"   ModulePath",[68,122733,122734],{"class":1742}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[68,122736,122737],{"class":70,"line":1502},[68,122738,122739],{"class":74},"EndSection\n",[263,122741,122742],{"start":98},[27,122743,122744],{},"安装N卡驱动提示错误",[58,122746,122748],{"className":122290,"code":122747,"language":122292,"meta":122293,"style":63},"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",[65,122749,122750],{"__ignoreMap":63},[68,122751,122752],{"class":70,"line":71},[68,122753,122747],{},[263,122755,122756],{},[27,122757,122758],{},"检查当前运行的内核版本：",[170,122760,122761],{},"运行以下命令以查看你当前正在使用的内核版本：",[58,122763,122765],{"className":118770,"code":122764,"language":118772,"meta":63,"style":63},"uname -r\n",[65,122766,122767],{"__ignoreMap":63},[68,122768,122769,122771],{"class":70,"line":71},[68,122770,71682],{"class":74},[68,122772,122773],{"class":85}," -r\n",[263,122775,122776],{"start":82},[27,122777,122778],{},"安装内核开发文件：",[170,122780,122781,122782,122785],{},"确保你已经安装了与当前内核版本相匹配的 ",[65,122783,122784],{},"kernel-devel"," 包。运行以下命令来安装：",[58,122787,122789],{"className":118770,"code":122788,"language":118772,"meta":63,"style":63},"sudo dnf install kernel-devel-$(uname -r)\n",[65,122790,122791],{"__ignoreMap":63},[68,122792,122793,122795,122797,122799,122802,122804,122806,122808],{"class":70,"line":71},[68,122794,26062],{"class":74},[68,122796,27801],{"class":1742},[68,122798,25319],{"class":1742},[68,122800,122801],{"class":1742}," kernel-devel-",[68,122803,26585],{"class":78},[68,122805,71682],{"class":74},[68,122807,121113],{"class":85},[68,122809,1646],{"class":78},[170,122811,122812],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[263,122814,122815],{"start":98},[27,122816,122817],{},"安装内核源代码（如果需要）：",[170,122819,122820],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[58,122822,122824],{"className":118770,"code":122823,"language":118772,"meta":63,"style":63},"sudo dnf install kernel-headers kernel-source\n",[65,122825,122826],{"__ignoreMap":63},[68,122827,122828,122830,122832,122834,122837],{"class":70,"line":71},[68,122829,26062],{"class":74},[68,122831,27801],{"class":1742},[68,122833,25319],{"class":1742},[68,122835,122836],{"class":1742}," kernel-headers",[68,122838,122839],{"class":1742}," kernel-source\n",[263,122841,122842],{"start":104},[27,122843,122844],{},"检查安装：",[170,122846,122847,122848,122851],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[65,122849,122850],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[58,122853,122855],{"className":118770,"code":122854,"language":118772,"meta":63,"style":63},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[65,122856,122857],{"__ignoreMap":63},[68,122858,122859,122861],{"class":70,"line":71},[68,122860,28247],{"class":74},[68,122862,122863],{"class":1742}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[170,122865,122866,122867,122870],{},"如果仍然遇到问题，可以通过 ",[65,122868,122869],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1553,122872,122873],{},"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":63,"searchDepth":82,"depth":82,"links":122875},[122876,122880,122890,122894,122895],{"id":119973,"depth":82,"text":119974,"children":122877},[122878,122879],{"id":119983,"depth":98,"text":119984},{"id":119993,"depth":98,"text":119994},{"id":120193,"depth":82,"text":120194,"children":122881},[122882,122883,122884,122885,122886,122887,122888,122889],{"id":120197,"depth":98,"text":120198},{"id":120267,"depth":98,"text":120268},{"id":120356,"depth":98,"text":120357},{"id":120601,"depth":98,"text":120602},{"id":120671,"depth":98,"text":120672},{"id":120738,"depth":98,"text":120739},{"id":120773,"depth":98,"text":120774},{"id":120828,"depth":98,"text":120829},{"id":120879,"depth":82,"text":120880,"children":122891},[122892,122893],{"id":120883,"depth":98,"text":120884},{"id":120963,"depth":98,"text":120964},{"id":121149,"depth":82,"text":121150},{"id":121322,"depth":82,"text":121323,"children":122896},[122897,122898,122899,122900,122901],{"id":121326,"depth":98,"text":121327},{"id":121367,"depth":98,"text":121368},{"id":121654,"depth":98,"text":121655},{"id":122028,"depth":98,"text":122029},{"id":122524,"depth":98,"text":122525},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119965,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122908,"title":122909,"body":122910,"description":1564,"extension":1565,"meta":123250,"navigation":1567,"path":123251,"seo":123252,"stem":123253,"__hash__":123254},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122911,"toc":123248},[122912,122915,122920,122923,123169,123174,123177,123213,123216,123245],[10,122913,122909],{"id":122914},"_4-命令教程长期积累",[263,122916,122917],{},[27,122918,122919],{},"大多数命令",[170,122921,122922],{},"常用 Linux 命令速查：",[58,122924,122926],{"className":118770,"code":122925,"language":118772,"meta":63,"style":63},"# 文件与目录\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",[65,122927,122928,122933,122940,122947,122955,122962,122969,122977,122985,122992,122999,123007,123011,123016,123023,123031,123038,123042,123047,123054,123062,123070,123078,123086,123090,123095,123103,123110,123117,123125,123133,123137,123142,123151,123160],{"__ignoreMap":63},[68,122929,122930],{"class":70,"line":71},[68,122931,122932],{"class":302},"# 文件与目录\n",[68,122934,122935,122937],{"class":70,"line":82},[68,122936,28247],{"class":74},[68,122938,122939],{"class":302},"        # 列出目录内容\n",[68,122941,122942,122944],{"class":70,"line":98},[68,122943,102751],{"class":85},[68,122945,122946],{"class":302},"        # 切换目录\n",[68,122948,122949,122952],{"class":70,"line":104},[68,122950,122951],{"class":85},"pwd",[68,122953,122954],{"class":302},"       # 显示当前路径\n",[68,122956,122957,122959],{"class":70,"line":112},[68,122958,102741],{"class":74},[68,122960,122961],{"class":302},"     # 创建目录\n",[68,122963,122964,122966],{"class":70,"line":124},[68,122965,26808],{"class":74},[68,122967,122968],{"class":302},"        # 删除文件或目录\n",[68,122970,122971,122974],{"class":70,"line":1496},[68,122972,122973],{"class":74},"cp",[68,122975,122976],{"class":302},"        # 复制文件或目录\n",[68,122978,122979,122982],{"class":70,"line":1502},[68,122980,122981],{"class":74},"mv",[68,122983,122984],{"class":302},"        # 移动\u002F重命名文件或目录\n",[68,122986,122987,122989],{"class":70,"line":1510},[68,122988,102758],{"class":74},[68,122990,122991],{"class":302},"     # 创建空文件\n",[68,122993,122994,122996],{"class":70,"line":1521},[68,122995,122239],{"class":74},[68,122997,122998],{"class":302},"       # 查看文件内容\n",[68,123000,123001,123004],{"class":70,"line":3103},[68,123002,123003],{"class":74},"head\u002Ftail",[68,123005,123006],{"class":302}," # 查看文件头部\u002F尾部\n",[68,123008,123009],{"class":70,"line":3108},[68,123010,3890],{"emptyLinePlaceholder":1567},[68,123012,123013],{"class":70,"line":3114},[68,123014,123015],{"class":302},"# 权限管理\n",[68,123017,123018,123020],{"class":70,"line":3119},[68,123019,26097],{"class":74},[68,123021,123022],{"class":302},"     # 修改文件权限\n",[68,123024,123025,123028],{"class":70,"line":3133},[68,123026,123027],{"class":74},"chown",[68,123029,123030],{"class":302},"     # 修改文件所有者\n",[68,123032,123033,123035],{"class":70,"line":3138},[68,123034,26062],{"class":74},[68,123036,123037],{"class":302},"      # 以管理员身份执行\n",[68,123039,123040],{"class":70,"line":3144},[68,123041,3890],{"emptyLinePlaceholder":1567},[68,123043,123044],{"class":70,"line":3165},[68,123045,123046],{"class":302},"# 系统信息\n",[68,123048,123049,123051],{"class":70,"line":3170},[68,123050,71682],{"class":74},[68,123052,123053],{"class":302},"     # 系统信息\n",[68,123055,123056,123059],{"class":70,"line":3184},[68,123057,123058],{"class":74},"df",[68,123060,123061],{"class":302},"        # 磁盘使用情况\n",[68,123063,123064,123067],{"class":70,"line":3189},[68,123065,123066],{"class":74},"free",[68,123068,123069],{"class":302},"      # 内存使用情况\n",[68,123071,123072,123075],{"class":70,"line":3218},[68,123073,123074],{"class":74},"top\u002Fhtop",[68,123076,123077],{"class":302},"  # 进程监控\n",[68,123079,123080,123083],{"class":70,"line":3223},[68,123081,123082],{"class":74},"ps",[68,123084,123085],{"class":302},"        # 查看进程\n",[68,123087,123088],{"class":70,"line":3240},[68,123089,3890],{"emptyLinePlaceholder":1567},[68,123091,123092],{"class":70,"line":3245},[68,123093,123094],{"class":302},"# 网络\n",[68,123096,123097,123100],{"class":70,"line":3250},[68,123098,123099],{"class":74},"ping",[68,123101,123102],{"class":302},"      # 测试网络连通性\n",[68,123104,123105,123107],{"class":70,"line":3255},[68,123106,28335],{"class":74},[68,123108,123109],{"class":302},"      # 发送 HTTP 请求\n",[68,123111,123112,123114],{"class":70,"line":3269},[68,123113,121763],{"class":74},[68,123115,123116],{"class":302},"      # 下载文件\n",[68,123118,123119,123122],{"class":70,"line":3274},[68,123120,123121],{"class":74},"ssh",[68,123123,123124],{"class":302},"       # 远程登录\n",[68,123126,123127,123130],{"class":70,"line":4067},[68,123128,123129],{"class":74},"scp",[68,123131,123132],{"class":302},"       # 远程文件传输\n",[68,123134,123135],{"class":70,"line":4081},[68,123136,3890],{"emptyLinePlaceholder":1567},[68,123138,123139],{"class":70,"line":4089},[68,123140,123141],{"class":302},"# 包管理（Debian\u002FUbuntu）\n",[68,123143,123144,123146,123148],{"class":70,"line":4094},[68,123145,118842],{"class":74},[68,123147,118821],{"class":1742},[68,123149,123150],{"class":302},"   # 更新软件源\n",[68,123152,123153,123155,123157],{"class":70,"line":4100},[68,123154,118842],{"class":74},[68,123156,25319],{"class":1742},[68,123158,123159],{"class":302},"  # 安装软件包\n",[68,123161,123162,123164,123166],{"class":70,"line":4106},[68,123163,118842],{"class":74},[68,123165,27565],{"class":1742},[68,123167,123168],{"class":302},"   # 卸载软件包\n",[263,123170,123171],{"start":82},[27,123172,123173],{},"KDE Dolphin 以root打开",[170,123175,123176],{},"kde5",[58,123178,123180],{"className":118770,"code":123179,"language":118772,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[65,123181,123182],{"__ignoreMap":63},[68,123183,123184,123187,123190,123193,123195,123197,123200,123203,123205,123208,123210],{"class":70,"line":71},[68,123185,123186],{"class":74},"pkexec",[68,123188,123189],{"class":1742}," env",[68,123191,123192],{"class":1742}," DISPLAY=",[68,123194,29627],{"class":78},[68,123196,29685],{"class":1742},[68,123198,123199],{"class":78},"$XAUTHORITY ",[68,123201,123202],{"class":1742},"KDE_SESSION_VERSION=",[68,123204,1948],{"class":85},[68,123206,123207],{"class":1742}," KDE_FULL_SESSION=",[68,123209,2855],{"class":85},[68,123211,123212],{"class":1742}," dolphin\n",[170,123214,123215],{},"kde6",[58,123217,123219],{"className":118770,"code":123218,"language":118772,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[65,123220,123221],{"__ignoreMap":63},[68,123222,123223,123225,123227,123229,123231,123233,123235,123237,123239,123241,123243],{"class":70,"line":71},[68,123224,123186],{"class":74},[68,123226,123189],{"class":1742},[68,123228,123192],{"class":1742},[68,123230,29627],{"class":78},[68,123232,29685],{"class":1742},[68,123234,123199],{"class":78},[68,123236,123202],{"class":1742},[68,123238,1973],{"class":85},[68,123240,123207],{"class":1742},[68,123242,2855],{"class":85},[68,123244,123212],{"class":1742},[1553,123246,123247],{},"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":63,"searchDepth":82,"depth":82,"links":123249},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122909,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123256,"title":123257,"body":123258,"description":1564,"extension":1565,"meta":123272,"navigation":1567,"path":123273,"seo":123274,"stem":123275,"__hash__":123276},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123259,"toc":123270},[123260,123263],[10,123261,123257],{"id":123262},"_5-各种环境配置",[170,123264,123265],{},[1867,123266,123269],{"href":123267,"rel":123268},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25350],"电控组环境搭建大全",{"title":63,"searchDepth":82,"depth":82,"links":123271},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123257,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123278,"title":123279,"body":123280,"description":1564,"extension":1565,"meta":123628,"navigation":1567,"path":123629,"seo":123630,"stem":123631,"__hash__":123632},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123281,"toc":123620},[123282,123285,123289,123293,123297,123302,123309,123313,123606,123610,123617],[10,123283,123279],{"id":123284},"_6-拓展功能",[14,123286,123288],{"id":123287},"_61-wine","6.1 Wine",[14,123290,123292],{"id":123291},"_62-android","6.2 Android",[19,123294,123296],{"id":123295},"_621-i卡a卡","6.2.1 I卡、A卡",[263,123298,123299],{},[27,123300,123301],{},"Wayland-Waydroid(体验超级好)",[170,123303,123304,123305],{},"Waydroid 官网与安装指南：",[1867,123306,123307],{"href":123307,"rel":123308},"https:\u002F\u002Fwaydro.id\u002F",[25350],[19,123310,123312],{"id":123311},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[263,123314,123315],{},[27,123316,123317,123318,123320,123321,123325,123327,123330,123335,123532],{},"QEMU-KVM虚拟机 + BlissOS-X86",[546,123319],{},"BlissOS 官网下载：",[1867,123322,123323],{"href":123323,"rel":123324},"https:\u002F\u002Fblissos.org\u002F",[25350],[546,123326],{},[801,123328],{"alt":63,"src":123329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[263,123331,123332],{"start":98},[27,123333,123334],{},"比较推荐的配置",[58,123336,123338],{"className":118770,"code":123337,"language":118772,"meta":63,"style":63},"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",[65,123339,123340,123347,123357,123367,123377,123389,123399,123406,123416,123425,123434,123444,123454,123463,123473,123483,123495,123505,123514,123524],{"__ignoreMap":63},[68,123341,123342,123345],{"class":70,"line":71},[68,123343,123344],{"class":74},"qemu-system-x86_64",[68,123346,26164],{"class":85},[68,123348,123349,123352,123355],{"class":70,"line":82},[68,123350,123351],{"class":85},"        -M",[68,123353,123354],{"class":1742}," q35,vmport=off",[68,123356,26164],{"class":85},[68,123358,123359,123362,123365],{"class":70,"line":98},[68,123360,123361],{"class":85},"        -accel",[68,123363,123364],{"class":1742}," kvm",[68,123366,26164],{"class":85},[68,123368,123369,123372,123375],{"class":70,"line":104},[68,123370,123371],{"class":85},"        -cpu",[68,123373,123374],{"class":1742}," qemu64,+sse3,+sse4.2",[68,123376,26164],{"class":85},[68,123378,123379,123382,123385,123387],{"class":70,"line":112},[68,123380,123381],{"class":85},"        -smp",[68,123383,123384],{"class":1742}," 8,cores=",[68,123386,1922],{"class":85},[68,123388,26164],{"class":85},[68,123390,123391,123394,123397],{"class":70,"line":124},[68,123392,123393],{"class":85},"        -m",[68,123395,123396],{"class":1742}," 6G",[68,123398,26164],{"class":85},[68,123400,123401,123404],{"class":70,"line":1496},[68,123402,123403],{"class":85},"        -usb",[68,123405,26164],{"class":85},[68,123407,123408,123411,123414],{"class":70,"line":1502},[68,123409,123410],{"class":85},"        -device",[68,123412,123413],{"class":1742}," virtio-tablet",[68,123415,26164],{"class":85},[68,123417,123418,123420,123423],{"class":70,"line":1510},[68,123419,123410],{"class":85},[68,123421,123422],{"class":1742}," virtio-keyboard",[68,123424,26164],{"class":85},[68,123426,123427,123429,123432],{"class":70,"line":1521},[68,123428,123410],{"class":85},[68,123430,123431],{"class":1742}," usb-tablet",[68,123433,26164],{"class":85},[68,123435,123436,123439,123442],{"class":70,"line":3103},[68,123437,123438],{"class":85},"        -bios",[68,123440,123441],{"class":1742}," OVMF-pure-efi64.fd",[68,123443,26164],{"class":85},[68,123445,123446,123449,123452],{"class":70,"line":3108},[68,123447,123448],{"class":85},"        -net",[68,123450,123451],{"class":1742}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[68,123453,26164],{"class":85},[68,123455,123456,123458,123461],{"class":70,"line":3114},[68,123457,123448],{"class":85},[68,123459,123460],{"class":1742}," nic,model=virtio",[68,123462,26164],{"class":85},[68,123464,123465,123468,123471],{"class":70,"line":3119},[68,123466,123467],{"class":85},"        -audio",[68,123469,123470],{"class":1742}," sdl,model=hda",[68,123472,26164],{"class":85},[68,123474,123475,123478,123481],{"class":70,"line":3133},[68,123476,123477],{"class":85},"        -display",[68,123479,123480],{"class":1742}," sdl,gl=on,show-cursor=on",[68,123482,26164],{"class":85},[68,123484,123485,123487,123490,123493],{"class":70,"line":3138},[68,123486,123410],{"class":85},[68,123488,123489],{"class":1742}," virtio-vga-gl,xres=1920,yres=",[68,123491,123492],{"class":85},"1080",[68,123494,26164],{"class":85},[68,123496,123497,123500,123503],{"class":70,"line":3144},[68,123498,123499],{"class":85},"        -drive",[68,123501,123502],{"class":1742}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[68,123504,26164],{"class":85},[68,123506,123507,123509,123512],{"class":70,"line":3165},[68,123508,123499],{"class":85},[68,123510,123511],{"class":1742}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[68,123513,26164],{"class":85},[68,123515,123516,123519,123522],{"class":70,"line":3170},[68,123517,123518],{"class":85},"        -monitor",[68,123520,123521],{"class":1742}," stdio",[68,123523,26164],{"class":85},[68,123525,123526,123529],{"class":70,"line":3184},[68,123527,123528],{"class":85},"        -serial",[68,123530,123531],{"class":1742}," none\n",[263,123533,123534],{"start":112},[27,123535,123536,123537],{},"常用操作：",[263,123538,123539,123542,123598],{},[27,123540,123541],{},"全屏：Ctrl+Alt+F",[27,123543,123544,123545,123550],{},"adb调试",[263,123546,123547],{},[27,123548,123549],{},"使Linux与Android用ADB连接。",[58,123551,123553],{"className":118770,"code":123552,"language":118772,"meta":63,"style":63},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[65,123554,123555,123560,123571,123576,123588,123593],{"__ignoreMap":63},[68,123556,123557],{"class":70,"line":71},[68,123558,123559],{"class":302},"# 连接安卓\n",[68,123561,123562,123565,123568],{"class":70,"line":82},[68,123563,123564],{"class":74},"adb",[68,123566,123567],{"class":1742}," connect",[68,123569,123570],{"class":85}," 127.0.0.1\n",[68,123572,123573],{"class":70,"line":98},[68,123574,123575],{"class":302},"# 打开shell\n",[68,123577,123578,123580,123582,123585],{"class":70,"line":104},[68,123579,123564],{"class":74},[68,123581,28369],{"class":85},[68,123583,123584],{"class":1742}," 127.0.0.1:5555",[68,123586,123587],{"class":1742}," shell\n",[68,123589,123590],{"class":70,"line":112},[68,123591,123592],{"class":302},"# 使用root权限\n",[68,123594,123595],{"class":70,"line":124},[68,123596,123597],{"class":74},"su\n",[27,123599,123600,123601],{},"中文输入法",[263,123602,123603],{},[27,123604,123605],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123607,123609],{"id":123608},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[170,123611,123612,123613],{},"rEFInd 官网与文档：",[1867,123614,123615],{"href":123615,"rel":123616},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25350],[1553,123618,123619],{},"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":63,"searchDepth":82,"depth":82,"links":123621},[123622,123623,123627],{"id":123287,"depth":82,"text":123288},{"id":123291,"depth":82,"text":123292,"children":123624},[123625,123626],{"id":123295,"depth":98,"text":123296},{"id":123311,"depth":98,"text":123312},{"id":123608,"depth":82,"text":123609},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123279,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123634,"title":123635,"body":123636,"description":1564,"extension":1565,"meta":126935,"navigation":1567,"path":126936,"seo":126937,"stem":126938,"__hash__":126939},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123637,"toc":126909},[123638,123641,123645,123648,123655,123905,123908,123980,123983,123987,123991,123996,123999,124002,124005,124010,124013,124016,124019,124024,124027,124032,124035,124038,124043,124046,124051,124054,124058,124062,124065,124070,124073,124087,124090,124093,124102,124105,124114,124117,124120,124129,124132,124141,124144,124147,124156,124159,124162,124177,124180,124183,124192,124197,124200,124203,124212,124215,124224,124227,124236,124239,124248,124253,124256,124264,124269,124272,124281,124284,124292,124297,124300,124309,124312,124315,124319,124322,124327,124330,124335,124349,124354,124359,124370,124375,124381,124386,124401,124406,124409,124414,124419,124424,124432,124437,124444,124449,124460,124465,124468,124472,124475,124478,124483,124486,124505,124510,124513,124522,124527,124530,124552,124555,124585,124588,124593,124596,124610,124615,124634,124637,124640,124645,124657,124662,124667,124670,124675,124678,124693,124696,124701,124706,124710,124715,124755,124758,124762,124768,124774,124779,124782,124789,124794,124801,124804,124807,124814,124828,124831,124891,124894,124908,124920,124923,124926,124929,124993,124996,124999,125002,125022,125025,125030,125037,125041,125044,125048,125053,125058,125062,125065,125068,125110,125115,125118,125140,125155,125157,125162,125174,125234,125236,125238,125292,125294,125296,125302,125307,125310,125315,125319,125322,125384,125389,125392,125394,125398,125410,125492,125494,125496,125550,125556,125558,125562,125567,125569,125574,125578,125598,125633,125637,125640,125643,125646,125653,125656,125668,125671,125686,125689,125708,125756,125759,125776,125779,125793,125798,125801,125810,125825,125837,125875,125880,125889,125894,125899,125925,125934,125938,125942,125947,125950,125954,125958,125963,125966,125971,125974,125979,125982,125987,125990,125994,125999,126002,126007,126010,126014,126019,126022,126027,126030,126035,126038,126042,126047,126050,126055,126058,126063,126066,126070,126075,126078,126083,126086,126091,126094,126099,126102,126107,126110,126115,126118,126122,126127,126130,126135,126142,126146,126151,126154,126159,126162,126166,126171,126174,126177,126180,126183,126186,126190,126193,126203,126208,126213,126235,126240,126245,126252,126256,126261,126264,126267,126272,126275,126278,126281,126284,126287,126290,126293,126296,126299,126302,126305,126308,126313,126318,126323,126328,126333,126338,126343,126346,126350,126353,126357,126362,126367,126372,126377,126381,126387,126395,126400,126403,126408,126423,126426,126431,126465,126480,126483,126538,126564,126576,126579,126588,126591,126606,126611,126614,126620,126625,126628,126633,126636,126641,126646,126653,126656,126671,126674,126709,126714,126722,126760,126763,126766,126771,126774,126779,126790,126824,126829,126832,126841,126846,126852,126855,126860,126869,126874,126877,126880,126885,126893,126896,126901,126906],[10,123639,123635],{"id":123640},"_7-其他操作",[14,123642,123644],{"id":123643},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[170,123646,123647],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[170,123649,123650,123651,123654],{},"进入工控机的硬盘目录，进入",[65,123652,123653],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[58,123656,123660],{"className":123657,"code":123658,"language":123659,"meta":63,"style":63},"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",[65,123661,123662,123670,123681,123688,123695,123707,123714,123726,123737,123748,123755,123762,123769,123781,123793,123800,123812,123824,123831,123843,123855,123867,123878,123885,123896],{"__ignoreMap":63},[68,123663,123664,123667],{"class":70,"line":71},[68,123665,123666],{"class":52784},"network",[68,123668,123669],{"class":78},": \n",[68,123671,123672,123675,123677,123679],{"class":70,"line":82},[68,123673,123674],{"class":52784},"  version",[68,123676,89],{"class":78},[68,123678,1715],{"class":85},[68,123680,4164],{"class":78},[68,123682,123683,123686],{"class":70,"line":98},[68,123684,123685],{"class":52784},"  wifis",[68,123687,123669],{"class":78},[68,123689,123690,123693],{"class":70,"line":104},[68,123691,123692],{"class":52784},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[68,123694,123669],{"class":78},[68,123696,123697,123700,123702,123705],{"class":70,"line":112},[68,123698,123699],{"class":52784},"      renderer",[68,123701,89],{"class":78},[68,123703,123704],{"class":1742},"NetworkManager",[68,123706,4164],{"class":78},[68,123708,123709,123712],{"class":70,"line":124},[68,123710,123711],{"class":52784},"      match",[68,123713,123669],{"class":78},[68,123715,123716,123719,123721,123724],{"class":70,"line":1496},[68,123717,123718],{"class":52784},"        name",[68,123720,89],{"class":78},[68,123722,123723],{"class":1742},"\"wlan0\"",[68,123725,4164],{"class":78},[68,123727,123728,123731,123733,123735],{"class":70,"line":1502},[68,123729,123730],{"class":52784},"      dhcp4",[68,123732,89],{"class":78},[68,123734,2855],{"class":85},[68,123736,4164],{"class":78},[68,123738,123739,123742,123744,123746],{"class":70,"line":1510},[68,123740,123741],{"class":52784},"      dhcp6",[68,123743,89],{"class":78},[68,123745,2855],{"class":85},[68,123747,4164],{"class":78},[68,123749,123750,123753],{"class":70,"line":1521},[68,123751,123752],{"class":52784},"      access-points",[68,123754,123669],{"class":78},[68,123756,123757,123760],{"class":70,"line":3103},[68,123758,123759],{"class":1742},"        \"EMIS_Vinci_Robocon_5G\"",[68,123761,123669],{"class":78},[68,123763,123764,123767],{"class":70,"line":3108},[68,123765,123766],{"class":52784},"          auth",[68,123768,123669],{"class":78},[68,123770,123771,123774,123776,123779],{"class":70,"line":3114},[68,123772,123773],{"class":52784},"            key-management",[68,123775,89],{"class":78},[68,123777,123778],{"class":1742},"\"psk\"",[68,123780,4164],{"class":78},[68,123782,123783,123786,123788,123791],{"class":70,"line":3119},[68,123784,123785],{"class":52784},"            password",[68,123787,89],{"class":78},[68,123789,123790],{"class":1742},"\"vinci666\"",[68,123792,4164],{"class":78},[68,123794,123795,123798],{"class":70,"line":3133},[68,123796,123797],{"class":52784},"          networkmanager",[68,123799,123669],{"class":78},[68,123801,123802,123805,123807,123810],{"class":70,"line":3138},[68,123803,123804],{"class":52784},"            uuid",[68,123806,89],{"class":78},[68,123808,123809],{"class":1742},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[68,123811,4164],{"class":78},[68,123813,123814,123817,123819,123822],{"class":70,"line":3144},[68,123815,123816],{"class":52784},"            name",[68,123818,89],{"class":78},[68,123820,123821],{"class":1742},"\"EMIS_Vinci_Robocon_5G\"",[68,123823,4164],{"class":78},[68,123825,123826,123829],{"class":70,"line":3165},[68,123827,123828],{"class":52784},"            passthrough",[68,123830,123669],{"class":78},[68,123832,123833,123836,123838,123841],{"class":70,"line":3170},[68,123834,123835],{"class":52784},"              wifi-security.auth-alg",[68,123837,89],{"class":78},[68,123839,123840],{"class":1742},"\"open\"",[68,123842,4164],{"class":78},[68,123844,123845,123848,123850,123853],{"class":70,"line":3184},[68,123846,123847],{"class":52784},"              ipv6.addr-gen-mode",[68,123849,89],{"class":78},[68,123851,123852],{"class":1742},"\"default\"",[68,123854,4164],{"class":78},[68,123856,123857,123860,123862,123865],{"class":70,"line":3189},[68,123858,123859],{"class":52784},"              ipv6.ip6-privacy",[68,123861,89],{"class":78},[68,123863,123864],{"class":1742},"\"-1\"",[68,123866,4164],{"class":78},[68,123868,123869,123872,123874,123876],{"class":70,"line":3218},[68,123870,123871],{"class":52784},"              proxy._",[68,123873,89],{"class":78},[68,123875,9141],{"class":1742},[68,123877,4164],{"class":78},[68,123879,123880,123883],{"class":70,"line":3223},[68,123881,123882],{"class":52784},"      networkmanager",[68,123884,123669],{"class":78},[68,123886,123887,123890,123892,123894],{"class":70,"line":3240},[68,123888,123889],{"class":52784},"        uuid",[68,123891,89],{"class":78},[68,123893,123809],{"class":1742},[68,123895,4164],{"class":78},[68,123897,123898,123900,123902],{"class":70,"line":3245},[68,123899,123718],{"class":52784},[68,123901,89],{"class":78},[68,123903,123904],{"class":1742},"\"EMIS_Vinci_Robocon_5G\"\n",[170,123906,123907],{},"将其改为新wifi的名和密码：",[58,123909,123911],{"className":123657,"code":123910,"language":123659,"meta":63,"style":63},"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",[65,123912,123913,123919,123928,123934,123941,123950,123958,123964,123970],{"__ignoreMap":63},[68,123914,123915,123917],{"class":70,"line":71},[68,123916,123666],{"class":52784},[68,123918,5229],{"class":78},[68,123920,123921,123923,123925],{"class":70,"line":82},[68,123922,123674],{"class":52784},[68,123924,89],{"class":78},[68,123926,123927],{"class":85},"2\n",[68,123929,123930,123932],{"class":70,"line":98},[68,123931,123685],{"class":52784},[68,123933,5229],{"class":78},[68,123935,123936,123939],{"class":70,"line":104},[68,123937,123938],{"class":52784},"    wlan0",[68,123940,5229],{"class":78},[68,123942,123943,123945,123947],{"class":70,"line":112},[68,123944,123730],{"class":52784},[68,123946,89],{"class":78},[68,123948,123949],{"class":85},"true\n",[68,123951,123952,123954,123956],{"class":70,"line":124},[68,123953,123741],{"class":52784},[68,123955,89],{"class":78},[68,123957,123949],{"class":85},[68,123959,123960,123962],{"class":70,"line":1496},[68,123961,123752],{"class":52784},[68,123963,5229],{"class":78},[68,123965,123966,123968],{"class":70,"line":1502},[68,123967,123759],{"class":1742},[68,123969,5229],{"class":78},[68,123971,123972,123975,123977],{"class":70,"line":1510},[68,123973,123974],{"class":52784},"          password",[68,123976,89],{"class":78},[68,123978,123979],{"class":1742},"\"vinci666\"\n",[170,123981,123982],{},"工控机开机即可连上网。",[14,123984,123986],{"id":123985},"_72-ssh远程开发","7.2 SSH远程开发",[19,123988,123990],{"id":123989},"_721-环境准备","7.2.1 环境准备",[170,123992,123993],{},[268,123994,123995],{},"1.硬件准备",[170,123997,123998],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[170,124000,124001],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[170,124003,124004],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[170,124006,124007],{},[268,124008,124009],{},"2.设置固定IP",[170,124011,124012],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[170,124014,124015],{},"1.进入设置界面",[170,124017,124018],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[170,124020,124021],{},[801,124022],{"alt":63,"src":124023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[170,124025,124026],{},"2.配置所连接的网络",[170,124028,124029],{},[801,124030],{"alt":63,"src":124031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[170,124033,124034],{},"3.设置固定IP",[170,124036,124037],{},"查看当前IP地址。",[170,124039,124040],{},[801,124041],{"alt":63,"src":124042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[170,124044,124045],{},"设置固定IP。",[170,124047,124048],{},[801,124049],{"alt":63,"src":124050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[170,124052,124053],{},"至此，IP配置完毕。",[19,124055,124057],{"id":124056},"_722-环境搭建","7.2.2 环境搭建",[170,124059,124060],{},[268,124061,27239],{},[170,124063,124064],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[170,124066,124067],{},[268,124068,124069],{},"实现",[170,124071,124072],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[263,124074,124075,124078,124081,124084],{},[27,124076,124077],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[27,124079,124080],{},"远程主机启动SSH服务；",[27,124082,124083],{},"本地主机登陆远程主机；",[27,124085,124086],{},"实现数据传输。",[170,124088,124089],{},"1.安装SSH客户端与服务端",[170,124091,124092],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[58,124094,124096],{"className":122290,"code":124095,"language":122292,"meta":122293,"style":63}," sudo apt install openssh-server\n",[65,124097,124098],{"__ignoreMap":63},[68,124099,124100],{"class":70,"line":71},[68,124101,124095],{},[170,124103,124104],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[58,124106,124108],{"className":122290,"code":124107,"language":122292,"meta":122293,"style":63},"sudo apt install openssh-client\n",[65,124109,124110],{"__ignoreMap":63},[68,124111,124112],{"class":70,"line":71},[68,124113,124107],{},[170,124115,124116],{},"2.远程主机启动SSH服务",[170,124118,124119],{},"远程主机启动 ssh 服务命令如下：",[58,124121,124123],{"className":122290,"code":124122,"language":122292,"meta":122293,"style":63},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[65,124124,124125],{"__ignoreMap":63},[68,124126,124127],{"class":70,"line":71},[68,124128,124122],{},[170,124130,124131],{},"启动后可使用如下命令查看服务是否正常运行：",[58,124133,124135],{"className":122290,"code":124134,"language":122292,"meta":122293,"style":63},"ps -e | grep ssh\n",[65,124136,124137],{"__ignoreMap":63},[68,124138,124139],{"class":70,"line":71},[68,124140,124134],{},[170,124142,124143],{},"如果启动成功，会包含 sshd 程序。",[170,124145,124146],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[58,124148,124150],{"className":122290,"code":124149,"language":122292,"meta":122293,"style":63},"sudo systemctl enable ssh\n",[65,124151,124152],{"__ignoreMap":63},[68,124153,124154],{"class":70,"line":71},[68,124155,124149],{},[170,124157,124158],{},"3.本地远程登录",[170,124160,124161],{},"登录远程主机可以调用如下命令:",[58,124163,124165],{"className":118770,"code":124164,"language":118772,"meta":63,"style":63},"ssh -X 用户名@ip地址\n",[65,124166,124167],{"__ignoreMap":63},[68,124168,124169,124171,124174],{"class":70,"line":71},[68,124170,123121],{"class":74},[68,124172,124173],{"class":85}," -X",[68,124175,124176],{"class":1742}," 用户名@ip地址\n",[170,124178,124179],{},"然后根据提示，录入登陆密码，即可成功登录。",[170,124181,124182],{},"如果退出，可以调用exit命令：",[58,124184,124186],{"className":122290,"code":124185,"language":122292,"meta":122293,"style":63},"exit\n",[65,124187,124188],{"__ignoreMap":63},[68,124189,124190],{"class":70,"line":71},[68,124191,124185],{},[170,124193,124194],{},[268,124195,124196],{},"4.实现数据传输",[170,124198,124199],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[170,124201,124202],{},"上传文件指令格式如下：",[58,124204,124206],{"className":122290,"code":124205,"language":122292,"meta":122293,"style":63},"scp 本地文件路径 账号@ip:路径\n",[65,124207,124208],{"__ignoreMap":63},[68,124209,124210],{"class":70,"line":71},[68,124211,124205],{},[170,124213,124214],{},"上传文件夹指令格式如下：",[58,124216,124218],{"className":122290,"code":124217,"language":122292,"meta":122293,"style":63},"scp -r 本地文件夹路径 账号@ip:路径\n",[65,124219,124220],{"__ignoreMap":63},[68,124221,124222],{"class":70,"line":71},[68,124223,124217],{},[170,124225,124226],{},"下载文件指令格式如下：",[58,124228,124230],{"className":122290,"code":124229,"language":122292,"meta":122293,"style":63},"scp 账号@ip:路径 本地文件夹路径\n",[65,124231,124232],{"__ignoreMap":63},[68,124233,124234],{"class":70,"line":71},[68,124235,124229],{},[170,124237,124238],{},"下载文件夹指令格式如下：",[58,124240,124242],{"className":122290,"code":124241,"language":122292,"meta":122293,"style":63},"scp -r 账号@ip:路径 本地文件夹路径\n",[65,124243,124244],{"__ignoreMap":63},[68,124245,124246],{"class":70,"line":71},[68,124247,124241],{},[170,124249,124250],{},[268,124251,124252],{},"优化",[170,124254,124255],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[263,124257,124258,124261],{},[27,124259,124260],{},"本地生成密钥对；",[27,124262,124263],{},"将公钥上传至远程主机。",[170,124265,124266],{},[268,124267,124268],{},"1.生成密钥对",[170,124270,124271],{},"本地客户端生成公私钥：（一路回车默认即可）",[58,124273,124275],{"className":122290,"code":124274,"language":122292,"meta":122293,"style":63},"ssh-keygen\n",[65,124276,124277],{"__ignoreMap":63},[68,124278,124279],{"class":70,"line":71},[68,124280,124274],{},[170,124282,124283],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[263,124285,124286,124289],{},[27,124287,124288],{},"id_rsa （私钥）；",[27,124290,124291],{},"id_rsa.pub (公钥)。",[170,124293,124294],{},[268,124295,124296],{},"2.公钥上传",[170,124298,124299],{},"上传指令如下：",[58,124301,124303],{"className":122290,"code":124302,"language":122292,"meta":122293,"style":63},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[65,124304,124305],{"__ignoreMap":63},[68,124306,124307],{"class":70,"line":71},[68,124308,124302],{},[170,124310,124311],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[170,124313,124314],{},"以后再远程登录就无需录入密码了。",[19,124316,124318],{"id":124317},"_723-使用vscode优化","7.2.3 使用VScode优化",[170,124320,124321],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[170,124323,124324],{},[268,124325,124326],{},"1.准备工作",[170,124328,124329],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[170,124331,124332],{},[268,124333,124334],{},"2.为VScode安装远程开发插件",[170,124336,124337,124338,124341,124342,124345,124346,29869],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[65,124339,124340],{},"扩展：商店","的搜索栏输入",[65,124343,124344],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[65,124347,124348],{},"安装",[170,124350,124351],{},[801,124352],{"alt":63,"src":124353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[170,124355,124356],{},[268,124357,124358],{},"3.配置远程连接",[170,124360,124361,124362,124365,124366,124369],{},"步骤1：使用快捷键",[65,124363,124364],{},"ctrl + shift + p","打开命令输入窗口，并输入",[65,124367,124368],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[170,124371,124372],{},[801,124373],{"alt":63,"src":124374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[170,124376,124377,124378,29869],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[65,124379,124380],{},"Add New SSH Host",[170,124382,124383],{},[801,124384],{"alt":63,"src":124385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[170,124387,124388,124389,124392,124393,124396,124397,124400],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[65,124390,124391],{},"ssh +X ubuntu@192.168.43.164","，其中，",[65,124394,124395],{},"ubuntu","需要替换为你的登录用户名，",[65,124398,124399],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[170,124402,124403],{},[801,124404],{"alt":63,"src":124405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[170,124407,124408],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[170,124410,124411],{},[801,124412],{"alt":63,"src":124413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[170,124415,124416],{},[801,124417],{"alt":63,"src":124418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[170,124420,124421],{},[268,124422,124423],{},"4.使用",[170,124425,124426,124427,124365,124429,124431],{},"步骤1：继续使用快捷键",[65,124428,124364],{},[65,124430,124368],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[170,124433,124434],{},[801,124435],{"alt":63,"src":124436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[170,124438,124439,124440,124443],{},"或者，也可以点击侧边栏的",[65,124441,124442],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[170,124445,124446],{},[801,124447],{"alt":63,"src":124448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[170,124450,124451,124452,124455,124456,124459],{},"步骤2：选择菜单栏的",[65,124453,124454],{},"文件","下的",[65,124457,124458],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[170,124461,124462],{},[801,124463],{"alt":63,"src":124464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[170,124466,124467],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124469,124471],{"id":124470},"_73-远程桌面","7.3 远程桌面",[170,124473,124474],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[170,124476,124477],{},"我们选择使用VNC来看。",[263,124479,124480],{},[27,124481,124482],{},"安装VNC服务器：",[170,124484,124485],{},"这里以TigerVNC为例进行安装：",[58,124487,124489],{"className":118770,"code":124488,"language":118772,"meta":63,"style":63},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[65,124490,124491],{"__ignoreMap":63},[68,124492,124493,124495,124497,124499,124502],{"class":70,"line":71},[68,124494,26062],{"class":74},[68,124496,118791],{"class":1742},[68,124498,25319],{"class":1742},[68,124500,124501],{"class":1742}," tigervnc-standalone-server",[68,124503,124504],{"class":1742}," tigervnc-common\n",[263,124506,124507],{"start":82},[27,124508,124509],{},"设置VNC密码：",[170,124511,124512],{},"为VNC用户设置密码，运行以下命令：",[58,124514,124516],{"className":118770,"code":124515,"language":118772,"meta":63,"style":63},"vncpasswd\n",[65,124517,124518],{"__ignoreMap":63},[68,124519,124520],{"class":70,"line":71},[68,124521,124515],{"class":74},[263,124523,124524],{"start":98},[27,124525,124526],{},"配置VNC启动脚本:",[170,124528,124529],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[58,124531,124533],{"className":118770,"code":124532,"language":118772,"meta":63,"style":63},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[65,124534,124535,124544],{"__ignoreMap":63},[68,124536,124537,124539,124541],{"class":70,"line":71},[68,124538,102741],{"class":74},[68,124540,30700],{"class":85},[68,124542,124543],{"class":1742}," ~\u002F.vnc\n",[68,124545,124546,124549],{"class":70,"line":82},[68,124547,124548],{"class":74},"nano",[68,124550,124551],{"class":1742}," ~\u002F.vnc\u002Fxstartup\n",[170,124553,124554],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[58,124556,124558],{"className":118770,"code":124557,"language":118772,"meta":63,"style":63},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[65,124559,124560,124565,124573,124580],{"__ignoreMap":63},[68,124561,124562],{"class":70,"line":71},[68,124563,124564],{"class":302},"#!\u002Fbin\u002Fsh\n",[68,124566,124567,124570],{"class":70,"line":82},[68,124568,124569],{"class":85},"unset",[68,124571,124572],{"class":1742}," SESSION_MANAGER\n",[68,124574,124575,124577],{"class":70,"line":98},[68,124576,124569],{"class":85},[68,124578,124579],{"class":1742}," DBUS_SESSION_BUS_ADDRESS\n",[68,124581,124582],{"class":70,"line":104},[68,124583,124584],{"class":74},"gnome-session\n",[170,124586,124587],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[263,124589,124590],{"start":104},[27,124591,124592],{},"给予执行权限：",[170,124594,124595],{},"为xstartup文件设置执行权限：",[58,124597,124599],{"className":118770,"code":124598,"language":118772,"meta":63,"style":63},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[65,124600,124601],{"__ignoreMap":63},[68,124602,124603,124605,124608],{"class":70,"line":71},[68,124604,26097],{"class":74},[68,124606,124607],{"class":1742}," +x",[68,124609,124551],{"class":1742},[263,124611,124612],{"start":112},[27,124613,124614],{},"启动VNC服务器：",[58,124616,124618],{"className":118770,"code":124617,"language":118772,"meta":63,"style":63},"vncserver -geometry 1920x1080 -localhost=0\n",[65,124619,124620],{"__ignoreMap":63},[68,124621,124622,124625,124628,124631],{"class":70,"line":71},[68,124623,124624],{"class":74},"vncserver",[68,124626,124627],{"class":85}," -geometry",[68,124629,124630],{"class":1742}," 1920x1080",[68,124632,124633],{"class":85}," -localhost=0\n",[170,124635,124636],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[170,124638,124639],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[263,124641,124642],{"start":124},[27,124643,124644],{},"查看已开启的VNC服务器：",[58,124646,124648],{"className":118770,"code":124647,"language":118772,"meta":63,"style":63},"vncserver -list\n",[65,124649,124650],{"__ignoreMap":63},[68,124651,124652,124654],{"class":70,"line":71},[68,124653,124624],{"class":74},[68,124655,124656],{"class":85}," -list\n",[170,124658,124659],{},[801,124660],{"alt":63,"src":124661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[263,124663,124664],{"start":1496},[27,124665,124666],{},"连接到VNC服务器：",[170,124668,124669],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[263,124671,124672],{"start":1502},[27,124673,124674],{},"停止VNC服务器：",[170,124676,124677],{},"如果需要停止VNC服务器，可以使用以下命令：",[58,124679,124681],{"className":118770,"code":124680,"language":118772,"meta":63,"style":63},"vncserver -kill :1\n",[65,124682,124683],{"__ignoreMap":63},[68,124684,124685,124687,124690],{"class":70,"line":71},[68,124686,124624],{"class":74},[68,124688,124689],{"class":85}," -kill",[68,124691,124692],{"class":1742}," :1\n",[170,124694,124695],{},"将:1替换为你实际使用的显示编号。",[170,124697,124698],{},[801,124699],{"alt":63,"src":124700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[170,124702,124703],{},[801,124704],{"alt":63,"src":124705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124707,124709],{"id":124708},"_74-usb端口设置","7.4 USB端口设置",[170,124711,124712],{},[268,124713,124714],{},"首先先配置好权限",[58,124716,124718],{"className":118770,"code":124717,"language":118772,"meta":63,"style":63},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[65,124719,124720,124725,124738,124745,124750],{"__ignoreMap":63},[68,124721,124722],{"class":70,"line":71},[68,124723,124724],{"class":302},"# 将用户权限提高\n",[68,124726,124727,124729,124731,124733,124736],{"class":70,"line":82},[68,124728,26062],{"class":74},[68,124730,28060],{"class":1742},[68,124732,28063],{"class":85},[68,124734,124735],{"class":1742}," dialout",[68,124737,28068],{"class":78},[68,124739,124740,124742],{"class":70,"line":98},[68,124741,28087],{"class":74},[68,124743,124744],{"class":1742}," dialout\n",[68,124746,124747],{"class":70,"line":104},[68,124748,124749],{"class":302},"# 查看下面命令是否输出dialout（若输出才正常）\n",[68,124751,124752],{"class":70,"line":112},[68,124753,124754],{"class":74},"groups\n",[170,124756,124757],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,124759,124761],{"id":124760},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[170,124763,124764,124767],{},[268,124765,124766],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[170,124769,124770,124773],{},[268,124771,124772],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[170,124775,124776],{},[268,124777,124778],{},"流程如下：",[170,124780,124781],{},"（1）.查找设备idVendor和idProduct",[170,124783,124784,124785,124788],{},"接入两个USB设备，在终端调用指令",[65,124786,124787],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[170,124790,124791],{},[801,124792],{"alt":63,"src":124793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[170,124795,124796,124797,124800],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[65,124798,124799],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[170,124802,124803],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[170,124805,124806],{},"（2）.编写映射规则",[170,124808,124809,124810,124813],{},"在",[65,124811,124812],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[58,124815,124817],{"className":118770,"code":124816,"language":118772,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[65,124818,124819],{"__ignoreMap":63},[68,124820,124821,124823,124825],{"class":70,"line":71},[68,124822,26062],{"class":74},[68,124824,120057],{"class":1742},[68,124826,124827],{"class":1742}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[170,124829,124830],{},"输入如下内容：",[58,124832,124834],{"className":118770,"code":124833,"language":118772,"meta":63,"style":63},"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",[65,124835,124836,124866],{"__ignoreMap":63},[68,124837,124838,124841,124843,124846,124849,124852,124855,124857,124860,124863],{"class":70,"line":71},[68,124839,124840],{"class":78},"KERNEL",[68,124842,1685],{"class":316},[68,124844,124845],{"class":1742},"=\"ttyUSB*\",",[68,124847,124848],{"class":74}," ATTRS",[68,124850,124851],{"class":1742},"{idVendor}==",[68,124853,124854],{"class":74},"\"10c4\"",[68,124856,2007],{"class":74},[68,124858,124859],{"class":1742}," ATTRS{idProduct}==\"ea60\",",[68,124861,124862],{"class":1742}," MODE:=\"0777\",",[68,124864,124865],{"class":1742}," SYMLINK+=\"mylidar\"\n",[68,124867,124868,124870,124872,124874,124876,124878,124881,124883,124886,124888],{"class":70,"line":82},[68,124869,124840],{"class":78},[68,124871,1685],{"class":316},[68,124873,124845],{"class":1742},[68,124875,124848],{"class":74},[68,124877,124851],{"class":1742},[68,124879,124880],{"class":74},"\"1a86\"",[68,124882,2007],{"class":74},[68,124884,124885],{"class":1742}," ATTRS{idProduct}==\"7523\",",[68,124887,124862],{"class":1742},[68,124889,124890],{"class":1742}," SYMLINK+=\"mycar\"\n",[170,124892,124893],{},"代码解释：",[24,124895,124896,124899,124902,124905],{},[27,124897,124898],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[27,124900,124901],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[27,124903,124904],{},"SYMLINK是符号连接，即绑定的别名；",[27,124906,124907],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[170,124909,124910,124911,124914,124917],{},"***小提示：***",[25039,124912,124913],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[65,124915,124916],{},"\u002Fetc\u002Fudev\u002Frule.d",[25039,124918,124919],{},"目录即可。",[170,124921,124922],{},"表格 还在加载中，请等待加载完成后再尝试复制",[170,124924,124925],{},"（3）.使规则生效",[170,124927,124928],{},"在终端下输入如下指令：",[58,124930,124932],{"className":118770,"code":124931,"language":118772,"meta":63,"style":63},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[65,124933,124934,124939,124951,124962,124966,124971,124984],{"__ignoreMap":63},[68,124935,124936],{"class":70,"line":71},[68,124937,124938],{"class":302},"# Ubuntu用下方命令\n",[68,124940,124941,124943,124945,124948],{"class":70,"line":82},[68,124942,26062],{"class":74},[68,124944,121522],{"class":1742},[68,124946,124947],{"class":1742}," udev",[68,124949,124950],{"class":1742}," reload\n",[68,124952,124953,124955,124957,124959],{"class":70,"line":98},[68,124954,26062],{"class":74},[68,124956,121522],{"class":1742},[68,124958,124947],{"class":1742},[68,124960,124961],{"class":1742}," restart\n",[68,124963,124964],{"class":70,"line":104},[68,124965,3890],{"emptyLinePlaceholder":1567},[68,124967,124968],{"class":70,"line":112},[68,124969,124970],{"class":302},"#Fedora用下方命令\n",[68,124972,124973,124975,124978,124981],{"class":70,"line":124},[68,124974,26062],{"class":74},[68,124976,124977],{"class":1742}," udevadm",[68,124979,124980],{"class":1742}," control",[68,124982,124983],{"class":85}," --reload\n",[68,124985,124986,124988,124990],{"class":70,"line":1496},[68,124987,26062],{"class":74},[68,124989,124977],{"class":1742},[68,124991,124992],{"class":1742}," trigger\n",[170,124994,124995],{},"再重新插拔设备即可。",[170,124997,124998],{},"（4）.测试",[170,125000,125001],{},"终端下输入如下指令",[58,125003,125005],{"className":118770,"code":125004,"language":118772,"meta":63,"style":63},"ll \u002Fdev | grep ttyUSB\n",[65,125006,125007],{"__ignoreMap":63},[68,125008,125009,125012,125015,125017,125019],{"class":70,"line":71},[68,125010,125011],{"class":74},"ll",[68,125013,125014],{"class":1742}," \u002Fdev",[68,125016,26595],{"class":316},[68,125018,31720],{"class":74},[68,125020,125021],{"class":1742}," ttyUSB\n",[170,125023,125024],{},"运行结果如下：",[170,125026,125027],{},[801,125028],{"alt":63,"src":125029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[170,125031,125032,125033,125036],{},"也可以多次插拔USB设备，会发现设备端口",[65,125034,125035],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[170,125038,125039],{},[268,125040,119438],{},[170,125042,125043],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,125045,125047],{"id":125046},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[170,125049,125050,125052],{},[268,125051,124766],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[170,125054,125055,125057],{},[268,125056,124772],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[170,125059,125060],{},[268,125061,124778],{},[170,125063,125064],{},"（1）.查看所连接的主机USB接口的KERNELS",[170,125066,125067],{},"调用如下指令查看第一台雷达的USB信息：",[58,125069,125071],{"className":118770,"code":125070,"language":118772,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[65,125072,125073,125093],{"__ignoreMap":63},[68,125074,125075,125078,125080,125083,125086,125088,125090],{"class":70,"line":71},[68,125076,125077],{"class":74},"udevadm",[68,125079,71299],{"class":1742},[68,125081,125082],{"class":85}," --attribute-walk",[68,125084,125085],{"class":85}," --name=\u002Fdev\u002FttyUSB0",[68,125087,26595],{"class":316},[68,125089,31720],{"class":74},[68,125091,125092],{"class":1742}," KERNELS\n",[68,125094,125095,125097,125099,125101,125104,125106,125108],{"class":70,"line":82},[68,125096,125077],{"class":74},[68,125098,71299],{"class":1742},[68,125100,125082],{"class":85},[68,125102,125103],{"class":85}," --name=\u002Fdev\u002FttyACM0",[68,125105,26595],{"class":316},[68,125107,31720],{"class":74},[68,125109,125092],{"class":1742},[170,125111,125112],{},[801,125113],{"alt":63,"src":125114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[170,125116,125117],{},"调用如下指令查看第二台雷达的USB信息：",[58,125119,125121],{"className":118770,"code":125120,"language":118772,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[65,125122,125123],{"__ignoreMap":63},[68,125124,125125,125127,125129,125131,125134,125136,125138],{"class":70,"line":71},[68,125126,125077],{"class":74},[68,125128,71299],{"class":1742},[68,125130,125082],{"class":85},[68,125132,125133],{"class":85}," --name=\u002Fdev\u002FttyUSB1",[68,125135,26595],{"class":316},[68,125137,31720],{"class":74},[68,125139,125092],{"class":1742},[170,125141,125142,125143,125146,125147,125150,125151,125154],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[65,125144,125145],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[65,125148,125149],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[268,125152,125153],{},"唯一性标识","”。",[170,125156,124806],{},[170,125158,124809,125159,125161],{},[65,125160,124812],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[58,125163,125164],{"className":118770,"code":124816,"language":118772,"meta":63,"style":63},[65,125165,125166],{"__ignoreMap":63},[68,125167,125168,125170,125172],{"class":70,"line":71},[68,125169,26062],{"class":74},[68,125171,120057],{"class":1742},[68,125173,124827],{"class":1742},[58,125175,125177],{"className":118770,"code":125176,"language":118772,"meta":63,"style":63},"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",[65,125178,125179,125208],{"__ignoreMap":63},[68,125180,125181,125183,125185,125187,125190,125192,125195,125198,125200,125203,125205],{"class":70,"line":71},[68,125182,124840],{"class":78},[68,125184,1685],{"class":316},[68,125186,124845],{"class":1742},[68,125188,125189],{"class":78}," KERNELS",[68,125191,1685],{"class":316},[68,125193,125194],{"class":1742},"=\"1-1.3:1.0\",",[68,125196,125197],{"class":74}," MODE:",[68,125199,1685],{"class":1742},[68,125201,125202],{"class":74},"\"0777\"",[68,125204,2007],{"class":74},[68,125206,125207],{"class":1742}," SYMLINK+=\"rplidar_front\"\n",[68,125209,125210,125212,125214,125216,125218,125220,125223,125225,125227,125229,125231],{"class":70,"line":82},[68,125211,124840],{"class":78},[68,125213,1685],{"class":316},[68,125215,124845],{"class":1742},[68,125217,125189],{"class":78},[68,125219,1685],{"class":316},[68,125221,125222],{"class":1742},"=\"1-1.4:1.0\",",[68,125224,125197],{"class":74},[68,125226,1685],{"class":1742},[68,125228,125202],{"class":74},[68,125230,2007],{"class":74},[68,125232,125233],{"class":1742}," SYMLINK+=\"rplidar_back\"\n",[170,125235,124925],{},[170,125237,124928],{},[58,125239,125240],{"className":118770,"code":124931,"language":118772,"meta":63,"style":63},[65,125241,125242,125246,125256,125266,125270,125274,125284],{"__ignoreMap":63},[68,125243,125244],{"class":70,"line":71},[68,125245,124938],{"class":302},[68,125247,125248,125250,125252,125254],{"class":70,"line":82},[68,125249,26062],{"class":74},[68,125251,121522],{"class":1742},[68,125253,124947],{"class":1742},[68,125255,124950],{"class":1742},[68,125257,125258,125260,125262,125264],{"class":70,"line":98},[68,125259,26062],{"class":74},[68,125261,121522],{"class":1742},[68,125263,124947],{"class":1742},[68,125265,124961],{"class":1742},[68,125267,125268],{"class":70,"line":104},[68,125269,3890],{"emptyLinePlaceholder":1567},[68,125271,125272],{"class":70,"line":112},[68,125273,124970],{"class":302},[68,125275,125276,125278,125280,125282],{"class":70,"line":124},[68,125277,26062],{"class":74},[68,125279,124977],{"class":1742},[68,125281,124980],{"class":1742},[68,125283,124983],{"class":85},[68,125285,125286,125288,125290],{"class":70,"line":1496},[68,125287,26062],{"class":74},[68,125289,124977],{"class":1742},[68,125291,124992],{"class":1742},[170,125293,124995],{},[170,125295,124998],{},[170,125297,125001,125298,125301],{},[65,125299,125300],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[170,125303,125304],{},[801,125305],{"alt":63,"src":125306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[170,125308,125309],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[170,125311,125312,125314],{},[268,125313,119438],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,125316,125318],{"id":125317},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[170,125320,125321],{},"（1）.查看所连接的主机USB接口的信息",[58,125323,125325],{"className":118770,"code":125324,"language":118772,"meta":63,"style":63},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[65,125326,125327,125357],{"__ignoreMap":63},[68,125328,125329,125331,125333,125336,125338,125340,125342,125344,125347,125350,125352,125355],{"class":70,"line":71},[68,125330,125077],{"class":74},[68,125332,71299],{"class":1742},[68,125334,125335],{"class":85}," -a",[68,125337,30700],{"class":85},[68,125339,29906],{"class":78},[68,125341,125077],{"class":74},[68,125343,71299],{"class":1742},[68,125345,125346],{"class":85}," -q",[68,125348,125349],{"class":1742}," path",[68,125351,26601],{"class":85},[68,125353,125354],{"class":1742}," \u002Fdev\u002FttyACM0",[68,125356,1646],{"class":78},[68,125358,125359,125361,125363,125365,125367,125369,125371,125373,125375,125377,125379,125382],{"class":70,"line":82},[68,125360,125077],{"class":74},[68,125362,71299],{"class":1742},[68,125364,125335],{"class":85},[68,125366,30700],{"class":85},[68,125368,29906],{"class":78},[68,125370,125077],{"class":74},[68,125372,71299],{"class":1742},[68,125374,125346],{"class":85},[68,125376,125349],{"class":1742},[68,125378,26601],{"class":85},[68,125380,125381],{"class":1742}," \u002Fdev\u002FttyUSB0",[68,125383,1646],{"class":78},[170,125385,125386],{},[801,125387],{"alt":63,"src":125388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[170,125390,125391],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[170,125393,124806],{},[170,125395,124809,125396,125161],{},[65,125397,124812],{},[58,125399,125400],{"className":118770,"code":124816,"language":118772,"meta":63,"style":63},[65,125401,125402],{"__ignoreMap":63},[68,125403,125404,125406,125408],{"class":70,"line":71},[68,125405,26062],{"class":74},[68,125407,120057],{"class":1742},[68,125409,124827],{"class":1742},[58,125411,125413],{"className":118770,"code":125412,"language":118772,"meta":63,"style":63},"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",[65,125414,125415,125443,125469],{"__ignoreMap":63},[68,125416,125417,125419,125421,125424,125426,125428,125430,125432,125435,125438,125440],{"class":70,"line":71},[68,125418,124840],{"class":78},[68,125420,1685],{"class":316},[68,125422,125423],{"class":1742},"=\"ttyACM*\",",[68,125425,124848],{"class":74},[68,125427,124851],{"class":1742},[68,125429,124880],{"class":74},[68,125431,2007],{"class":74},[68,125433,125434],{"class":1742}," ATTRS{idProduct}==\"55d4\",",[68,125436,125437],{"class":1742}," ATTRS{serial}==\"0001\",",[68,125439,124862],{"class":1742},[68,125441,125442],{"class":1742}," SYMLINK+=\"ttyACM_MCU\"\n",[68,125444,125445,125447,125449,125451,125453,125455,125457,125459,125461,125464,125466],{"class":70,"line":82},[68,125446,124840],{"class":78},[68,125448,1685],{"class":316},[68,125450,125423],{"class":1742},[68,125452,124848],{"class":74},[68,125454,124851],{"class":1742},[68,125456,124880],{"class":74},[68,125458,2007],{"class":74},[68,125460,125434],{"class":1742},[68,125462,125463],{"class":1742}," ATTRS{serial}==\"0002\",",[68,125465,124862],{"class":1742},[68,125467,125468],{"class":1742}," SYMLINK+=\"ttyACM_Lidar\"\n",[68,125470,125471,125473,125475,125477,125479,125481,125483,125485,125487,125489],{"class":70,"line":98},[68,125472,124840],{"class":78},[68,125474,1685],{"class":316},[68,125476,124845],{"class":1742},[68,125478,124848],{"class":74},[68,125480,124851],{"class":1742},[68,125482,124880],{"class":74},[68,125484,2007],{"class":74},[68,125486,124885],{"class":1742},[68,125488,124862],{"class":1742},[68,125490,125491],{"class":1742}," SYMLINK+=\"ttyUSB_IMU\"\n",[170,125493,124925],{},[170,125495,124928],{},[58,125497,125498],{"className":118770,"code":124931,"language":118772,"meta":63,"style":63},[65,125499,125500,125504,125514,125524,125528,125532,125542],{"__ignoreMap":63},[68,125501,125502],{"class":70,"line":71},[68,125503,124938],{"class":302},[68,125505,125506,125508,125510,125512],{"class":70,"line":82},[68,125507,26062],{"class":74},[68,125509,121522],{"class":1742},[68,125511,124947],{"class":1742},[68,125513,124950],{"class":1742},[68,125515,125516,125518,125520,125522],{"class":70,"line":98},[68,125517,26062],{"class":74},[68,125519,121522],{"class":1742},[68,125521,124947],{"class":1742},[68,125523,124961],{"class":1742},[68,125525,125526],{"class":70,"line":104},[68,125527,3890],{"emptyLinePlaceholder":1567},[68,125529,125530],{"class":70,"line":112},[68,125531,124970],{"class":302},[68,125533,125534,125536,125538,125540],{"class":70,"line":124},[68,125535,26062],{"class":74},[68,125537,124977],{"class":1742},[68,125539,124980],{"class":1742},[68,125541,124983],{"class":85},[68,125543,125544,125546,125548],{"class":70,"line":1496},[68,125545,26062],{"class":74},[68,125547,124977],{"class":1742},[68,125549,124992],{"class":1742},[170,125551,125552,125553],{},"再重新插拔设备即可，或者 ",[268,125554,125555],{},"直接重启系统。",[170,125557,124998],{},[170,125559,125001,125560,125301],{},[65,125561,125300],{},[170,125563,125564],{},[801,125565],{"alt":63,"src":125566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[170,125568,125309],{},[170,125570,125571,125573],{},[268,125572,119438],{}," 一些设备可能没有串口号等。",[19,125575,125577],{"id":125576},"_744-其他注意事项","7.4.4 其他注意事项",[170,125579,125580,125581,125583,125584,125587,125588,19897,125591,125594,125595,125597],{},"并非所有的USB设备端口号都是",[65,125582,125035],{},"的格式，比如Arduino的端口号可能是",[65,125585,125586],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[65,125589,125590],{},"videon",[65,125592,125593],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[65,125596,125590],{},"端口，绑定时需要关联的也是该接口。",[170,125599,125600,125601,125604,125605,125608,125609,125611,125612,125615,125616,125619,125620,125623,125624,125623,125627,125623,125630,29869],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[65,125602,125603],{},"KERNEL==\"ttyUSB*\"","修改为",[65,125606,125607],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[65,125610,125603],{},"修改为类似于",[65,125613,125614],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[65,125617,125618],{},"video[0,2,4,6]","表示可以绑定的端口为",[65,125621,125622],{},"video0","或",[65,125625,125626],{},"video2",[65,125628,125629],{},"video4",[65,125631,125632],{},"video6",[14,125634,125636],{"id":125635},"_75-挂载内网网页","7.5 挂载内网网页",[170,125638,125639],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[170,125641,125642],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[170,125644,125645],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[170,125647,125648,125649],{},"Termux 下载地址（F-Droid）：",[1867,125650,125651],{"href":125651,"rel":125652},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25350],[170,125654,125655],{},"首先打开app后，先更新软件缓存：",[58,125657,125659],{"className":118770,"code":125658,"language":118772,"meta":63,"style":63},"pkg update\n",[65,125660,125661],{"__ignoreMap":63},[68,125662,125663,125666],{"class":70,"line":71},[68,125664,125665],{"class":74},"pkg",[68,125667,27728],{"class":1742},[170,125669,125670],{},"然后换源",[58,125672,125674],{"className":118770,"code":125673,"language":118772,"meta":63,"style":63},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[65,125675,125676],{"__ignoreMap":63},[68,125677,125678,125680,125683],{"class":70,"line":71},[68,125679,124548],{"class":74},[68,125681,125682],{"class":78}," $PREFIX",[68,125684,125685],{"class":1742},"\u002Fetc\u002Fapt\u002Fsources.list\n",[170,125687,125688],{},"将该文件内容替换为下面：",[58,125690,125692],{"className":118770,"code":125691,"language":118772,"meta":63,"style":63},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[65,125693,125694],{"__ignoreMap":63},[68,125695,125696,125699,125702,125705],{"class":70,"line":71},[68,125697,125698],{"class":74},"deb",[68,125700,125701],{"class":1742}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[68,125703,125704],{"class":1742}," stable",[68,125706,125707],{"class":1742}," main\n",[24,125709,125710,125737],{},[27,125711,125712,125713,125715,125716],{},"如果你使用的是",[65,125714,124548],{},"编辑器：",[24,125717,125718,125725,125731],{},[27,125719,125720,125721,125724],{},"按 ",[65,125722,125723],{},"Ctrl+O"," 保存文件。",[27,125726,125720,125727,125730],{},[65,125728,125729],{},"Enter"," 确认文件名。",[27,125732,125720,125733,125736],{},[65,125734,125735],{},"Ctrl+X"," 退出编辑器。",[27,125738,125712,125739,125715,125742],{},[65,125740,125741],{},"vim",[24,125743,125744,125750],{},[27,125745,125720,125746,125749],{},[65,125747,125748],{},"Esc"," 退出编辑模式。",[27,125751,125752,125753,125755],{},"输入 ",[65,125754,120695],{}," 保存并退出。",[170,125757,125758],{},"接下来重新更新软件源：",[58,125760,125762],{"className":118770,"code":125761,"language":118772,"meta":63,"style":63},"pkg update && pkg upgrade\n",[65,125763,125764],{"__ignoreMap":63},[68,125765,125766,125768,125770,125772,125774],{"class":70,"line":71},[68,125767,125665],{"class":74},[68,125769,118821],{"class":1742},[68,125771,27676],{"class":78},[68,125773,125665],{"class":74},[68,125775,118807],{"class":1742},[170,125777,125778],{},"安装python：",[58,125780,125782],{"className":118770,"code":125781,"language":118772,"meta":63,"style":63},"pkg install python\n",[65,125783,125784],{"__ignoreMap":63},[68,125785,125786,125788,125790],{"class":70,"line":71},[68,125787,125665],{"class":74},[68,125789,25319],{"class":1742},[68,125791,125792],{"class":1742}," python\n",[170,125794,125795,27959],{},[268,125796,125797],{},"通过Termux访问设备存储",[170,125799,125800],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[58,125802,125804],{"className":118770,"code":125803,"language":118772,"meta":63,"style":63},"termux-setup-storage\n",[65,125805,125806],{"__ignoreMap":63},[68,125807,125808],{"class":70,"line":71},[68,125809,125803],{"class":74},[263,125811,125812],{},[27,125813,125814,27959,125817],{},[268,125815,125816],{},"进入HTML文件所在的目录",[263,125818,125819],{},[27,125820,125821,125822,125824],{},"使用",[65,125823,102751],{},"命令进入HTML文件所在的目录：",[58,125826,125828],{"className":118770,"code":125827,"language":118772,"meta":63,"style":63},"cd ~\u002Fyour_html_folder\n",[65,125829,125830],{"__ignoreMap":63},[68,125831,125832,125834],{"class":70,"line":71},[68,125833,102751],{"class":85},[68,125835,125836],{"class":1742}," ~\u002Fyour_html_folder\n",[263,125838,125839],{"start":82},[27,125840,125841,27959,125844,125849,125866],{},[268,125842,125843],{},"启动Python HTTP服务器",[263,125845,125846],{},[27,125847,125848],{},"运行以下命令启动一个简单的HTTP服务器：",[58,125850,125852],{"className":118770,"code":125851,"language":118772,"meta":63,"style":63},"python -m http.server 8000\n",[65,125853,125854],{"__ignoreMap":63},[68,125855,125856,125858,125860,125863],{"class":70,"line":71},[68,125857,31864],{"class":74},[68,125859,102357],{"class":85},[68,125861,125862],{"class":1742}," http.server",[68,125864,125865],{"class":85}," 8000\n",[263,125867,125868],{"start":98},[27,125869,125870,125871,125874],{},"这会在端口",[65,125872,125873],{},"8000","上启动一个Web服务器。",[24,125876,125877],{},[27,125878,125879],{},"启动服务器后，Termux会显示日志信息，例如：",[58,125881,125883],{"className":122290,"code":125882,"language":122292,"meta":122293,"style":63},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[65,125884,125885],{"__ignoreMap":63},[68,125886,125887],{"class":70,"line":71},[68,125888,125882],{},[24,125890,125891],{},[27,125892,125893],{},"这表示服务器已成功启动。",[170,125895,125896],{},[268,125897,125898],{},"在浏览器中访问HTML文件",[263,125900,125901],{},[27,125902,125903,27959,125906,125911],{},[268,125904,125905],{},"在同一设备上访问",[263,125907,125908],{},[27,125909,125910],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[58,125912,125915],{"className":125913,"code":125914,"language":73142,"meta":63,"style":63},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[65,125916,125917],{"__ignoreMap":63},[68,125918,125919,125922],{"class":70,"line":71},[68,125920,125921],{"class":78},"http:",[68,125923,125924],{"class":302},"\u002F\u002Flocalhost:8000\n",[24,125926,125927],{},[27,125928,125929,125930,125933],{},"如果HTML文件中有",[65,125931,125932],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125935,125937],{"id":125936},"_76-linux重点知识","7.6 Linux重点知识",[19,125939,125941],{"id":125940},"_761-关于点的说明","7.6.1 关于点的说明",[170,125943,125944],{},[801,125945],{"alt":63,"src":125946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[170,125948,125949],{},"一点本目录，两点上目录",[19,125951,125953],{"id":125952},"_762-目录","7.6.2 目录",[245,125955,125957],{"id":125956},"_7621-系统启动必须","7.6.2.1 系统启动必须",[170,125959,125960],{},[268,125961,125962],{},"\u002Fboot:",[170,125964,125965],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[170,125967,125968],{},[268,125969,125970],{},"\u002Fetc:",[170,125972,125973],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[170,125975,125976],{},[268,125977,125978],{},"\u002Flib：",[170,125980,125981],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[170,125983,125984],{},[268,125985,125986],{},"\u002Fsys:",[170,125988,125989],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[245,125991,125993],{"id":125992},"_7622-指令集合","7.6.2.2 指令集合",[170,125995,125996],{},[268,125997,125998],{},"\u002Fbin:",[170,126000,126001],{},"为二进制文件的缩写，存放最经常使用的命令",[170,126003,126004],{},[268,126005,126006],{},"\u002Fsbin:",[170,126008,126009],{},"只有系统管理员才能使用的程序和指令",[245,126011,126013],{"id":126012},"_7623-外部文件管理","7.6.2.3 外部文件管理",[170,126015,126016],{},[268,126017,126018],{},"\u002Fdev:",[170,126020,126021],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[170,126023,126024],{},[268,126025,126026],{},"\u002Fmedia:",[170,126028,126029],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[170,126031,126032],{},[268,126033,126034],{},"\u002Fmnt:",[170,126036,126037],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[245,126039,126041],{"id":126040},"_7624-临时文件","7.6.2.4 临时文件",[170,126043,126044],{},[268,126045,126046],{},"\u002Frun:",[170,126048,126049],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[170,126051,126052],{},[268,126053,126054],{},"\u002Flost+found:",[170,126056,126057],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[170,126059,126060],{},[268,126061,126062],{},"\u002Ftmp:",[170,126064,126065],{},"这个目录是用来存放一些临时文件的",[245,126067,126069],{"id":126068},"_7625-账户","7.6.2.5 账户",[170,126071,126072],{},[268,126073,126074],{},"\u002Froot：",[170,126076,126077],{},"系统管理员的用户主目录",[170,126079,126080,27959],{},[268,126081,126082],{},"\u002Fhome",[170,126084,126085],{},"用户的主目录，以用户的账号命名的",[170,126087,126088,27959],{},[268,126089,126090],{},"\u002Fusr",[170,126092,126093],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[170,126095,126096],{},[268,126097,126098],{},"\u002Fusr\u002Fbin：",[170,126100,126101],{},"系统用户使用的应用程序与指令",[170,126103,126104],{},[268,126105,126106],{},"\u002Fusr\u002Fsbin：",[170,126108,126109],{},"超级用户使用的比较高级的管理程序和系统守护程序",[170,126111,126112],{},[268,126113,126114],{},"\u002Fusr\u002Fsrc：",[170,126116,126117],{},"内核源代码默认的放置目录",[245,126119,126121],{"id":126120},"_7626-运行过程要用","7.6.2.6 运行过程要用",[170,126123,126124],{},[268,126125,126126],{},"\u002Fvar：",[170,126128,126129],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[170,126131,126132],{},[268,126133,126134],{},"\u002Fproc:",[170,126136,126137,126138,126141],{},"管理 ",[268,126139,126140],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[245,126143,126145],{"id":126144},"_7627-扩展用的","7.6.2.7 扩展用的",[170,126147,126148],{},[268,126149,126150],{},"\u002Fopt:",[170,126152,126153],{},"默认是空的，我们安装额外软件可以放在这个里面",[170,126155,126156],{},[268,126157,126158],{},"\u002Fsrv:",[170,126160,126161],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,126163,126165],{"id":126164},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[170,126167,126168],{},[801,126169],{"alt":63,"src":126170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[170,126172,126173],{},"windows-->linux:",[170,126175,126176],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[170,126178,126179],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[170,126181,126182],{},"linux传输文件到windows",[170,126184,126185],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,126187,126189],{"id":126188},"_764-易忘知识","7.6.4 易忘知识",[170,126191,126192],{},"操作系统内核查看",[58,126194,126195],{"className":118770,"code":122764,"language":118772,"meta":63,"style":63},[65,126196,126197],{"__ignoreMap":63},[68,126198,126199,126201],{"class":70,"line":71},[68,126200,71682],{"class":74},[68,126202,122773],{"class":85},[170,126204,126205],{},[801,126206],{"alt":63,"src":126207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[170,126209,126210],{},[801,126211],{"alt":63,"src":126212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[58,126214,126216],{"className":118770,"code":126215,"language":118772,"meta":63,"style":63},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[65,126217,126218,126230],{"__ignoreMap":63},[68,126219,126220,126222,126225,126228],{"class":70,"line":71},[68,126221,122981],{"class":74},[68,126223,126224],{"class":1742}," mvtest",[68,126226,126227],{"class":1742}," mvtest2",[68,126229,4164],{"class":78},[68,126231,126232],{"class":70,"line":82},[68,126233,126234],{"class":74},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[170,126236,126237],{},[801,126238],{"alt":63,"src":126239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[170,126241,126242],{},[801,126243],{"alt":63,"src":126244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[170,126246,126247,126248,126251],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[65,126249,126250],{},"du -a"," 可以快速查看磁盘使用细节。",[19,126253,126255],{"id":126254},"_765-vim","7.6.5 Vim",[170,126257,126258],{},[801,126259],{"alt":63,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[170,126262,126263],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[170,126265,126266],{},"一开始进去为命令模式，此时点击输入的字母为命令",[170,126268,126269],{},[268,126270,126271],{},"1.命令模式：",[170,126273,126274],{},"i 切换到输入模式，在光标当前位置开始输入文本",[170,126276,126277],{},"x 删除当前光标所在处的字符",[170,126279,126280],{},"：切换到底线命令模式，以在最底一行输入命令",[170,126282,126283],{},"a 进行插入模式，在光标下一个位置输入文本",[170,126285,126286],{},"o 在当前的下方插入一个新行，并进入插入模式",[170,126288,126289],{},"0 在当前行的上方插入一个新行，并进入插入模式",[170,126291,126292],{},"dd 剪切当前行",[170,126294,126295],{},"yy 复制当前行",[170,126297,126298],{},"p 粘贴剪贴板内容到光标下方",[170,126300,126301],{},"P 粘贴剪贴板内容到光标上方",[170,126303,126304],{},"u 撤销上一次操作",[170,126306,126307],{},"ctrl+r 重做上一次操作",[170,126309,126310,126312],{},[2422,126311],{}," 保存文件",[170,126314,126315,126317],{},[2273,126316],{}," 退出Vim编辑器",[170,126319,126320,126322],{},[2273,126321],{},"! 强制退出Vim编辑器，不保存修改",[170,126324,126325],{},[268,126326,126327],{},"2.输入模式：",[170,126329,126330],{},[801,126331],{"alt":63,"src":126332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[170,126334,126335],{},[268,126336,126337],{},"3.底线命令模式：",[170,126339,126340],{},[801,126341],{"alt":63,"src":126342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[170,126344,126345],{},"按下esc可以退出底线命令模式",[19,126347,126349],{"id":126348},"_766-apt","7.6.6 apt",[170,126351,126352],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,126354,126356],{"id":126355},"_767-home与root的区别","7.6.7 home与root的区别",[170,126358,126359],{},[801,126360],{"alt":63,"src":126361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[170,126363,126364],{},[801,126365],{"alt":63,"src":126366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[170,126368,126369],{},[801,126370],{"alt":63,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[170,126373,126374],{},[801,126375],{"alt":63,"src":126376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,126378,126380],{"id":126379},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[170,126382,126383],{},[1867,126384,126385],{"href":126385,"rel":126386},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25350],[263,126388,126389,126392],{},[27,126390,126391],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[27,126393,126394],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[170,126396,126397],{},[801,126398],{"alt":63,"src":126399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[170,126401,126402],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[170,126404,126405],{},[801,126406],{"alt":63,"src":126407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[58,126409,126411],{"className":122290,"code":126410,"language":122292,"meta":122293,"style":63},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[65,126412,126413,126418],{"__ignoreMap":63},[68,126414,126415],{"class":70,"line":71},[68,126416,126417],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[68,126419,126420],{"class":70,"line":82},[68,126421,126422],{},".\u002Fpycharm.sh\n",[170,126424,126425],{},"3️⃣创建.desktop文件",[170,126427,126428],{},[268,126429,126430],{},"原理：",[24,126432,126433,126443],{},[27,126434,126435,126436,126442],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[268,126437,126438,126441],{},[65,126439,126440],{},".desktop"," 文件"," 来识别应用。",[27,126444,126445,126447,126448],{},[65,126446,126440],{}," 文件相当于一个“应用注册表”，告诉系统：",[24,126449,126450,126453,126456,126459,126462],{},[27,126451,126452],{},"应用名字（Name）",[27,126454,126455],{},"图标（Icon）",[27,126457,126458],{},"执行命令（Exec）",[27,126460,126461],{},"分类（Categories）",[27,126463,126464],{},"是否需要终端（Terminal）",[58,126466,126468],{"className":122290,"code":126467,"language":122292,"meta":122293,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[65,126469,126470,126475],{"__ignoreMap":63},[68,126471,126472],{"class":70,"line":71},[68,126473,126474],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[68,126476,126477],{"class":70,"line":82},[68,126478,126479],{},"nano pycharm.desktop\n",[170,126481,126482],{},"nano是一个命令行下的编辑器，也可以使用vim",[58,126484,126486],{"className":122290,"code":126485,"language":122292,"meta":122293,"style":63},"[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",[65,126487,126488,126493,126498,126503,126508,126513,126518,126523,126528,126533],{"__ignoreMap":63},[68,126489,126490],{"class":70,"line":71},[68,126491,126492],{},"[Desktop Entry]\n",[68,126494,126495],{"class":70,"line":82},[68,126496,126497],{},"Version=1.0\n",[68,126499,126500],{"class":70,"line":98},[68,126501,126502],{},"Type=Application\n",[68,126504,126505],{"class":70,"line":104},[68,126506,126507],{},"Name=PyCharm\n",[68,126509,126510],{"class":70,"line":112},[68,126511,126512],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[68,126514,126515],{"class":70,"line":124},[68,126516,126517],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[68,126519,126520],{"class":70,"line":1496},[68,126521,126522],{},"Comment=JetBrains PyCharm IDE\n",[68,126524,126525],{"class":70,"line":1502},[68,126526,126527],{},"Categories=Development;IDE;\n",[68,126529,126530],{"class":70,"line":1510},[68,126531,126532],{},"Terminal=false\n",[68,126534,126535],{"class":70,"line":1521},[68,126536,126537],{},"StartupWMClass=jetbrains-pycharm\n",[24,126539,126540,126546,126552,126558],{},[27,126541,126542,126545],{},[65,126543,126544],{},"Exec"," → 点击图标时执行的命令",[27,126547,126548,126551],{},[65,126549,126550],{},"Icon"," → 显示在菜单和桌面上的图标",[27,126553,126554,126557],{},[65,126555,126556],{},"Terminal=false"," → 不打开终端",[27,126559,126560,126563],{},[65,126561,126562],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126565,126566,126567],"blockquote",{},[170,126568,126569,126570,126572,126573],{},"可以理解成 ",[65,126571,126440],{}," 文件是 Linux 的 ",[268,126574,126575],{},"快捷方式配置文件",[170,126577,126578],{},"4️⃣设置可执行权限",[58,126580,126582],{"className":122290,"code":126581,"language":122292,"meta":122293,"style":63},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[65,126583,126584],{"__ignoreMap":63},[68,126585,126586],{"class":70,"line":71},[68,126587,126581],{},[170,126589,126590],{},"5️⃣桌面图标启动的话如下：",[58,126592,126594],{"className":122290,"code":126593,"language":122292,"meta":122293,"style":63},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[65,126595,126596,126601],{"__ignoreMap":63},[68,126597,126598],{"class":70,"line":71},[68,126599,126600],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[68,126602,126603],{"class":70,"line":82},[68,126604,126605],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[263,126607,126608],{"start":98},[27,126609,126610],{},"下载Appimage文件实现软件的安装",[170,126612,126613],{},"1️⃣先下载appimage",[170,126615,126616],{},[1867,126617,126618],{"href":126618,"rel":126619},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25350],[170,126621,126622],{},[801,126623],{"alt":63,"src":126624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[170,126626,126627],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[170,126629,126630],{},[801,126631],{"alt":63,"src":126632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[170,126634,126635],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[170,126637,126638],{},[801,126639],{"alt":63,"src":126640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[170,126642,126643],{},[801,126644],{"alt":63,"src":126645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[170,126647,126648,126649,126652],{},"3️⃣给他们放在",[65,126650,126651],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[170,126654,126655],{},"4️⃣给软件执行权限",[58,126657,126659],{"className":122290,"code":126658,"language":122292,"meta":122293,"style":63},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[65,126660,126661,126666],{"__ignoreMap":63},[68,126662,126663],{"class":70,"line":71},[68,126664,126665],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[68,126667,126668],{"class":70,"line":82},[68,126669,126670],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[170,126672,126673],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[58,126675,126677],{"className":118770,"code":126676,"language":118772,"meta":63,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[65,126678,126679,126686,126693,126699],{"__ignoreMap":63},[68,126680,126681,126683],{"class":70,"line":71},[68,126682,102751],{"class":85},[68,126684,126685],{"class":1742}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[68,126687,126688,126690],{"class":70,"line":82},[68,126689,102758],{"class":74},[68,126691,126692],{"class":1742}," .\u002Fqqmusic.desktop\n",[68,126694,126695,126697],{"class":70,"line":98},[68,126696,125741],{"class":74},[68,126698,126692],{"class":1742},[68,126700,126701,126703,126705,126707],{"class":70,"line":104},[68,126702,26062],{"class":74},[68,126704,26065],{"class":1742},[68,126706,124607],{"class":1742},[68,126708,126692],{"class":1742},[170,126710,126711,126713],{},[65,126712,102758],{},"：一个 Linux 命令，主要功能是：",[24,126715,126716,126719],{},[27,126717,126718],{},"如果文件不存在，就创建一个新的空文件",[27,126720,126721],{},"如果文件已存在，就更新该文件的最后修改时间",[58,126723,126725],{"className":122290,"code":126724,"language":122292,"meta":122293,"style":63},"[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",[65,126726,126727,126731,126736,126741,126746,126750,126755],{"__ignoreMap":63},[68,126728,126729],{"class":70,"line":71},[68,126730,126492],{},[68,126732,126733],{"class":70,"line":82},[68,126734,126735],{},"Name=QQ音乐\n",[68,126737,126738],{"class":70,"line":98},[68,126739,126740],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[68,126742,126743],{"class":70,"line":104},[68,126744,126745],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[68,126747,126748],{"class":70,"line":112},[68,126749,126502],{},[68,126751,126752],{"class":70,"line":124},[68,126753,126754],{},"Categories=Audio;Music;Player;\n",[68,126756,126757],{"class":70,"line":1496},[68,126758,126759],{},"Comment=QQ Music Client for Linux\n",[170,126761,126762],{},"将文件复制进去",[170,126764,126765],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[170,126767,126768],{},[801,126769],{"alt":63,"src":126770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[170,126772,126773],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[170,126775,126776],{},[801,126777],{"alt":63,"src":126778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[170,126780,126781,126782,126785,126786,126789],{},"如果你用的不是KDE，那么也可以直接修改",[65,126783,126784],{},"qqmuic.desktop","：在exec的末尾加上",[65,126787,126788],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[58,126791,126793],{"className":122290,"code":126792,"language":122292,"meta":122293,"style":63},"[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",[65,126794,126795,126799,126803,126808,126812,126816,126820],{"__ignoreMap":63},[68,126796,126797],{"class":70,"line":71},[68,126798,126492],{},[68,126800,126801],{"class":70,"line":82},[68,126802,126735],{},[68,126804,126805],{"class":70,"line":98},[68,126806,126807],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[68,126809,126810],{"class":70,"line":104},[68,126811,126745],{},[68,126813,126814],{"class":70,"line":112},[68,126815,126502],{},[68,126817,126818],{"class":70,"line":124},[68,126819,126754],{},[68,126821,126822],{"class":70,"line":1496},[68,126823,126759],{},[170,126825,126826],{},[801,126827],{"alt":63,"src":126828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[170,126830,126831],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[58,126833,126835],{"className":122290,"code":126834,"language":122292,"meta":122293,"style":63},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[65,126836,126837],{"__ignoreMap":63},[68,126838,126839],{"class":70,"line":71},[68,126840,126834],{},[263,126842,126843],{"start":104},[27,126844,126845],{},"去Flathub上安装软件",[170,126847,126848],{},[1867,126849,126850],{"href":126850,"rel":126851},"https:\u002F\u002Fflathub.org\u002F",[25350],[170,126853,126854],{},"1️⃣去上面的官网搜索软件+下载软件",[170,126856,126857],{},[801,126858],{"alt":63,"src":126859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[58,126861,126863],{"className":122290,"code":126862,"language":122292,"meta":122293,"style":63},"flatpak install flathub com.obsproject.Studio\n",[65,126864,126865],{"__ignoreMap":63},[68,126866,126867],{"class":70,"line":71},[68,126868,126862],{},[170,126870,126871],{},[801,126872],{"alt":63,"src":126873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[170,126875,126876],{},"2️⃣运行软件",[170,126878,126879],{},"a.官方方式：",[170,126881,126882],{},[801,126883],{"alt":63,"src":126884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[58,126886,126887],{"className":122290,"code":126862,"language":122292,"meta":122293,"style":63},[65,126888,126889],{"__ignoreMap":63},[68,126890,126891],{"class":70,"line":71},[68,126892,126862],{},[170,126894,126895],{},"b.当普通软件运行：",[170,126897,126898],{},[801,126899],{"alt":63,"src":126900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[170,126902,126903],{},[801,126904],{"alt":63,"src":126905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1553,126907,126908],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":63,"searchDepth":82,"depth":82,"links":126910},[126911,126912,126917,126918,126924,126925],{"id":123643,"depth":82,"text":123644},{"id":123985,"depth":82,"text":123986,"children":126913},[126914,126915,126916],{"id":123989,"depth":98,"text":123990},{"id":124056,"depth":98,"text":124057},{"id":124317,"depth":98,"text":124318},{"id":124470,"depth":82,"text":124471},{"id":124708,"depth":82,"text":124709,"children":126919},[126920,126921,126922,126923],{"id":124760,"depth":98,"text":124761},{"id":125046,"depth":98,"text":125047},{"id":125317,"depth":98,"text":125318},{"id":125576,"depth":98,"text":125577},{"id":125635,"depth":82,"text":125636},{"id":125936,"depth":82,"text":125937,"children":126926},[126927,126928,126929,126930,126931,126932,126933,126934],{"id":125940,"depth":98,"text":125941},{"id":125952,"depth":98,"text":125953},{"id":126164,"depth":98,"text":126165},{"id":126188,"depth":98,"text":126189},{"id":126254,"depth":98,"text":126255},{"id":126348,"depth":98,"text":126349},{"id":126355,"depth":98,"text":126356},{"id":126379,"depth":98,"text":126380},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123635,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126941,"title":126942,"body":126943,"description":1564,"extension":1565,"meta":126947,"navigation":1567,"path":126948,"seo":126949,"stem":126950,"__hash__":126951},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126944,"toc":126945},[],{"title":63,"searchDepth":82,"depth":82,"links":126946},[],{"category":31747},"\u002Fwiki\u002F2025-01-27-linux",{"title":126942,"description":1564},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126953,"title":126954,"body":126955,"description":126959,"extension":1565,"meta":127350,"navigation":1567,"path":127351,"seo":127352,"stem":127353,"__hash__":127354},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126956,"toc":127348},[126957,126960,126964,126981,126984,127037,127041,127043,127083,127092,127096,127099,127340,127345],[170,126958,126959],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126961,126963],{"id":126962},"_1ubuntu环境配置","1.Ubuntu环境配置",[263,126965,126966,126969,126972,126975,126978],{},[27,126967,126968],{},"ubuntu环境换源",[27,126970,126971],{},"安装cuda",[27,126973,126974],{},"安装miniconda",[27,126976,126977],{},"安装pytorch",[27,126979,126980],{},"安装genesis",[170,126982,126983],{},"参考链接：",[58,126985,126987],{"className":25307,"code":126986,"language":25309,"meta":63,"style":63},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[65,126988,126989],{"__ignoreMap":63},[68,126990,126991,126994,126997,127000,127002,127005,127008,127010,127013,127016,127018,127021,127024,127026,127029,127032,127034],{"class":70,"line":71},[68,126992,126993],{"class":74},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[68,126995,126996],{"class":1742},"=blogdetail",[68,126998,126999],{"class":78},"&sharetype",[68,127001,1685],{"class":316},[68,127003,127004],{"class":1742},"blogdetail",[68,127006,127007],{"class":78},"&sharerId",[68,127009,1685],{"class":316},[68,127011,127012],{"class":1742},"144728092",[68,127014,127015],{"class":78},"&sharerefer",[68,127017,1685],{"class":316},[68,127019,127020],{"class":1742},"PC",[68,127022,127023],{"class":78},"&sharesource",[68,127025,1685],{"class":316},[68,127027,127028],{"class":1742},"qq_69379513",[68,127030,127031],{"class":78},"&sharefrom",[68,127033,1685],{"class":316},[68,127035,127036],{"class":1742},"from_link\n",[10,127038,127040],{"id":127039},"_2genesis-报错issue","2.Genesis 报错issue",[170,127042,126983],{},[58,127044,127045],{"className":25307,"code":126986,"language":25309,"meta":63,"style":63},[65,127046,127047],{"__ignoreMap":63},[68,127048,127049,127051,127053,127055,127057,127059,127061,127063,127065,127067,127069,127071,127073,127075,127077,127079,127081],{"class":70,"line":71},[68,127050,126993],{"class":74},[68,127052,126996],{"class":1742},[68,127054,126999],{"class":78},[68,127056,1685],{"class":316},[68,127058,127004],{"class":1742},[68,127060,127007],{"class":78},[68,127062,1685],{"class":316},[68,127064,127012],{"class":1742},[68,127066,127015],{"class":78},[68,127068,1685],{"class":316},[68,127070,127020],{"class":1742},[68,127072,127023],{"class":78},[68,127074,1685],{"class":316},[68,127076,127028],{"class":1742},[68,127078,127031],{"class":78},[68,127080,1685],{"class":316},[68,127082,127036],{"class":1742},[58,127084,127086],{"className":25307,"code":127085,"language":25309,"meta":63,"style":63},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[65,127087,127088],{"__ignoreMap":63},[68,127089,127090],{"class":70,"line":71},[68,127091,127085],{"class":74},[10,127093,127095],{"id":127094},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[170,127097,127098],{},"hello_robot.py",[58,127100,127102],{"className":31862,"code":127101,"language":31864,"meta":63,"style":63},"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",[65,127103,127104,127110,127125,127129,127141,127153,127157,127170,127174,127193,127203,127213,127227,127231,127235,127240,127244,127254,127261,127275,127282,127292,127297,127301,127319,127324,127328,127335],{"__ignoreMap":63},[68,127105,127106,127108],{"class":70,"line":71},[68,127107,31876],{"class":316},[68,127109,46789],{"class":78},[68,127111,127112,127115,127118,127120,127122],{"class":70,"line":82},[68,127113,127114],{"class":78},"os.environ[",[68,127116,127117],{"class":1742},"'PYOPENGL_PLATFORM'",[68,127119,5933],{"class":78},[68,127121,1685],{"class":316},[68,127123,127124],{"class":1742}," 'glx'\n",[68,127126,127127],{"class":70,"line":98},[68,127128,3890],{"emptyLinePlaceholder":1567},[68,127130,127131,127133,127136,127138],{"class":70,"line":104},[68,127132,31876],{"class":316},[68,127134,127135],{"class":78}," genesis ",[68,127137,32867],{"class":316},[68,127139,127140],{"class":78}," gs\n",[68,127142,127143,127145,127148,127150],{"class":70,"line":112},[68,127144,32221],{"class":316},[68,127146,127147],{"class":78}," pynput ",[68,127149,31876],{"class":316},[68,127151,127152],{"class":78}," keyboard\n",[68,127154,127155],{"class":70,"line":124},[68,127156,3890],{"emptyLinePlaceholder":1567},[68,127158,127159,127162,127165,127167],{"class":70,"line":1496},[68,127160,127161],{"class":78},"gs.init(",[68,127163,127164],{"class":6705},"backend",[68,127166,1685],{"class":316},[68,127168,127169],{"class":78},"gs.gpu)\n",[68,127171,127172],{"class":70,"line":1502},[68,127173,3890],{"emptyLinePlaceholder":1567},[68,127175,127176,127179,127181,127184,127187,127189,127191],{"class":70,"line":1510},[68,127177,127178],{"class":78},"scene ",[68,127180,1685],{"class":316},[68,127182,127183],{"class":78}," gs.Scene(",[68,127185,127186],{"class":6705},"show_viewer",[68,127188,1685],{"class":316},[68,127190,32960],{"class":85},[68,127192,1646],{"class":78},[68,127194,127195,127198,127200],{"class":70,"line":1521},[68,127196,127197],{"class":78},"plane ",[68,127199,1685],{"class":316},[68,127201,127202],{"class":78}," scene.add_entity(gs.morphs.Plane())\n",[68,127204,127205,127208,127210],{"class":70,"line":3103},[68,127206,127207],{"class":78},"franka ",[68,127209,1685],{"class":316},[68,127211,127212],{"class":78}," scene.add_entity(\n",[68,127214,127215,127218,127220,127222,127225],{"class":70,"line":3108},[68,127216,127217],{"class":78},"    gs.morphs.MJCF(",[68,127219,46838],{"class":6705},[68,127221,1685],{"class":316},[68,127223,127224],{"class":1742},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[68,127226,39531],{"class":78},[68,127228,127229],{"class":70,"line":3114},[68,127230,1646],{"class":78},[68,127232,127233],{"class":70,"line":3119},[68,127234,3890],{"emptyLinePlaceholder":1567},[68,127236,127237],{"class":70,"line":3133},[68,127238,127239],{"class":78},"scene.build()\n",[68,127241,127242],{"class":70,"line":3138},[68,127243,3890],{"emptyLinePlaceholder":1567},[68,127245,127246,127248,127251],{"class":70,"line":3144},[68,127247,33431],{"class":316},[68,127249,127250],{"class":74}," on_press",[68,127252,127253],{"class":78},"(key):\n",[68,127255,127256,127259],{"class":70,"line":3165},[68,127257,127258],{"class":316},"    try",[68,127260,5229],{"class":78},[68,127262,127263,127265,127268,127270,127273],{"class":70,"line":3170},[68,127264,3987],{"class":316},[68,127266,127267],{"class":78}," key.char ",[68,127269,4439],{"class":316},[68,127271,127272],{"class":1742}," 'q'",[68,127274,5229],{"class":78},[68,127276,127277,127279],{"class":70,"line":3184},[68,127278,17219],{"class":316},[68,127280,127281],{"class":85}," False\n",[68,127283,127284,127287,127290],{"class":70,"line":3189},[68,127285,127286],{"class":316},"    except",[68,127288,127289],{"class":85}," AttributeError",[68,127291,5229],{"class":78},[68,127293,127294],{"class":70,"line":3218},[68,127295,127296],{"class":316},"        pass\n",[68,127298,127299],{"class":70,"line":3223},[68,127300,3890],{"emptyLinePlaceholder":1567},[68,127302,127303,127306,127308,127311,127314,127316],{"class":70,"line":3240},[68,127304,127305],{"class":78},"listener ",[68,127307,1685],{"class":316},[68,127309,127310],{"class":78}," keyboard.Listener(",[68,127312,127313],{"class":6705},"on_press",[68,127315,1685],{"class":316},[68,127317,127318],{"class":78},"on_press)\n",[68,127320,127321],{"class":70,"line":3245},[68,127322,127323],{"class":78},"listener.start()\n",[68,127325,127326],{"class":70,"line":3250},[68,127327,3890],{"emptyLinePlaceholder":1567},[68,127329,127330,127332],{"class":70,"line":3255},[68,127331,110137],{"class":316},[68,127333,127334],{"class":78}," listener.running:\n",[68,127336,127337],{"class":70,"line":3269},[68,127338,127339],{"class":78},"    scene.step()\n",[170,127341,127342],{},[801,127343],{"alt":63,"src":127344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1553,127346,127347],{},"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":63,"searchDepth":82,"depth":82,"links":127349},[],{"category":24864},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126954,"description":126959},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127356,"title":127357,"body":127358,"description":1564,"extension":1565,"meta":127373,"navigation":1567,"path":127374,"seo":127375,"stem":127376,"__hash__":127377},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127359,"toc":127370},[127360,127363,127367],[10,127361,127357],{"id":127362},"_1-基础知识",[14,127364,127366],{"id":127365},"_11-js的组成","1.1 js的组成",[170,127368,127369],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":63,"searchDepth":82,"depth":82,"links":127371},[127372],{"id":127365,"depth":82,"text":127366},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127357,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127379,"title":127380,"body":127381,"description":1564,"extension":1565,"meta":127520,"navigation":1567,"path":127521,"seo":127522,"stem":127523,"__hash__":127524},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127382,"toc":127508},[127383,127386,127390,127393,127397,127407,127411,127414,127417,127420,127424,127431,127437,127441,127447,127458,127462,127465,127469,127472,127476,127479,127483,127486,127490,127493,127496,127499,127502,127505],[10,127384,127380],{"id":127385},"_2-vscode必备内容",[14,127387,127389],{"id":127388},"_21-标签分类","2.1 标签分类",[170,127391,127392],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127394,127396],{"id":127395},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[170,127398,127399,127400,127402,127403,127406],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[65,127401,1855],{}," 然后按 ",[65,127404,127405],{},"Tab","，快速自动生成基本结构。",[14,127408,127410],{"id":127409},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[170,127412,127413],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[170,127415,127416],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[170,127418,127419],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127421,127423],{"id":127422},"_24-视图缩放","2.4 视图缩放",[170,127425,127426,127427,127430],{},"缩放视图 ",[65,127428,127429],{},"ctrl+"," 可实现代码增大。",[170,127432,127433,127436],{},[65,127434,127435],{},"ctrl-"," 可实现代码减小。",[14,127438,127440],{"id":127439},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[170,127442,127443,127444,29869],{},"VSCode 新建文件快捷键为 ",[65,127445,127446],{},"ctrl+N",[170,127448,127449,127450,127453,127454,127457],{},"保存快捷键为 ",[65,127451,127452],{},"ctrl+S","，将文本保存为 ",[65,127455,127456],{},".html"," 文件。",[14,127459,127461],{"id":127460},"_26-auto-rename-tag","2.6 Auto Rename Tag",[170,127463,127464],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127466,127468],{"id":127467},"_27-vscode-icons","2.7 vscode-icons",[170,127470,127471],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127473,127475],{"id":127474},"_28-easy-less","2.8 Easy LESS",[170,127477,127478],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127480,127482],{"id":127481},"_29-会了吧插件","2.9 会了吧插件",[170,127484,127485],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127487,127489],{"id":127488},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[170,127491,127492],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[170,127494,127495],{},"②选定多个相同的单词:ctrl+D",[170,127497,127498],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[170,127500,127501],{},"④全局替换某些单词:ctrl+h",[170,127503,127504],{},"⑤快速定位到某一行:ctrl+g",[170,127506,127507],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":63,"searchDepth":82,"depth":82,"links":127509},[127510,127511,127512,127513,127514,127515,127516,127517,127518,127519],{"id":127388,"depth":82,"text":127389},{"id":127395,"depth":82,"text":127396},{"id":127409,"depth":82,"text":127410},{"id":127422,"depth":82,"text":127423},{"id":127439,"depth":82,"text":127440},{"id":127460,"depth":82,"text":127461},{"id":127467,"depth":82,"text":127468},{"id":127474,"depth":82,"text":127475},{"id":127481,"depth":82,"text":127482},{"id":127488,"depth":82,"text":127489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127380,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127526,"title":127527,"body":127528,"description":1564,"extension":1565,"meta":127687,"navigation":1567,"path":127688,"seo":127689,"stem":127690,"__hash__":127691},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127529,"toc":127679},[127530,127533,127537,127547,127553,127559,127563,127572,127576,127581,127584,127587,127591,127594,127604,127613,127622,127631,127641,127648,127653,127658,127671],[10,127531,127527],{"id":127532},"_3-html文本与容器标签",[14,127534,127536],{"id":127535},"_31-标题标签","3.1 标题标签",[170,127538,127539,127542,127543,127546],{},[65,127540,127541],{},"\u003Ch1>","我是一级标签",[65,127544,127545],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[170,127548,127549,127542,127551],{},[65,127550,127541],{},[65,127552,127545],{},[170,127554,124809,127555,127558],{},[65,127556,127557],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127560,127562],{"id":127561},"_32-段落标签","3.2 段落标签",[170,127564,127565,127568,127569],{},[65,127566,127567],{},"\u003Cp>","....",[65,127570,127571],{},"\u003C\u002Fp>",[14,127573,127575],{"id":127574},"_33-换行标签","3.3 换行标签",[170,127577,127578],{},[65,127579,127580],{},"\u003Cbr \u002F>",[170,127582,127583],{},"具有强制换行的作用",[170,127585,127586],{},"单标签",[14,127588,127590],{"id":127589},"_34-文本格式化标签","3.4 文本格式化标签",[170,127592,127593],{},"提供粗体、斜体和下划线等效果",[170,127595,127596,127597,1245,127600,127603],{},"加粗：",[65,127598,127599],{},"\u003Cstrong>...\u003C\u002Fstrong>",[65,127601,127602],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[170,127605,127606,127607,1245,127610,127603],{},"斜体：",[65,127608,127609],{},"\u003Cem>...\u003C\u002Fem>",[65,127611,127612],{},"\u003Ci>...\u003C\u002Fi>",[170,127614,127615,127616,1245,127619,127603],{},"删除线：",[65,127617,127618],{},"\u003Cdel>...\u003C\u002Fdel>",[65,127620,127621],{},"\u003Cs>...\u003C\u002Fs>",[170,127623,127624,127625,1245,127628,127603],{},"下划线：",[65,127626,127627],{},"\u003Cins>...\u003C\u002Fins>",[65,127629,127630],{},"\u003Cu>...\u003C\u002Fu>",[14,127632,127634,127635,19897,127638,104168],{"id":127633},"_35-div和span标签","3.5 ",[65,127636,127637],{},"\u003Cdiv>",[65,127639,127640],{},"\u003Cspan>",[170,127642,127643,102493,127645,127647],{},[65,127644,127637],{},[65,127646,127640],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[170,127649,127650],{},[65,127651,127652],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[170,127654,127655],{},[65,127656,127657],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[170,127659,127660,127661,127663,127664,127666,127667,127670],{},"两者特点：①",[65,127662,127637],{}," 标签用来布局，但一行通常只放一个 ",[65,127665,127637],{},"。可以理解为一个大盒子，独占一行，在 ",[65,127668,127669],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[170,127672,78726,127673,127675,127676,127678],{},[65,127674,127640],{}," 标签也可用于布局，一行可以放多个 ",[65,127677,127640],{},"，可理解为小盒子。",{"title":63,"searchDepth":82,"depth":82,"links":127680},[127681,127682,127683,127684,127685],{"id":127535,"depth":82,"text":127536},{"id":127561,"depth":82,"text":127562},{"id":127574,"depth":82,"text":127575},{"id":127589,"depth":82,"text":127590},{"id":127633,"depth":82,"text":127686},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127527,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127693,"title":127694,"body":127695,"description":1564,"extension":1565,"meta":127891,"navigation":1567,"path":127892,"seo":127893,"stem":127894,"__hash__":127895},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127696,"toc":127883},[127697,127700,127704,127707,127713,127720,127726,127732,127735,127738,127741,127744,127747,127750,127753,127757,127760,127763,127766,127772,127778,127784,127791,127795,127801,127807,127810,127813,127819,127825,127831,127834,127837,127841,127844,127854,127860,127864,127873,127877,127880],[10,127698,127694],{"id":127699},"_4-html图像与链接",[14,127701,127703],{"id":127702},"_41-图像标签","4.1 图像标签",[170,127705,127706],{},"（1）标签",[170,127708,127709,127712],{},[65,127710,127711],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[170,127714,127715,127716,127719],{},"src是",[65,127717,127718],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[170,127721,127722,127723],{},"alt:文本，替换文本。图像不能显示的文字 ",[65,127724,127725],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[170,127727,127728,127729],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[65,127730,127731],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[170,127733,127734],{},"width:像素，设置图像的宽度",[170,127736,127737],{},"height:像素，设置图像的高度",[170,127739,127740],{},"border：像素，设置图像的边框粗细",[170,127742,127743],{},"（2）图像标签属性的注意点：",[170,127745,127746],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[170,127748,127749],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[170,127751,127752],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127754,127756],{"id":127755},"_42-路径注意要点","4.2 路径注意要点：",[170,127758,127759],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[170,127761,127762],{},"（2）根目录：就是打开文件夹的第一层根目录",[170,127764,127765],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[170,127767,127768,127769],{},"①同一级路径：图像文件位于HTML文件同一级，如",[65,127770,127771],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[170,127773,127774,127775],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[65,127776,127777],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[170,127779,127780,127781],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[65,127782,127783],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[170,127785,127786,127787,1880],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1867,127788,127789],{"href":127789,"rel":127790},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25350],[14,127792,127794],{"id":127793},"_43-超链接标签","4.3 超链接标签",[170,127796,127797,127800],{},[65,127798,127799],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[170,127802,127803,127804],{},"①语法格式：",[65,127805,127806],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[170,127808,127809],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[170,127811,127812],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[170,127814,127815,127816],{},"③链接分类：外部链接：",[65,127817,127818],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[170,127820,127821,127822],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[65,127823,127824],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[170,127826,127827,127828],{},"空链接：如果当时没有确定链接目标时，",[65,127829,127830],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[170,127832,127833],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[170,127835,127836],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127838,127840],{"id":127839},"_44-锚点链接","4.4 锚点链接",[170,127842,127843],{},"点我们点击链接，可以快速定位到页面中的某个位置",[170,127845,127846,127847,127850,127851],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[65,127848,127849],{},"\u003Ca href=\"#two\">","第二级",[65,127852,127853],{},"\u003C\u002Fa>",[170,127855,127856,127857],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[65,127858,127859],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127861,127863],{"id":127862},"_45-注释标签","4.5 注释标签",[170,127865,127866,127869,127870],{},[65,127867,127868],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[65,127871,127872],{},"ctrl+\u002F",[14,127874,127876],{"id":127875},"_46-特殊字符","4.6 特殊字符",[170,127878,127879],{},"可以实现添加多个空格",[801,127881],{"style":803,"src":127882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":63,"searchDepth":82,"depth":82,"links":127884},[127885,127886,127887,127888,127889,127890],{"id":127702,"depth":82,"text":127703},{"id":127755,"depth":82,"text":127756},{"id":127793,"depth":82,"text":127794},{"id":127839,"depth":82,"text":127840},{"id":127862,"depth":82,"text":127863},{"id":127875,"depth":82,"text":127876},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127694,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127897,"title":127898,"body":127899,"description":1564,"extension":1565,"meta":128190,"navigation":1567,"path":128191,"seo":128192,"stem":128193,"__hash__":128194},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127900,"toc":128181},[127901,127904,127908,127911,127914,127917,127920,127923,127926,127929,127932,127935,127955,127961,127965,127968,127971,127974,127977,127980,127983,127987,127990,127993,127996,127999,128012,128017,128020,128023,128036,128039,128042,128045,128048,128051,128055,128058,128065,128068,128071,128074,128077,128080,128086,128089,128092,128098,128101,128104,128107,128113,128116,128119,128133,128140,128143,128146,128153,128162,128165,128168,128171,128175,128178],[10,127902,127898],{"id":127903},"_5-html表格列表与表单",[14,127905,127907],{"id":127906},"_51-表格标签","5.1 表格标签",[170,127909,127910],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[170,127912,127913],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[170,127915,127916],{},"②表格基本语法：",[801,127918],{"style":803,"src":127919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[170,127921,127922],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[801,127924],{"style":803,"src":127925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[170,127927,127928],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[801,127930],{"style":803,"src":127931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[170,127933,127934],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[170,127936,127937,127940,127941,127943,127944,127947,127948,127950,127951,127954],{},[65,127938,127939],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[65,127942,127939],{},"内部必须拥有",[65,127945,127946],{},"\u003Ctr>","标签，一般位于第一行，",[65,127949,127939],{},"比",[65,127952,127953],{},"\u003Cth>","范围广",[170,127956,127957,127960],{},[65,127958,127959],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127962,127964],{"id":127963},"_52-合并单元格","5.2 合并单元格",[170,127966,127967],{},"（1）合并单元格方式：",[170,127969,127970],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[170,127972,127973],{},"②跨列合并：colspan=\"合并单元格的个数\"",[170,127975,127976],{},"（2）目标单元格：",[170,127978,127979],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[170,127981,127982],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127984,127986],{"id":127985},"_53-列表标签","5.3 列表标签",[170,127988,127989],{},"（1）分类：无序列表、有序列表、自定义列表",[170,127991,127992],{},"①无序列表：",[801,127994],{"style":803,"src":127995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[170,127997,127998],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[170,128000,128001,128004,128005,128008,128009,128011],{},[65,128002,128003],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[65,128006,128007],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[65,128010,128003],{},"中输入其他标签或文字是不对的",[170,128013,128014,128016],{},[65,128015,128007],{},"之间相当于一个容器，可以容纳所有元素",[170,128018,128019],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[170,128021,128022],{},"在css中去除前边的小圆点采用如下代码:",[58,128024,128026],{"className":60,"code":128025,"language":62,"meta":63,"style":63},"list-style: none;\n",[65,128027,128028],{"__ignoreMap":63},[68,128029,128030,128033],{"class":70,"line":71},[68,128031,128032],{"class":52784},"list-style",[68,128034,128035],{"class":78},": none;\n",[170,128037,128038],{},"②有序列表：",[801,128040],{"style":803,"src":128041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[170,128043,128044],{},"③自定义列表：",[801,128046],{"style":803,"src":128047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[801,128049],{"style":803,"src":128050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128052,128054],{"id":128053},"_54-表单标签","5.4 表单标签",[170,128056,128057],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[170,128059,128060,128061,128064],{},"（1）表单域：包含单元素的区域，",[65,128062,128063],{},"\u003Cform>","标签可以实现信息的收集和传递。",[801,128066],{"style":803,"src":128067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[170,128069,128070],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[170,128072,128073],{},"表单元素提交必须有name属性",[170,128075,128076],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[170,128078,128079],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[170,128081,78703,128082,128085],{},[65,128083,128084],{},"\u003Cinput>","输入表单元素",[801,128087],{"style":803,"src":128088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[801,128090],{"style":803,"src":128091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[170,128093,128094,128095],{},"单选按钮：",[65,128096,128097],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[801,128099],{"style":803,"src":128100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[170,128102,128103],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[801,128105],{"style":803,"src":128106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[170,128108,128109,128112],{},[268,128110,128111],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[170,128114,128115],{},"②select下拉表单元素：可以节约页面控件",[801,128117],{"style":803,"src":128118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[170,128120,128121,15283,128123,128126,128127,128129,128130,128132],{},[268,128122,1669],{},[65,128124,128125],{},"\u003Cselect>","中至少包含一对",[65,128128,104189],{},"；在",[65,128131,104189],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[170,128134,128135,128136,128139],{},"③",[65,128137,128138],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[801,128141],{"style":803,"src":128142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[170,128144,128145],{},"3行20列",[14,128147,128149,128150,104168],{"id":128148},"_55-lable标签","5.5 ",[65,128151,128152],{},"\u003Clable>",[170,128154,128155,128156,128158,128159,128161],{},"它不是表单标签，但常常与表单标签搭配使用，",[65,128157,128152],{},"标签用于绑定一个表单标签，当点击",[65,128160,128152],{},"标签内的文本",[170,128163,128164],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[801,128166],{"style":803,"src":128167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[801,128169],{"style":803,"src":128170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128172,128174],{"id":128173},"_56-实例","5.6 实例",[801,128176],{"style":803,"src":128177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1553,128179,128180],{},"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":63,"searchDepth":82,"depth":82,"links":128182},[128183,128184,128185,128186,128187,128189],{"id":127906,"depth":82,"text":127907},{"id":127963,"depth":82,"text":127964},{"id":127985,"depth":82,"text":127986},{"id":128053,"depth":82,"text":128054},{"id":128148,"depth":82,"text":128188},"5.5 \u003Clable>标签",{"id":128173,"depth":82,"text":128174},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127898,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128196,"title":128197,"body":128198,"description":1564,"extension":1565,"meta":128746,"navigation":1567,"path":128747,"seo":128748,"stem":128749,"__hash__":128750},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128199,"toc":128721},[128200,128203,128207,128210,128213,128217,128220,128223,128226,128229,128232,128235,128238,128242,128245,128249,128252,128255,128258,128262,128265,128268,128271,128277,128280,128283,128286,128289,128292,128295,128298,128331,128335,128338,128341,128344,128348,128351,128354,128357,128360,128363,128367,128370,128373,128376,128380,128383,128387,128390,128394,128397,128402,128406,128409,128413,128416,128419,128422,128425,128452,128455,128459,128462,128465,128470,128473,128476,128480,128483,128487,128490,128493,128496,128500,128503,128506,128509,128513,128516,128519,128522,128526,128530,128533,128573,128576,128580,128587,128590,128594,128597,128643,128647,128650,128653,128656,128684,128688,128691,128718],[10,128201,128197],{"id":128202},"_6-css语法与文本样式",[14,128204,128206],{"id":128205},"_61-css语法规范","6.1 css语法规范",[170,128208,128209],{},"由两部分组成，选择器及一条或多条声明",[801,128211],{"style":803,"src":128212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[170,128214,128215],{},[268,128216,1669],{},[170,128218,128219],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[170,128221,128222],{},"②属性与属性值以“键值对”的形式出现",[170,128224,128225],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[170,128227,128228],{},"④属性和属性值之间用英文“;”分开",[801,128230],{"style":803,"src":128231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[801,128233],{"style":803,"src":128234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[801,128236],{"style":803,"src":128237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128239,128241],{"id":128240},"_62-css选择器","6.2 css选择器",[170,128243,128244],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,128246,128248],{"id":128247},"_621-标签选择器","6.2.1 标签选择器",[170,128250,128251],{},"①优点：能快速为页面中同类型的标签统一设置样式",[170,128253,128254],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[801,128256],{"style":803,"src":128257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,128259,128261],{"id":128260},"_622-类选择器","6.2.2 类选择器",[170,128263,128264],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[170,128266,128267],{},"②样例",[801,128269],{"style":803,"src":128270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[170,128272,128273,128274,128276],{},"③ ",[268,128275,128111],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[170,128278,128279],{},"可以理解为给这个标签起了个名字，来表示；",[170,128281,128282],{},"长名称或词组可以使用横线来为选择器命名；",[170,128284,128285],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[170,128287,128288],{},"命名要有意义；",[801,128290],{"style":803,"src":128291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[170,128293,128294],{},"类选择器也可以指定特殊的元素p.center{}",[170,128296,128297],{},"p.center和.center都对",[58,128299,128301],{"className":60,"code":128300,"language":62,"meta":63,"style":63},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[65,128302,128303,128308,128317,128327],{"__ignoreMap":63},[68,128304,128305],{"class":70,"line":71},[68,128306,128307],{"class":302},"\u002F* 类选择器指定特殊元素 *\u002F\n",[68,128309,128310,128312,128315],{"class":70,"line":82},[68,128311,170],{"class":52784},[68,128313,128314],{"class":74},".center",[68,128316,79],{"class":78},[68,128318,128319,128321,128323,128325],{"class":70,"line":98},[68,128320,72004],{"class":85},[68,128322,89],{"class":78},[68,128324,53074],{"class":85},[68,128326,95],{"class":78},[68,128328,128329],{"class":70,"line":104},[68,128330,101],{"class":78},[19,128332,128334],{"id":128333},"_623-多类名使用","6.2.3 多类名使用",[170,128336,128337],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[801,128339],{"style":803,"src":128340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[170,128342,128343],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,128345,128347],{"id":128346},"_624-id选择器","6.2.4 id选择器",[170,128349,128350],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[170,128352,128353],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[801,128355],{"style":803,"src":128356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[170,128358,128359],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[170,128361,128362],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,128364,128366],{"id":128365},"_625-通配符选择器","6.2.5 通配符选择器",[170,128368,128369],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[170,128371,128372],{},"* {",[170,128374,128375],{},"color=\"red\"}",[19,128377,128379],{"id":128378},"_626-总结","6.2.6 总结",[801,128381],{"style":803,"src":128382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128384,128386],{"id":128385},"_63-css字体属性","6.3 css字体属性",[170,128388,128389],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,128391,128393],{"id":128392},"_631-字体系列","6.3.1 字体系列",[170,128395,128396],{},"font-family: '宋体';",[170,128398,128399,128401],{},[268,128400,1669],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,128403,128405],{"id":128404},"_632-字体大小","6.3.2 字体大小",[170,128407,128408],{},"font-size: 20px",[170,128410,128411,27959],{},[268,128412,128111],{},[170,128414,128415],{},"①px（像素）大小是网页的最常用单位",[170,128417,128418],{},"②谷歌浏览器默认为16px",[170,128420,128421],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[170,128423,128424],{},"④可以给body指定整个页面的大小：会自动引用",[58,128426,128428],{"className":60,"code":128427,"language":62,"meta":63,"style":63},"body {\n  font-size: 16px;\n}\n",[65,128429,128430,128436,128448],{"__ignoreMap":63},[68,128431,128432,128434],{"class":70,"line":71},[68,128433,53282],{"class":52784},[68,128435,79],{"class":78},[68,128437,128438,128440,128442,128444,128446],{"class":70,"line":82},[68,128439,72104],{"class":85},[68,128441,89],{"class":78},[68,128443,2229],{"class":85},[68,128445,317],{"class":316},[68,128447,95],{"class":78},[68,128449,128450],{"class":70,"line":98},[68,128451,101],{"class":78},[170,128453,128454],{},"⑤标题标签比较特殊，需要单独指定大小",[19,128456,128458],{"id":128457},"_633-字体粗细","6.3.3 字体粗细",[170,128460,128461],{},"font-weight: bold;",[170,128463,128464],{},"font-weight: 100；",[170,128466,128467,128469],{},[268,128468,1669],{}," ①粗体文字变细：尽量别用normal，多用数字",[170,128471,128472],{},"font-weight= 400;",[170,128474,128475],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,128477,128479],{"id":128478},"_634-文字样式","6.3.4 文字样式",[170,128481,128482],{},"font-style: normal；",[170,128484,128485,27959],{},[268,128486,139],{},[170,128488,128489],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[170,128491,128492],{},"②italic：浏览器会显示斜体的字体样式",[801,128494],{"style":803,"src":128495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,128497,128499],{"id":128498},"_635-字体符合属性","6.3.5 字体符合属性",[801,128501],{"style":803,"src":128502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[801,128504],{"style":803,"src":128505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[170,128507,128508],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[170,128510,128511,27959],{},[268,128512,128111],{},[170,128514,128515],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[170,128517,128518],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[170,128520,128521],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128523,128525],{"id":128524},"_64-css-test文本属性","6.4 css test文本属性",[19,128527,128529],{"id":128528},"_641-文本颜色","6.4.1 文本颜色",[170,128531,128532],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[58,128534,128536],{"className":60,"code":128535,"language":62,"meta":63,"style":63},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[65,128537,128538,128543,128549,128559,128564,128569],{"__ignoreMap":63},[68,128539,128540],{"class":70,"line":71},[68,128541,128542],{"class":302},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[68,128544,128545,128547],{"class":70,"line":82},[68,128546,170],{"class":52784},[68,128548,79],{"class":78},[68,128550,128551,128553,128555,128557],{"class":70,"line":98},[68,128552,72383],{"class":85},[68,128554,89],{"class":78},[68,128556,58899],{"class":85},[68,128558,95],{"class":78},[68,128560,128561],{"class":70,"line":104},[68,128562,128563],{"class":302},"  \u002F* color: #ff0000; *\u002F\n",[68,128565,128566],{"class":70,"line":112},[68,128567,128568],{"class":302},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[68,128570,128571],{"class":70,"line":124},[68,128572,101],{"class":78},[801,128574],{"style":803,"src":128575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,128577,128579],{"id":128578},"_642-对齐文本","6.4.2 对齐文本",[170,128581,128582,128583,128586],{},"text-align属于用于设置元素内文本内容的 ",[268,128584,128585],{},"水平对齐"," 方式",[170,128588,128589],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,128591,128593],{"id":128592},"_643-装饰文本","6.4.3 装饰文本",[170,128595,128596],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[58,128598,128600],{"className":60,"code":128599,"language":62,"meta":63,"style":63},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[65,128601,128602,128608,128618,128622,128628,128639],{"__ignoreMap":63},[68,128603,128604,128606],{"class":70,"line":71},[68,128605,1867],{"class":52784},[68,128607,79],{"class":78},[68,128609,128610,128612,128614,128616],{"class":70,"line":82},[68,128611,71980],{"class":85},[68,128613,89],{"class":78},[68,128615,151],{"class":85},[68,128617,95],{"class":78},[68,128619,128620],{"class":70,"line":98},[68,128621,101],{"class":78},[68,128623,128624,128626],{"class":70,"line":104},[68,128625,170],{"class":52784},[68,128627,79],{"class":78},[68,128629,128630,128632,128634,128637],{"class":70,"line":112},[68,128631,71980],{"class":85},[68,128633,89],{"class":78},[68,128635,128636],{"class":85},"underline",[68,128638,95],{"class":78},[68,128640,128641],{"class":70,"line":124},[68,128642,101],{"class":78},[19,128644,128646],{"id":128645},"_644-文本缩进","6.4.4 文本缩进",[170,128648,128649],{},"实现文本的第一行首行缩进自己指定的距离",[170,128651,128652],{},"20px往右边走；-20px往左边走",[170,128654,128655],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[58,128657,128659],{"className":60,"code":128658,"language":62,"meta":63,"style":63},"p {\n  text-indent: 2em;\n}\n",[65,128660,128661,128667,128680],{"__ignoreMap":63},[68,128662,128663,128665],{"class":70,"line":71},[68,128664,170],{"class":52784},[68,128666,79],{"class":78},[68,128668,128669,128672,128674,128676,128678],{"class":70,"line":82},[68,128670,128671],{"class":85},"  text-indent",[68,128673,89],{"class":78},[68,128675,1715],{"class":85},[68,128677,25039],{"class":316},[68,128679,95],{"class":78},[68,128681,128682],{"class":70,"line":98},[68,128683,101],{"class":78},[19,128685,128687],{"id":128686},"_645-行间距","6.4.5 行间距",[170,128689,128690],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[58,128692,128694],{"className":60,"code":128693,"language":62,"meta":63,"style":63},"p {\n  line-height: 1.6;\n}\n",[65,128695,128696,128702,128714],{"__ignoreMap":63},[68,128697,128698,128700],{"class":70,"line":71},[68,128699,170],{"class":52784},[68,128701,79],{"class":78},[68,128703,128704,128707,128709,128712],{"class":70,"line":82},[68,128705,128706],{"class":85},"  line-height",[68,128708,89],{"class":78},[68,128710,128711],{"class":85},"1.6",[68,128713,95],{"class":78},[68,128715,128716],{"class":70,"line":98},[68,128717,101],{"class":78},[1553,128719,128720],{},"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":63,"searchDepth":82,"depth":82,"links":128722},[128723,128724,128732,128739],{"id":128205,"depth":82,"text":128206},{"id":128240,"depth":82,"text":128241,"children":128725},[128726,128727,128728,128729,128730,128731],{"id":128247,"depth":98,"text":128248},{"id":128260,"depth":98,"text":128261},{"id":128333,"depth":98,"text":128334},{"id":128346,"depth":98,"text":128347},{"id":128365,"depth":98,"text":128366},{"id":128378,"depth":98,"text":128379},{"id":128385,"depth":82,"text":128386,"children":128733},[128734,128735,128736,128737,128738],{"id":128392,"depth":98,"text":128393},{"id":128404,"depth":98,"text":128405},{"id":128457,"depth":98,"text":128458},{"id":128478,"depth":98,"text":128479},{"id":128498,"depth":98,"text":128499},{"id":128524,"depth":82,"text":128525,"children":128740},[128741,128742,128743,128744,128745],{"id":128528,"depth":98,"text":128529},{"id":128578,"depth":98,"text":128579},{"id":128592,"depth":98,"text":128593},{"id":128645,"depth":98,"text":128646},{"id":128686,"depth":98,"text":128687},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128197,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128752,"title":128753,"body":128754,"description":1564,"extension":1565,"meta":129402,"navigation":1567,"path":129403,"seo":129404,"stem":129405,"__hash__":129406},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128755,"toc":129383},[128756,128759,128763,128767,128827,128831,128841,128844,128847,128851,128876,128880,128883,128886,128889,128892,128895,128899,128902,128905,128947,128950,128976,128982,128985,128989,128993,128999,129002,129005,129008,129011,129014,129017,129062,129066,129069,129072,129076,129080,129109,129112,129117,129120,129123,129126,129129,129133,129137,129140,129142,129145,129149,129152,129156,129159,129162,129165,129169,129173,129179,129188,129191,129194,129197,129200,129203,129326,129334,129342,129380],[10,128757,128753],{"id":128758},"_7-css引入方式与选择器进阶",[14,128760,128762],{"id":128761},"_71-css引入方式","7.1 css引入方式",[19,128764,128766],{"id":128765},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[58,128768,128772],{"className":128769,"code":128770,"language":128771,"meta":63,"style":63},"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",[65,128773,128774,128782,128789,128801,128814,128819],{"__ignoreMap":63},[68,128775,128776,128778,128780],{"class":70,"line":71},[68,128777,2537],{"class":78},[68,128779,1553],{"class":52784},[68,128781,52791],{"class":78},[68,128783,128784,128787],{"class":70,"line":82},[68,128785,128786],{"class":52784},"  h1",[68,128788,79],{"class":78},[68,128790,128791,128794,128796,128799],{"class":70,"line":98},[68,128792,128793],{"class":85},"    color",[68,128795,89],{"class":78},[68,128797,128798],{"class":85},"blue",[68,128800,95],{"class":78},[68,128802,128803,128806,128808,128810,128812],{"class":70,"line":104},[68,128804,128805],{"class":85},"    font-size",[68,128807,89],{"class":78},[68,128809,2427],{"class":85},[68,128811,317],{"class":316},[68,128813,95],{"class":78},[68,128815,128816],{"class":70,"line":112},[68,128817,128818],{"class":78},"  }\n",[68,128820,128821,128823,128825],{"class":70,"line":124},[68,128822,53267],{"class":78},[68,128824,1553],{"class":52784},[68,128826,52791],{"class":78},[170,128828,128829,27959],{},[268,128830,128111],{},[170,128832,78703,128833,128836,128837,128840],{},[65,128834,128835],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[65,128838,128839],{},"\u003Chead>","标签中",[170,128842,128843],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[170,128845,128846],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,128848,128850],{"id":128849},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[58,128852,128854],{"className":128769,"code":128853,"language":128771,"meta":63,"style":63},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[65,128855,128856],{"__ignoreMap":63},[68,128857,128858,128860,128862,128864,128866,128869,128872,128874],{"class":70,"line":71},[68,128859,2537],{"class":78},[68,128861,170],{"class":52784},[68,128863,64104],{"class":74},[68,128865,1685],{"class":78},[68,128867,128868],{"class":1742},"\"color: red; font-size: 16px;\"",[68,128870,128871],{"class":78},">这是一个段落\u003C\u002F",[68,128873,170],{"class":52784},[68,128875,52791],{"class":78},[170,128877,128878,27959],{},[268,128879,128111],{},[170,128881,128882],{},"①style其实就是标签的属性",[170,128884,128885],{},"②在双引号中间，写法要符合css规范",[170,128887,128888],{},"③可以控制当前的标签设置样式",[170,128890,128891],{},"④书写繁琐，简单时才用",[170,128893,128894],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,128896,128898],{"id":128897},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[170,128900,128901],{},"使用最多，单独建一个css文件，然后html引用",[170,128903,128904],{},"①css文件部分： style.css",[58,128906,128908],{"className":60,"code":128907,"language":62,"meta":63,"style":63},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[65,128909,128910,128915,128921,128931,128943],{"__ignoreMap":63},[68,128911,128912],{"class":70,"line":71},[68,128913,128914],{"class":302},"\u002F* style.css *\u002F\n",[68,128916,128917,128919],{"class":70,"line":82},[68,128918,10],{"class":52784},[68,128920,79],{"class":78},[68,128922,128923,128925,128927,128929],{"class":70,"line":98},[68,128924,72383],{"class":85},[68,128926,89],{"class":78},[68,128928,128798],{"class":85},[68,128930,95],{"class":78},[68,128932,128933,128935,128937,128939,128941],{"class":70,"line":104},[68,128934,72104],{"class":85},[68,128936,89],{"class":78},[68,128938,2427],{"class":85},[68,128940,317],{"class":316},[68,128942,95],{"class":78},[68,128944,128945],{"class":70,"line":112},[68,128946,101],{"class":78},[170,128948,128949],{},"②html部分",[58,128951,128953],{"className":128769,"code":128952,"language":128771,"meta":63,"style":63},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[65,128954,128955],{"__ignoreMap":63},[68,128956,128957,128959,128961,128963,128965,128967,128969,128971,128974],{"class":70,"line":71},[68,128958,2537],{"class":78},[68,128960,70483],{"class":52784},[68,128962,70486],{"class":74},[68,128964,1685],{"class":78},[68,128966,70491],{"class":1742},[68,128968,62535],{"class":74},[68,128970,1685],{"class":78},[68,128972,128973],{"class":1742},"\"style.css\"",[68,128975,52791],{"class":78},[170,128977,128978,128981],{},[65,128979,128980],{},"\u003Chr>","水平线标签（但是不常用！）",[170,128983,128984],{},"ctrl+0回到页面原来大小",[14,128986,128988],{"id":128987},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,128990,128992],{"id":128991},"_721-快速生成html","7.2.1 快速生成html",[170,128994,128995,128996],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[65,128997,128998],{},"\u003Cdiv>``\u003C\u002Fdiv>",[170,129000,129001],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[170,129003,129004],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[170,129006,129007],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[170,129009,129010],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[170,129012,129013],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[170,129015,129016],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[58,129018,129020],{"className":128769,"code":129019,"language":128771,"meta":63,"style":63},"\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",[65,129021,129022,129027,129032,129037,129042,129047,129052,129057],{"__ignoreMap":63},[68,129023,129024],{"class":70,"line":71},[68,129025,129026],{"class":302},"\u003C!-- Emmet 语法示例 -->\n",[68,129028,129029],{"class":70,"line":82},[68,129030,129031],{"class":302},"\u003C!-- div*3        → 生成3个div -->\n",[68,129033,129034],{"class":70,"line":98},[68,129035,129036],{"class":302},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[68,129038,129039],{"class":70,"line":104},[68,129040,129041],{"class":302},"\u003C!-- div+p        → 兄弟div和p -->\n",[68,129043,129044],{"class":70,"line":112},[68,129045,129046],{"class":302},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[68,129048,129049],{"class":70,"line":124},[68,129050,129051],{"class":302},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[68,129053,129054],{"class":70,"line":1496},[68,129055,129056],{"class":302},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[68,129058,129059],{"class":70,"line":1502},[68,129060,129061],{"class":302},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,129063,129065],{"id":129064},"_722-快速生成css","7.2.2 快速生成css",[170,129067,129068],{},"简写开头",[170,129070,129071],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129073,129075],{"id":129074},"_73-css复合选择器","7.3 css复合选择器",[19,129077,129079],{"id":129078},"_731-后代选择器","7.3.1 后代选择器",[58,129081,129083],{"className":60,"code":129082,"language":62,"meta":63,"style":63},".parent .child {\n  color: blue;\n}\n",[65,129084,129085,129095,129105],{"__ignoreMap":63},[68,129086,129087,129090,129093],{"class":70,"line":71},[68,129088,129089],{"class":74},".parent",[68,129091,129092],{"class":74}," .child",[68,129094,79],{"class":78},[68,129096,129097,129099,129101,129103],{"class":70,"line":82},[68,129098,72383],{"class":85},[68,129100,89],{"class":78},[68,129102,128798],{"class":85},[68,129104,95],{"class":78},[68,129106,129107],{"class":70,"line":98},[68,129108,101],{"class":78},[170,129110,129111],{},"元素1 元素2 {样式声明}",[170,129113,129114],{},[268,129115,129116],{},"注意点:",[170,129118,129119],{},"①元素1和元素2中间用空格隔开",[170,129121,129122],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[170,129124,129125],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[170,129127,129128],{},"④元素1和元素2可以是任意基础选择器",[19,129130,129132],{"id":129131},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[170,129134,129135],{},[268,129136,129116],{},[170,129138,129139],{},"①元素1和元素2中间用大于号隔开",[170,129141,129122],{},[170,129143,129144],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,129146,129148],{"id":129147},"_733-并集选择器","7.3.3 并集选择器",[170,129150,129151],{},"元素1，元素2 {样式声明}",[170,129153,129154],{},[268,129155,129116],{},[170,129157,129158],{},"①元素1和元素2中间用逗号隔开",[170,129160,129161],{},"②逗号可以理解为和的意思",[170,129163,129164],{},"③并集选择器通常用于集体声明",[19,129166,129168],{"id":129167},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[170,129170,129171],{},[268,129172,129116],{},[170,129174,129175,129176,129178],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70483,129177],{},"－:visited－:hover－:active。",[170,129180,129181,129182,1241,129185,27226],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129183,129184],"hover",{},[129186,129187],"first-child",{},[170,129189,129190],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[170,129192,129193],{},"link对没访问的进行设置",[170,129195,129196],{},"vistied对已访问的进行改变",[170,129198,129199],{},"hover鼠标经过就会变",[170,129201,129202],{},"active常按(点)就会变",[58,129204,129206],{"className":60,"code":129205,"language":62,"meta":63,"style":63},"\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",[65,129207,129208,129213,129222,129232,129242,129246,129255,129266,129270,129278,129288,129298,129302,129311,129322],{"__ignoreMap":63},[68,129209,129210],{"class":70,"line":71},[68,129211,129212],{"class":302},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[68,129214,129215,129217,129220],{"class":70,"line":82},[68,129216,1867],{"class":52784},[68,129218,129219],{"class":74},":link",[68,129221,79],{"class":78},[68,129223,129224,129226,129228,129230],{"class":70,"line":98},[68,129225,72383],{"class":85},[68,129227,89],{"class":78},[68,129229,63847],{"class":85},[68,129231,95],{"class":78},[68,129233,129234,129236,129238,129240],{"class":70,"line":104},[68,129235,71980],{"class":85},[68,129237,89],{"class":78},[68,129239,151],{"class":85},[68,129241,95],{"class":78},[68,129243,129244],{"class":70,"line":112},[68,129245,101],{"class":78},[68,129247,129248,129250,129253],{"class":70,"line":124},[68,129249,1867],{"class":52784},[68,129251,129252],{"class":74},":visited",[68,129254,79],{"class":78},[68,129256,129257,129259,129261,129264],{"class":70,"line":1496},[68,129258,72383],{"class":85},[68,129260,89],{"class":78},[68,129262,129263],{"class":85},"purple",[68,129265,95],{"class":78},[68,129267,129268],{"class":70,"line":1502},[68,129269,101],{"class":78},[68,129271,129272,129274,129276],{"class":70,"line":1510},[68,129273,1867],{"class":52784},[68,129275,62418],{"class":74},[68,129277,79],{"class":78},[68,129279,129280,129282,129284,129286],{"class":70,"line":1521},[68,129281,72383],{"class":85},[68,129283,89],{"class":78},[68,129285,56367],{"class":85},[68,129287,95],{"class":78},[68,129289,129290,129292,129294,129296],{"class":70,"line":3103},[68,129291,71980],{"class":85},[68,129293,89],{"class":78},[68,129295,128636],{"class":85},[68,129297,95],{"class":78},[68,129299,129300],{"class":70,"line":3108},[68,129301,101],{"class":78},[68,129303,129304,129306,129309],{"class":70,"line":3114},[68,129305,1867],{"class":52784},[68,129307,129308],{"class":74},":active",[68,129310,79],{"class":78},[68,129312,129313,129315,129317,129320],{"class":70,"line":3119},[68,129314,72383],{"class":85},[68,129316,89],{"class":78},[68,129318,129319],{"class":85},"green",[68,129321,95],{"class":78},[68,129323,129324],{"class":70,"line":3133},[68,129325,101],{"class":78},[19,129327,129329,129330,129333],{"id":129328},"_735-伪类选择器","7.3.5 ",[129331,129332],"focus",{},"伪类选择器",[170,129335,129336,129338,129339,129341],{},[129331,129337],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[65,129340,128084],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[58,129343,129345],{"className":60,"code":129344,"language":62,"meta":63,"style":63},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[65,129346,129347,129355,129366,129376],{"__ignoreMap":63},[68,129348,129349,129351,129353],{"class":70,"line":71},[68,129350,55302],{"class":52784},[68,129352,63378],{"class":74},[68,129354,79],{"class":78},[68,129356,129357,129360,129362,129364],{"class":70,"line":82},[68,129358,129359],{"class":85},"  border-color",[68,129361,89],{"class":78},[68,129363,56367],{"class":85},[68,129365,95],{"class":78},[68,129367,129368,129370,129372,129374],{"class":70,"line":98},[68,129369,72276],{"class":85},[68,129371,89],{"class":78},[68,129373,151],{"class":85},[68,129375,95],{"class":78},[68,129377,129378],{"class":70,"line":104},[68,129379,101],{"class":78},[1553,129381,129382],{},"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":63,"searchDepth":82,"depth":82,"links":129384},[129385,129390,129394],{"id":128761,"depth":82,"text":128762,"children":129386},[129387,129388,129389],{"id":128765,"depth":98,"text":128766},{"id":128849,"depth":98,"text":128850},{"id":128897,"depth":98,"text":128898},{"id":128987,"depth":82,"text":128988,"children":129391},[129392,129393],{"id":128991,"depth":98,"text":128992},{"id":129064,"depth":98,"text":129065},{"id":129074,"depth":82,"text":129075,"children":129395},[129396,129397,129398,129399,129400],{"id":129078,"depth":98,"text":129079},{"id":129131,"depth":98,"text":129132},{"id":129147,"depth":98,"text":129148},{"id":129167,"depth":98,"text":129168},{"id":129328,"depth":98,"text":129401},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128753,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129408,"title":129409,"body":129410,"description":1564,"extension":1565,"meta":131333,"navigation":1567,"path":131334,"seo":131335,"stem":131336,"__hash__":131337},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129411,"toc":131307},[129412,129415,129419,129428,129432,129458,129463,129466,129469,129472,129475,129479,129482,129492,129500,129504,129539,129544,129547,129550,129553,129556,129560,129563,129572,129576,129589,129594,129597,129600,129603,129607,129610,129614,129617,129672,129675,129706,129709,129763,129767,129770,129936,130059,130062,130065,130068,130071,130075,130078,130082,130085,130088,130092,130095,130126,130153,130181,130184,130188,130214,130257,130261,130355,130358,130385,130388,130391,130394,130397,130400,130403,130406,130409,130412,130416,130473,130500,130504,130552,130556,130597,130599,130602,130605,130608,130611,130615,130707,130710,130713,130716,130720,130843,131044,131048,131052,131055,131058,131061,131065,131068,131071,131096,131099,131102,131105,131108,131111,131115,131123,131185,131188,131246,131249,131252,131255,131258,131261,131264,131267,131304],[10,129413,129409],{"id":129414},"_8-css显示模式与背景特性",[14,129416,129418],{"id":129417},"_81-css元素显示模式","8.1 css元素显示模式",[170,129420,129421,129422,129424,129425,129427],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[65,129423,127637],{},"自己占一行，比如一行可以放多个",[65,129426,127640],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,129429,129431],{"id":129430},"_811-块元素","8.1.1 块元素",[170,129433,129434,129435,129437,129438,1841,129441,1841,129443,1841,129445,1841,129448,1841,129451,129454,129455,129457],{},"常见的块元素有",[65,129436,127541],{},"~",[65,129439,129440],{},"\u003Ch6>",[65,129442,127567],{},[65,129444,127637],{},[65,129446,129447],{},"\u003Cul>",[65,129449,129450],{},"\u003Col>",[65,129452,129453],{},"\u003Cli>","等，其中 ",[65,129456,127637],{}," 标签是最典型的块元素",[170,129459,129460],{},[268,129461,129462],{},"块级元素的特点：",[170,129464,129465],{},"① 比较霸道，自己独占一行。",[170,129467,129468],{},"② 高度，宽度、外边距以及内边距都可以控制。",[170,129470,129471],{},"③ 宽度默认是容器（父级宽度）的100%。",[170,129473,129474],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[170,129476,129477],{},[268,129478,1669],{},[170,129480,129481],{},"①文字类的元素内不能使用块级元素",[170,129483,78726,129484,129486,129487,129489,129490],{},[65,129485,127567],{}," 标签主要用于存放文字，因此 ",[65,129488,127567],{}," 里面不能放块级元素，特别是不能放",[65,129491,127637],{},[170,129493,129494,129495,129437,129497,129499],{},"⑥同理， ",[65,129496,127541],{},[65,129498,129440],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,129501,129503],{"id":129502},"_812-行内元素","8.1.2 行内元素",[170,129505,129506,129507,1841,129509,1841,129512,1841,129515,1841,129518,1841,129521,1841,129524,1841,129527,1841,129530,1841,129533,129535,129536,129538],{},"常见的行内元素有 ",[65,129508,127799],{},[65,129510,129511],{},"\u003Cstrong>",[65,129513,129514],{},"\u003Cb>",[65,129516,129517],{},"\u003Cem>",[65,129519,129520],{},"\u003Ci>",[65,129522,129523],{},"\u003Cdel>",[65,129525,129526],{},"\u003Cs>",[65,129528,129529],{},"\u003Cins>",[65,129531,129532],{},"\u003Cu>",[65,129534,127640],{}," 等，其中 ",[65,129537,127640],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[170,129540,129541],{},[268,129542,129543],{},"特点：",[170,129545,129546],{},"① 相邻行内元素在一行上，一行可以显示多个。",[170,129548,129549],{},"② 高、宽直接设置是无效的。",[170,129551,129552],{},"③ 默认宽度就是它本身内容的宽度。",[170,129554,129555],{},"④ 行内元素只能容纳文本或其他行内元素。",[170,129557,129558],{},[268,129559,1669],{},[170,129561,129562],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[170,129564,129565,129566,129568,129569,129571],{},"②特殊情况链接 ",[65,129567,127799],{}," 里面可以放块级元素，但是给 ",[65,129570,127799],{}," 转换一下块级模式最安全",[19,129573,129575],{"id":129574},"_813-行内块元素","8.1.3 行内块元素",[170,129577,129578,129579,1841,129582,1841,129585,129588],{},"在行内元素中有几个特殊的标签 —— ",[65,129580,129581],{},"\u003Cimg \u002F>",[65,129583,129584],{},"\u003Cinput \u002F>",[65,129586,129587],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[170,129590,129591],{},[268,129592,129593],{},"行内块元素的特点：",[170,129595,129596],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[170,129598,129599],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[170,129601,129602],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,129604,129606],{"id":129605},"_814-总结","8.1.4 总结",[801,129608],{"style":803,"src":129609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,129611,129613],{"id":129612},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[170,129615,129616],{},"①转换为块元素：display:block;",[58,129618,129620],{"className":60,"code":129619,"language":62,"meta":63,"style":63},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[65,129621,129622,129627,129633,129644,129656,129668],{"__ignoreMap":63},[68,129623,129624],{"class":70,"line":71},[68,129625,129626],{"class":302},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[68,129628,129629,129631],{"class":70,"line":82},[68,129630,1867],{"class":52784},[68,129632,79],{"class":78},[68,129634,129635,129638,129640,129642],{"class":70,"line":98},[68,129636,129637],{"class":85},"  display",[68,129639,89],{"class":78},[68,129641,62347],{"class":85},[68,129643,95],{"class":78},[68,129645,129646,129648,129650,129652,129654],{"class":70,"line":104},[68,129647,72046],{"class":85},[68,129649,89],{"class":78},[68,129651,1940],{"class":85},[68,129653,317],{"class":316},[68,129655,95],{"class":78},[68,129657,129658,129660,129662,129664,129666],{"class":70,"line":112},[68,129659,72266],{"class":85},[68,129661,89],{"class":78},[68,129663,2030],{"class":85},[68,129665,317],{"class":316},[68,129667,95],{"class":78},[68,129669,129670],{"class":70,"line":124},[68,129671,101],{"class":78},[170,129673,129674],{},"②转换为行内元素：display:inline;",[58,129676,129678],{"className":60,"code":129677,"language":62,"meta":63,"style":63},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[65,129679,129680,129685,129691,129702],{"__ignoreMap":63},[68,129681,129682],{"class":70,"line":71},[68,129683,129684],{"class":302},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[68,129686,129687,129689],{"class":70,"line":82},[68,129688,53093],{"class":52784},[68,129690,79],{"class":78},[68,129692,129693,129695,129697,129700],{"class":70,"line":98},[68,129694,129637],{"class":85},[68,129696,89],{"class":78},[68,129698,129699],{"class":85},"inline",[68,129701,95],{"class":78},[68,129703,129704],{"class":70,"line":104},[68,129705,101],{"class":78},[170,129707,129708],{},"③转换为行内块：display:inline-block;",[58,129710,129712],{"className":60,"code":129711,"language":62,"meta":63,"style":63},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[65,129713,129714,129719,129725,129735,129747,129759],{"__ignoreMap":63},[68,129715,129716],{"class":70,"line":71},[68,129717,129718],{"class":302},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[68,129720,129721,129723],{"class":70,"line":82},[68,129722,68],{"class":52784},[68,129724,79],{"class":78},[68,129726,129727,129729,129731,129733],{"class":70,"line":98},[68,129728,129637],{"class":85},[68,129730,89],{"class":78},[68,129732,73861],{"class":85},[68,129734,95],{"class":78},[68,129736,129737,129739,129741,129743,129745],{"class":70,"line":104},[68,129738,72046],{"class":85},[68,129740,89],{"class":78},[68,129742,2240],{"class":85},[68,129744,317],{"class":316},[68,129746,95],{"class":78},[68,129748,129749,129751,129753,129755,129757],{"class":70,"line":112},[68,129750,72266],{"class":85},[68,129752,89],{"class":78},[68,129754,2578],{"class":85},[68,129756,317],{"class":316},[68,129758,95],{"class":78},[68,129760,129761],{"class":70,"line":124},[68,129762,101],{"class":78},[19,129764,129766],{"id":129765},"_816-小米侧边栏","8.1.6 小米侧边栏",[801,129768],{"style":803,"src":129769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[58,129771,129773],{"className":128769,"code":129772,"language":128771,"meta":63,"style":63},"\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",[65,129774,129775,129780,129795,129814,129833,129852,129871,129890,129909,129928],{"__ignoreMap":63},[68,129776,129777],{"class":70,"line":71},[68,129778,129779],{"class":302},"\u003C!-- 小米侧边栏案例 -->\n",[68,129781,129782,129784,129786,129788,129790,129793],{"class":70,"line":82},[68,129783,2537],{"class":78},[68,129785,53093],{"class":52784},[68,129787,54968],{"class":74},[68,129789,1685],{"class":78},[68,129791,129792],{"class":1742},"\"sidebar\"",[68,129794,52791],{"class":78},[68,129796,129797,129799,129801,129803,129805,129807,129810,129812],{"class":70,"line":98},[68,129798,53626],{"class":78},[68,129800,1867],{"class":52784},[68,129802,62535],{"class":74},[68,129804,1685],{"class":78},[68,129806,62540],{"class":1742},[68,129808,129809],{"class":78},">手机 电话卡\u003C\u002F",[68,129811,1867],{"class":52784},[68,129813,52791],{"class":78},[68,129815,129816,129818,129820,129822,129824,129826,129829,129831],{"class":70,"line":104},[68,129817,53626],{"class":78},[68,129819,1867],{"class":52784},[68,129821,62535],{"class":74},[68,129823,1685],{"class":78},[68,129825,62540],{"class":1742},[68,129827,129828],{"class":78},">电视 盒子\u003C\u002F",[68,129830,1867],{"class":52784},[68,129832,52791],{"class":78},[68,129834,129835,129837,129839,129841,129843,129845,129848,129850],{"class":70,"line":112},[68,129836,53626],{"class":78},[68,129838,1867],{"class":52784},[68,129840,62535],{"class":74},[68,129842,1685],{"class":78},[68,129844,62540],{"class":1742},[68,129846,129847],{"class":78},">笔记本 平板\u003C\u002F",[68,129849,1867],{"class":52784},[68,129851,52791],{"class":78},[68,129853,129854,129856,129858,129860,129862,129864,129867,129869],{"class":70,"line":124},[68,129855,53626],{"class":78},[68,129857,1867],{"class":52784},[68,129859,62535],{"class":74},[68,129861,1685],{"class":78},[68,129863,62540],{"class":1742},[68,129865,129866],{"class":78},">出行 穿戴\u003C\u002F",[68,129868,1867],{"class":52784},[68,129870,52791],{"class":78},[68,129872,129873,129875,129877,129879,129881,129883,129886,129888],{"class":70,"line":1496},[68,129874,53626],{"class":78},[68,129876,1867],{"class":52784},[68,129878,62535],{"class":74},[68,129880,1685],{"class":78},[68,129882,62540],{"class":1742},[68,129884,129885],{"class":78},">智能 路由器\u003C\u002F",[68,129887,1867],{"class":52784},[68,129889,52791],{"class":78},[68,129891,129892,129894,129896,129898,129900,129902,129905,129907],{"class":70,"line":1502},[68,129893,53626],{"class":78},[68,129895,1867],{"class":52784},[68,129897,62535],{"class":74},[68,129899,1685],{"class":78},[68,129901,62540],{"class":1742},[68,129903,129904],{"class":78},">健康 儿童\u003C\u002F",[68,129906,1867],{"class":52784},[68,129908,52791],{"class":78},[68,129910,129911,129913,129915,129917,129919,129921,129924,129926],{"class":70,"line":1510},[68,129912,53626],{"class":78},[68,129914,1867],{"class":52784},[68,129916,62535],{"class":74},[68,129918,1685],{"class":78},[68,129920,62540],{"class":1742},[68,129922,129923],{"class":78},">耳机 音响\u003C\u002F",[68,129925,1867],{"class":52784},[68,129927,52791],{"class":78},[68,129929,129930,129932,129934],{"class":70,"line":1521},[68,129931,53267],{"class":78},[68,129933,53093],{"class":52784},[68,129935,52791],{"class":78},[58,129937,129939],{"className":60,"code":129938,"language":62,"meta":63,"style":63},".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",[65,129940,129941,129950,129960,129973,129985,129997,130009,130019,130030,130034,130044,130055],{"__ignoreMap":63},[68,129942,129943,129946,129948],{"class":70,"line":71},[68,129944,129945],{"class":74},".sidebar",[68,129947,2891],{"class":52784},[68,129949,79],{"class":78},[68,129951,129952,129954,129956,129958],{"class":70,"line":82},[68,129953,129637],{"class":85},[68,129955,89],{"class":78},[68,129957,62347],{"class":85},[68,129959,95],{"class":78},[68,129961,129962,129964,129966,129969,129971],{"class":70,"line":98},[68,129963,72046],{"class":85},[68,129965,89],{"class":78},[68,129967,129968],{"class":85},"234",[68,129970,317],{"class":316},[68,129972,95],{"class":78},[68,129974,129975,129977,129979,129981,129983],{"class":70,"line":104},[68,129976,72266],{"class":85},[68,129978,89],{"class":78},[68,129980,2080],{"class":85},[68,129982,317],{"class":316},[68,129984,95],{"class":78},[68,129986,129987,129989,129991,129993,129995],{"class":70,"line":112},[68,129988,128706],{"class":85},[68,129990,89],{"class":78},[68,129992,2080],{"class":85},[68,129994,317],{"class":316},[68,129996,95],{"class":78},[68,129998,129999,130001,130003,130005,130007],{"class":70,"line":124},[68,130000,72301],{"class":85},[68,130002,89],{"class":78},[68,130004,2578],{"class":85},[68,130006,317],{"class":316},[68,130008,95],{"class":78},[68,130010,130011,130013,130015,130017],{"class":70,"line":1496},[68,130012,72383],{"class":85},[68,130014,89],{"class":78},[68,130016,62320],{"class":85},[68,130018,95],{"class":78},[68,130020,130021,130023,130025,130028],{"class":70,"line":1502},[68,130022,72356],{"class":85},[68,130024,89],{"class":78},[68,130026,130027],{"class":85},"#55585a",[68,130029,95],{"class":78},[68,130031,130032],{"class":70,"line":1510},[68,130033,101],{"class":78},[68,130035,130036,130038,130040,130042],{"class":70,"line":1521},[68,130037,129945],{"class":74},[68,130039,2891],{"class":52784},[68,130041,62418],{"class":74},[68,130043,79],{"class":78},[68,130045,130046,130048,130050,130053],{"class":70,"line":3103},[68,130047,72356],{"class":85},[68,130049,89],{"class":78},[68,130051,130052],{"class":85},"#ff6700",[68,130054,95],{"class":78},[68,130056,130057],{"class":70,"line":3108},[68,130058,101],{"class":78},[801,130060],{"style":803,"src":130061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[170,130063,130064],{},"行高=盒子高度：实现文字的垂直居中",[170,130066,130067],{},"原理讲解：",[801,130069],{"style":803,"src":130070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130072,130074],{"id":130073},"_82-css背景","8.2 css背景",[170,130076,130077],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,130079,130081],{"id":130080},"_821-背景颜色","8.2.1 背景颜色",[170,130083,130084],{},"background-color:颜色值;",[170,130086,130087],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,130089,130091],{"id":130090},"_822-背景图片","8.2.2 背景图片",[170,130093,130094],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[58,130096,130098],{"className":60,"code":130097,"language":62,"meta":63,"style":63},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[65,130099,130100,130106,130122],{"__ignoreMap":63},[68,130101,130102,130104],{"class":70,"line":71},[68,130103,53093],{"class":52784},[68,130105,79],{"class":78},[68,130107,130108,130111,130113,130115,130117,130120],{"class":70,"line":82},[68,130109,130110],{"class":85},"  background-image",[68,130112,89],{"class":78},[68,130114,63204],{"class":85},[68,130116,1640],{"class":78},[68,130118,130119],{"class":6705},"images\u002Fbg.png",[68,130121,4209],{"class":78},[68,130123,130124],{"class":70,"line":98},[68,130125,101],{"class":78},[128,130127,130128,130137],{},[131,130129,130130],{},[134,130131,130132,130135],{},[137,130133,130134],{"align":92},"参数值",[137,130136,104171],{"align":92},[144,130138,130139,130146],{},[134,130140,130141,130143],{},[149,130142,151],{"align":92},[149,130144,130145],{"align":92},"无背景图（默认的）",[134,130147,130148,130150],{},[149,130149,63204],{"align":92},[149,130151,130152],{"align":92},"使用绝对或相对地址指定背景图像",[58,130154,130155],{"className":60,"code":130097,"language":62,"meta":63,"style":63},[65,130156,130157,130163,130177],{"__ignoreMap":63},[68,130158,130159,130161],{"class":70,"line":71},[68,130160,53093],{"class":52784},[68,130162,79],{"class":78},[68,130164,130165,130167,130169,130171,130173,130175],{"class":70,"line":82},[68,130166,130110],{"class":85},[68,130168,89],{"class":78},[68,130170,63204],{"class":85},[68,130172,1640],{"class":78},[68,130174,130119],{"class":6705},[68,130176,4209],{"class":78},[68,130178,130179],{"class":70,"line":98},[68,130180,101],{"class":78},[170,130182,130183],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,130185,130187],{"id":130186},"_823-背景平铺","8.2.3 背景平铺",[58,130189,130191],{"className":60,"code":130190,"language":62,"meta":63,"style":63},"div {\n  background-repeat: no-repeat;\n}\n",[65,130192,130193,130199,130210],{"__ignoreMap":63},[68,130194,130195,130197],{"class":70,"line":71},[68,130196,53093],{"class":52784},[68,130198,79],{"class":78},[68,130200,130201,130204,130206,130208],{"class":70,"line":82},[68,130202,130203],{"class":85},"  background-repeat",[68,130205,89],{"class":78},[68,130207,63214],{"class":85},[68,130209,95],{"class":78},[68,130211,130212],{"class":70,"line":98},[68,130213,101],{"class":78},[128,130215,130216,130224],{},[131,130217,130218],{},[134,130219,130220,130222],{},[137,130221,130134],{"align":92},[137,130223,104171],{"align":92},[144,130225,130226,130234,130241,130249],{},[134,130227,130228,130231],{},[149,130229,130230],{"align":92},"repeat",[149,130232,130233],{"align":92},"背景图像在纵向和横向上平铺（默认的）",[134,130235,130236,130238],{},[149,130237,63214],{"align":92},[149,130239,130240],{"align":92},"背景图像不平铺",[134,130242,130243,130246],{},[149,130244,130245],{"align":92},"repeat-x",[149,130247,130248],{"align":92},"背景图像在横向上平铺",[134,130250,130251,130254],{},[149,130252,130253],{"align":92},"repeat-y",[149,130255,130256],{"align":92},"背景图像在纵向平铺",[19,130258,130260],{"id":130259},"_824-背景图片位置","8.2.4 背景图片位置",[58,130262,130264],{"className":60,"code":130263,"language":62,"meta":63,"style":63},"\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",[65,130265,130266,130271,130277,130291,130295,130300,130306,130322,130326,130331,130337,130351],{"__ignoreMap":63},[68,130267,130268],{"class":70,"line":71},[68,130269,130270],{"class":302},"\u002F* 方位名词 *\u002F\n",[68,130272,130273,130275],{"class":70,"line":82},[68,130274,53093],{"class":52784},[68,130276,79],{"class":78},[68,130278,130279,130282,130284,130286,130289],{"class":70,"line":98},[68,130280,130281],{"class":85},"  background-position",[68,130283,89],{"class":78},[68,130285,53074],{"class":85},[68,130287,130288],{"class":85}," top",[68,130290,95],{"class":78},[68,130292,130293],{"class":70,"line":104},[68,130294,101],{"class":78},[68,130296,130297],{"class":70,"line":112},[68,130298,130299],{"class":302},"\u002F* 精确单位 *\u002F\n",[68,130301,130302,130304],{"class":70,"line":124},[68,130303,53093],{"class":52784},[68,130305,79],{"class":78},[68,130307,130308,130310,130312,130314,130316,130318,130320],{"class":70,"line":1496},[68,130309,130281],{"class":85},[68,130311,89],{"class":78},[68,130313,333],{"class":85},[68,130315,317],{"class":316},[68,130317,58982],{"class":85},[68,130319,317],{"class":316},[68,130321,95],{"class":78},[68,130323,130324],{"class":70,"line":1502},[68,130325,101],{"class":78},[68,130327,130328],{"class":70,"line":1510},[68,130329,130330],{"class":302},"\u002F* 混合单位 *\u002F\n",[68,130332,130333,130335],{"class":70,"line":1521},[68,130334,53093],{"class":52784},[68,130336,79],{"class":78},[68,130338,130339,130341,130343,130345,130347,130349],{"class":70,"line":3103},[68,130340,130281],{"class":85},[68,130342,89],{"class":78},[68,130344,333],{"class":85},[68,130346,317],{"class":316},[68,130348,18631],{"class":85},[68,130350,95],{"class":78},[68,130352,130353],{"class":70,"line":3108},[68,130354,101],{"class":78},[170,130356,130357],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[128,130359,130360,130368],{},[131,130361,130362],{},[134,130363,130364,130366],{},[137,130365,130134],{"align":92},[137,130367,27355],{"align":92},[144,130369,130370,130377],{},[134,130371,130372,130374],{},[149,130373,53450],{"align":92},[149,130375,130376],{"align":92},"百分数|由浮点数和单位标识符组成的长度值",[134,130378,130379,130382],{},[149,130380,130381],{"align":92},"position",[149,130383,130384],{"align":92},"top|center|bottom|left|center|right 方位名词",[170,130386,130387],{},"其他说明：",[170,130389,130390],{},"①参数是方位名词",[170,130392,130393],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[170,130395,130396],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[170,130398,130399],{},"②参数是精确单位",[170,130401,130402],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[170,130404,130405],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[170,130407,130408],{},"③参数是混合单位",[170,130410,130411],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,130413,130415],{"id":130414},"_825-背景图片固定","8.2.5 背景图片固定",[58,130417,130419],{"className":60,"code":130418,"language":62,"meta":63,"style":63},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[65,130420,130421,130426,130432,130444,130448,130453,130459,130469],{"__ignoreMap":63},[68,130422,130423],{"class":70,"line":71},[68,130424,130425],{"class":302},"\u002F* 背景滚动（默认） *\u002F\n",[68,130427,130428,130430],{"class":70,"line":82},[68,130429,53093],{"class":52784},[68,130431,79],{"class":78},[68,130433,130434,130437,130439,130442],{"class":70,"line":98},[68,130435,130436],{"class":85},"  background-attachment",[68,130438,89],{"class":78},[68,130440,130441],{"class":85},"scroll",[68,130443,95],{"class":78},[68,130445,130446],{"class":70,"line":104},[68,130447,101],{"class":78},[68,130449,130450],{"class":70,"line":112},[68,130451,130452],{"class":302},"\u002F* 背景固定 *\u002F\n",[68,130454,130455,130457],{"class":70,"line":124},[68,130456,53093],{"class":52784},[68,130458,79],{"class":78},[68,130460,130461,130463,130465,130467],{"class":70,"line":1496},[68,130462,130436],{"class":85},[68,130464,89],{"class":78},[68,130466,387],{"class":85},[68,130468,95],{"class":78},[68,130470,130471],{"class":70,"line":1502},[68,130472,101],{"class":78},[128,130474,130475,130484],{},[131,130476,130477],{},[134,130478,130479,130482],{},[137,130480,130481],{"align":92},"参数",[137,130483,104171],{"align":92},[144,130485,130486,130493],{},[134,130487,130488,130490],{},[149,130489,130441],{"align":92},[149,130491,130492],{"align":92},"背景图像是随对象内容滚动",[134,130494,130495,130497],{},[149,130496,387],{"align":92},[149,130498,130499],{"align":92},"背景图像固定",[19,130501,130503],{"id":130502},"_826-背景样式合写","8.2.6 背景样式合写",[58,130505,130507],{"className":60,"code":130506,"language":62,"meta":63,"style":63},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[65,130508,130509,130514,130520,130548],{"__ignoreMap":63},[68,130510,130511],{"class":70,"line":71},[68,130512,130513],{"class":302},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[68,130515,130516,130518],{"class":70,"line":82},[68,130517,53093],{"class":52784},[68,130519,79],{"class":78},[68,130521,130522,130524,130526,130528,130531,130533,130535,130537,130539,130542,130544,130546],{"class":70,"line":98},[68,130523,72089],{"class":85},[68,130525,89],{"class":78},[68,130527,62320],{"class":85},[68,130529,130530],{"class":85}," url",[68,130532,1640],{"class":78},[68,130534,130119],{"class":6705},[68,130536,15202],{"class":78},[68,130538,63214],{"class":85},[68,130540,130541],{"class":85}," fixed",[68,130543,18631],{"class":85},[68,130545,130288],{"class":85},[68,130547,95],{"class":78},[68,130549,130550],{"class":70,"line":104},[68,130551,101],{"class":78},[19,130553,130555],{"id":130554},"_827-背景色半透明","8.2.7 背景色半透明",[58,130557,130559],{"className":60,"code":130558,"language":62,"meta":63,"style":63},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[65,130560,130561,130567,130593],{"__ignoreMap":63},[68,130562,130563,130565],{"class":70,"line":71},[68,130564,53093],{"class":52784},[68,130566,79],{"class":78},[68,130568,130569,130571,130573,130575,130577,130579,130581,130583,130585,130587,130589,130591],{"class":70,"line":82},[68,130570,72089],{"class":85},[68,130572,89],{"class":78},[68,130574,56588],{"class":85},[68,130576,1640],{"class":78},[68,130578,1248],{"class":85},[68,130580,13923],{"class":78},[68,130582,1248],{"class":85},[68,130584,13923],{"class":78},[68,130586,1248],{"class":85},[68,130588,13923],{"class":78},[68,130590,101996],{"class":85},[68,130592,4209],{"class":78},[68,130594,130595],{"class":70,"line":98},[68,130596,101],{"class":78},[170,130598,100871],{},[170,130600,130601],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[170,130603,130604],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[170,130606,130607],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[170,130609,130610],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,130612,130614],{"id":130613},"_828-总结","8.2.8 总结",[128,130616,130617,130628],{},[131,130618,130619],{},[134,130620,130621,130624,130626],{},[137,130622,130623],{"align":92},"属性",[137,130625,104171],{"align":92},[137,130627,354],{"align":92},[144,130629,130630,130641,130652,130663,130674,130685,130696],{},[134,130631,130632,130635,130638],{},[149,130633,130634],{"align":92},"background-color",[149,130636,130637],{"align":92},"背景颜色",[149,130639,130640],{"align":92},"预定义的颜色值\u002F十六进制\u002FRGB代码",[134,130642,130643,130646,130649],{},[149,130644,130645],{"align":92},"background-image",[149,130647,130648],{"align":92},"背景图片",[149,130650,130651],{"align":92},"url(图片路径)",[134,130653,130654,130657,130660],{},[149,130655,130656],{"align":92},"background-repeat",[149,130658,130659],{"align":92},"是否平铺",[149,130661,130662],{"align":92},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[134,130664,130665,130668,130671],{},[149,130666,130667],{"align":92},"background-position",[149,130669,130670],{"align":92},"背景位置",[149,130672,130673],{"align":92},"length\u002Fposition 分别是x和y坐标",[134,130675,130676,130679,130682],{},[149,130677,130678],{"align":92},"background-attachment",[149,130680,130681],{"align":92},"背景附着",[149,130683,130684],{"align":92},"scroll(背景滚动) \u002Ffixed (背景固定)",[134,130686,130687,130690,130693],{},[149,130688,130689],{"align":92},"背景简写",[149,130691,130692],{"align":92},"书写更简单",[149,130694,130695],{"align":92},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[134,130697,130698,130701,130704],{},[149,130699,130700],{"align":92},"背景半透明",[149,130702,130703],{"align":92},"背景颜色半透明",[149,130705,130706],{"align":92},"background: rgba(0,0,0.3); 后面必须是4个值",[170,130708,130709],{},"颜色渐变：",[801,130711],{"style":803,"src":130712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[801,130714],{"style":803,"src":130715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,130717,130719],{"id":130718},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[58,130721,130723],{"className":128769,"code":130722,"language":128771,"meta":63,"style":63},"\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",[65,130724,130725,130740,130759,130778,130797,130816,130835],{"__ignoreMap":63},[68,130726,130727,130729,130731,130733,130735,130738],{"class":70,"line":71},[68,130728,2537],{"class":78},[68,130730,53093],{"class":52784},[68,130732,54968],{"class":74},[68,130734,1685],{"class":78},[68,130736,130737],{"class":1742},"\"nav\"",[68,130739,52791],{"class":78},[68,130741,130742,130744,130746,130748,130750,130752,130755,130757],{"class":70,"line":82},[68,130743,53626],{"class":78},[68,130745,1867],{"class":52784},[68,130747,62535],{"class":74},[68,130749,1685],{"class":78},[68,130751,62540],{"class":1742},[68,130753,130754],{"class":78},">五彩导航1\u003C\u002F",[68,130756,1867],{"class":52784},[68,130758,52791],{"class":78},[68,130760,130761,130763,130765,130767,130769,130771,130774,130776],{"class":70,"line":98},[68,130762,53626],{"class":78},[68,130764,1867],{"class":52784},[68,130766,62535],{"class":74},[68,130768,1685],{"class":78},[68,130770,62540],{"class":1742},[68,130772,130773],{"class":78},">五彩导航2\u003C\u002F",[68,130775,1867],{"class":52784},[68,130777,52791],{"class":78},[68,130779,130780,130782,130784,130786,130788,130790,130793,130795],{"class":70,"line":104},[68,130781,53626],{"class":78},[68,130783,1867],{"class":52784},[68,130785,62535],{"class":74},[68,130787,1685],{"class":78},[68,130789,62540],{"class":1742},[68,130791,130792],{"class":78},">五彩导航3\u003C\u002F",[68,130794,1867],{"class":52784},[68,130796,52791],{"class":78},[68,130798,130799,130801,130803,130805,130807,130809,130812,130814],{"class":70,"line":112},[68,130800,53626],{"class":78},[68,130802,1867],{"class":52784},[68,130804,62535],{"class":74},[68,130806,1685],{"class":78},[68,130808,62540],{"class":1742},[68,130810,130811],{"class":78},">五彩导航4\u003C\u002F",[68,130813,1867],{"class":52784},[68,130815,52791],{"class":78},[68,130817,130818,130820,130822,130824,130826,130828,130831,130833],{"class":70,"line":124},[68,130819,53626],{"class":78},[68,130821,1867],{"class":52784},[68,130823,62535],{"class":74},[68,130825,1685],{"class":78},[68,130827,62540],{"class":1742},[68,130829,130830],{"class":78},">五彩导航5\u003C\u002F",[68,130832,1867],{"class":52784},[68,130834,52791],{"class":78},[68,130836,130837,130839,130841],{"class":70,"line":1496},[68,130838,53267],{"class":78},[68,130840,53093],{"class":52784},[68,130842,52791],{"class":78},[58,130844,130846],{"className":60,"code":130845,"language":62,"meta":63,"style":63},".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",[65,130847,130848,130857,130867,130879,130891,130901,130913,130923,130927,130952,130975,130998,131021],{"__ignoreMap":63},[68,130849,130850,130853,130855],{"class":70,"line":71},[68,130851,130852],{"class":74},".nav",[68,130854,2891],{"class":52784},[68,130856,79],{"class":78},[68,130858,130859,130861,130863,130865],{"class":70,"line":82},[68,130860,129637],{"class":85},[68,130862,89],{"class":78},[68,130864,73861],{"class":85},[68,130866,95],{"class":78},[68,130868,130869,130871,130873,130875,130877],{"class":70,"line":98},[68,130870,72046],{"class":85},[68,130872,89],{"class":78},[68,130874,2444],{"class":85},[68,130876,317],{"class":316},[68,130878,95],{"class":78},[68,130880,130881,130883,130885,130887,130889],{"class":70,"line":104},[68,130882,72266],{"class":85},[68,130884,89],{"class":78},[68,130886,2483],{"class":85},[68,130888,317],{"class":316},[68,130890,95],{"class":78},[68,130892,130893,130895,130897,130899],{"class":70,"line":112},[68,130894,72004],{"class":85},[68,130896,89],{"class":78},[68,130898,53074],{"class":85},[68,130900,95],{"class":78},[68,130902,130903,130905,130907,130909,130911],{"class":70,"line":124},[68,130904,128706],{"class":85},[68,130906,89],{"class":78},[68,130908,2483],{"class":85},[68,130910,317],{"class":316},[68,130912,95],{"class":78},[68,130914,130915,130917,130919,130921],{"class":70,"line":1496},[68,130916,72383],{"class":85},[68,130918,89],{"class":78},[68,130920,62320],{"class":85},[68,130922,95],{"class":78},[68,130924,130925],{"class":70,"line":1502},[68,130926,101],{"class":78},[68,130928,130929,130931,130933,130936,130938,130940,130943,130945,130947,130949],{"class":70,"line":1510},[68,130930,130852],{"class":74},[68,130932,2891],{"class":52784},[68,130934,130935],{"class":74},":nth-child",[68,130937,1640],{"class":78},[68,130939,1846],{"class":85},[68,130941,130942],{"class":78},") { ",[68,130944,130634],{"class":85},[68,130946,89],{"class":78},[68,130948,130052],{"class":85},[68,130950,130951],{"class":78},"; }\n",[68,130953,130954,130956,130958,130960,130962,130964,130966,130968,130970,130973],{"class":70,"line":1521},[68,130955,130852],{"class":74},[68,130957,2891],{"class":52784},[68,130959,130935],{"class":74},[68,130961,1640],{"class":78},[68,130963,1715],{"class":85},[68,130965,130942],{"class":78},[68,130967,130634],{"class":85},[68,130969,89],{"class":78},[68,130971,130972],{"class":85},"#ff0000",[68,130974,130951],{"class":78},[68,130976,130977,130979,130981,130983,130985,130987,130989,130991,130993,130996],{"class":70,"line":3103},[68,130978,130852],{"class":74},[68,130980,2891],{"class":52784},[68,130982,130935],{"class":74},[68,130984,1640],{"class":78},[68,130986,1709],{"class":85},[68,130988,130942],{"class":78},[68,130990,130634],{"class":85},[68,130992,89],{"class":78},[68,130994,130995],{"class":85},"#00a4ff",[68,130997,130951],{"class":78},[68,130999,131000,131002,131004,131006,131008,131010,131012,131014,131016,131019],{"class":70,"line":3108},[68,131001,130852],{"class":74},[68,131003,2891],{"class":52784},[68,131005,130935],{"class":74},[68,131007,1640],{"class":78},[68,131009,1922],{"class":85},[68,131011,130942],{"class":78},[68,131013,130634],{"class":85},[68,131015,89],{"class":78},[68,131017,131018],{"class":85},"#ff00ff",[68,131020,130951],{"class":78},[68,131022,131023,131025,131027,131029,131031,131033,131035,131037,131039,131042],{"class":70,"line":3114},[68,131024,130852],{"class":74},[68,131026,2891],{"class":52784},[68,131028,130935],{"class":74},[68,131030,1640],{"class":78},[68,131032,1948],{"class":85},[68,131034,130942],{"class":78},[68,131036,130634],{"class":85},[68,131038,89],{"class":78},[68,131040,131041],{"class":85},"#00ff00",[68,131043,130951],{"class":78},[14,131045,131047],{"id":131046},"_83-css三大特性","8.3 css三大特性",[19,131049,131051],{"id":131050},"_831-层叠性","8.3.1 层叠性",[170,131053,131054],{},"为了解决样式冲突问题",[170,131056,131057],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[170,131059,131060],{},"   ②样式不冲突，不会层叠",[19,131062,131064],{"id":131063},"_832-继承性","8.3.2 继承性",[170,131066,131067],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[170,131069,131070],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[58,131072,131074],{"className":60,"code":131073,"language":62,"meta":63,"style":63},"p {\n  color: #333;\n}\n",[65,131075,131076,131082,131092],{"__ignoreMap":63},[68,131077,131078,131080],{"class":70,"line":71},[68,131079,170],{"class":52784},[68,131081,79],{"class":78},[68,131083,131084,131086,131088,131090],{"class":70,"line":82},[68,131085,72383],{"class":85},[68,131087,89],{"class":78},[68,131089,63847],{"class":85},[68,131091,95],{"class":78},[68,131093,131094],{"class":70,"line":98},[68,131095,101],{"class":78},[801,131097],{"style":803,"src":131098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[170,131100,131101],{},"解释：①行高可以跟单位也可以不跟单位",[170,131103,131104],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[170,131106,131107],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[170,131109,131110],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,131112,131114],{"id":131113},"_833-优先级","8.3.3 优先级",[263,131116,131117,131120],{},[27,131118,131119],{},"选择器相同，则执行层叠性",[27,131121,131122],{},"选择器不同，则根据选择器权重执行",[128,131124,131125,131135],{},[131,131126,131127],{},[134,131128,131129,131132],{},[137,131130,131131],{"align":92},"选择器",[137,131133,131134],{"align":92},"选择器权重",[144,131136,131137,131145,131153,131161,131169,131177],{},[134,131138,131139,131142],{},[149,131140,131141],{"align":92},"继承 或者*",[149,131143,131144],{"align":92},"0，0，0，0",[134,131146,131147,131150],{},[149,131148,131149],{"align":92},"标签选择器",[149,131151,131152],{"align":92},"0，0，0，1",[134,131154,131155,131158],{},[149,131156,131157],{"align":92},"类选择器，伪类选择器",[149,131159,131160],{"align":92},"0，0，1，0",[134,131162,131163,131166],{},[149,131164,131165],{"align":92},"ID选择器",[149,131167,131168],{"align":92},"0，1，0，0",[134,131170,131171,131174],{},[149,131172,131173],{"align":92},"行内样式",[149,131175,131176],{"align":92},"1，0，0，0",[134,131178,131179,131182],{},[149,131180,131181],{"align":92},"！important",[149,131183,131184],{"align":92},"无穷大",[170,131186,131187],{},"! important用法：",[58,131189,131191],{"className":60,"code":131190,"language":62,"meta":63,"style":63},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[65,131192,131193,131198,131204,131217,131221,131226,131232,131242],{"__ignoreMap":63},[68,131194,131195],{"class":70,"line":71},[68,131196,131197],{"class":302},"\u002F* !important 拥有最高优先级 *\u002F\n",[68,131199,131200,131202],{"class":70,"line":82},[68,131201,53093],{"class":52784},[68,131203,79],{"class":78},[68,131205,131206,131208,131210,131212,131215],{"class":70,"line":98},[68,131207,72383],{"class":85},[68,131209,89],{"class":78},[68,131211,53127],{"class":85},[68,131213,131214],{"class":316}," !important",[68,131216,95],{"class":78},[68,131218,131219],{"class":70,"line":104},[68,131220,101],{"class":78},[68,131222,131223],{"class":70,"line":112},[68,131224,131225],{"class":302},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[68,131227,131228,131230],{"class":70,"line":124},[68,131229,53093],{"class":52784},[68,131231,79],{"class":78},[68,131233,131234,131236,131238,131240],{"class":70,"line":1496},[68,131235,72383],{"class":85},[68,131237,89],{"class":78},[68,131239,58899],{"class":85},[68,131241,95],{"class":78},[68,131243,131244],{"class":70,"line":1502},[68,131245,101],{"class":78},[170,131247,131248],{},"优先级注意点：",[170,131250,131251],{},"①权重是有4组数字组成,但是不会有进位",[170,131253,131254],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[170,131256,131257],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[170,131259,131260],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[170,131262,131263],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[170,131265,131266],{},"⑥复合选择器",[128,131268,131269,131279],{},[131,131270,131271],{},[134,131272,131273,131276],{},[137,131274,131275],{"align":92},"div ul li",[137,131277,131278],{"align":92},"0,0,0,3",[144,131280,131281,131289,131297],{},[134,131282,131283,131286],{},[149,131284,131285],{"align":92},".nav ul li",[149,131287,131288],{"align":92},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[134,131290,131291,131294],{},[149,131292,131293],{"align":92},"a:hover",[149,131295,131296],{"align":92},"0,0,1,1",[134,131298,131299,131302],{},[149,131300,131301],{"align":92},".nav a",[149,131303,131296],{"align":92},[1553,131305,131306],{},"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":63,"searchDepth":82,"depth":82,"links":131308},[131309,131317,131328],{"id":129417,"depth":82,"text":129418,"children":131310},[131311,131312,131313,131314,131315,131316],{"id":129430,"depth":98,"text":129431},{"id":129502,"depth":98,"text":129503},{"id":129574,"depth":98,"text":129575},{"id":129605,"depth":98,"text":129606},{"id":129612,"depth":98,"text":129613},{"id":129765,"depth":98,"text":129766},{"id":130073,"depth":82,"text":130074,"children":131318},[131319,131320,131321,131322,131323,131324,131325,131326,131327],{"id":130080,"depth":98,"text":130081},{"id":130090,"depth":98,"text":130091},{"id":130186,"depth":98,"text":130187},{"id":130259,"depth":98,"text":130260},{"id":130414,"depth":98,"text":130415},{"id":130502,"depth":98,"text":130503},{"id":130554,"depth":98,"text":130555},{"id":130613,"depth":98,"text":130614},{"id":130718,"depth":98,"text":130719},{"id":131046,"depth":82,"text":131047,"children":131329},[131330,131331,131332],{"id":131050,"depth":98,"text":131051},{"id":131063,"depth":98,"text":131064},{"id":131113,"depth":98,"text":131114},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129409,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131339,"title":131340,"body":131341,"description":1564,"extension":1565,"meta":132925,"navigation":1567,"path":132926,"seo":132927,"stem":132928,"__hash__":132929},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131342,"toc":132904},[131343,131346,131350,131353,131356,131359,131362,131365,131368,131371,131375,131383,131420,131456,131459,131473,131478,131512,131515,131608,131613,131616,131646,131649,131654,131662,131666,131673,131719,131763,131768,131771,131774,131777,131780,131783,131786,131788,131791,131795,131800,131844,131849,131852,131855,131890,131895,131898,131901,131904,131907,131939,131942,131945,131948,131980,131983,131986,131989,131993,131996,132028,132031,132035,132055,132058,132066,132069,132073,132078,132081,132113,132118,132121,132159,132163,132168,132171,132174,132205,132208,132225,132230,132282,132342,132347,132401,132439,132443,132447,132450,132454,132462,132465,132467,132478,132483,132527,132561,132564,132567,132570,132573,132617,132620,132623,132626,132629,132632,132635,132679,132682,132685,132688,132691,132694,132697,132703,132706,132750,132753,132756,132759,132762,132765,132809,132812,132814,132817,132821,132825,132863,132867,132870,132873,132877,132885,132889,132892,132895,132898,132901],[10,131344,131340],{"id":131345},"_9-css盒模型浮动与切图",[14,131347,131349],{"id":131348},"_91-盒子模型","9.1 盒子模型",[170,131351,131352],{},"利用盒子来设计网页",[170,131354,131355],{},"盒子包含：边框、外边距、内边距、实际内容",[170,131357,131358],{},"网页布局设置：",[170,131360,131361],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[170,131363,131364],{},"②利用css设置好盒子样式，然后摆放到相应位置",[170,131366,131367],{},"③往盒子里装内容",[801,131369],{"style":803,"src":131370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,131372,131374],{"id":131373},"_911-边框border","9.1.1 边框（border）",[263,131376,131377,131380],{},[27,131378,131379],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[27,131381,131382],{},"语法",[58,131384,131386],{"className":60,"code":131385,"language":62,"meta":63,"style":63},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[65,131387,131388,131393,131399,131416],{"__ignoreMap":63},[68,131389,131390],{"class":70,"line":71},[68,131391,131392],{"class":302},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[68,131394,131395,131397],{"class":70,"line":82},[68,131396,53093],{"class":52784},[68,131398,79],{"class":78},[68,131400,131401,131403,131405,131407,131409,131411,131414],{"class":70,"line":98},[68,131402,72374],{"class":85},[68,131404,89],{"class":78},[68,131406,1846],{"class":85},[68,131408,317],{"class":316},[68,131410,53003],{"class":85},[68,131412,131413],{"class":85}," #ccc",[68,131415,95],{"class":78},[68,131417,131418],{"class":70,"line":104},[68,131419,101],{"class":78},[128,131421,131422,131430],{},[131,131423,131424],{},[134,131425,131426,131428],{},[137,131427,130623],{"align":92},[137,131429,104171],{"align":92},[144,131431,131432,131440,131448],{},[134,131433,131434,131437],{},[149,131435,131436],{"align":92},"border-width",[149,131438,131439],{"align":92},"定义边框粗细，单位是px",[134,131441,131442,131445],{},[149,131443,131444],{"align":92},"border-style",[149,131446,131447],{"align":92},"边框的样式",[134,131449,131450,131453],{},[149,131451,131452],{"align":92},"border-color",[149,131454,131455],{"align":92},"边框的颜色",[170,131457,131458],{},"边框样式 border-style 可以设置如下值：",[24,131460,131461,131464,131467,131470],{},[27,131462,131463],{},"none：没有边框即忽略所有边框的宽度（默认值）",[27,131465,131466],{},"solid：边框为单实线(最为常用的)",[27,131468,131469],{},"dashed：边框为虚线",[27,131471,131472],{},"dotted：边框为点线",[263,131474,131475],{"start":98},[27,131476,131477],{},"边框的合写分写",[58,131479,131480],{"className":60,"code":131385,"language":62,"meta":63,"style":63},[65,131481,131482,131486,131492,131508],{"__ignoreMap":63},[68,131483,131484],{"class":70,"line":71},[68,131485,131392],{"class":302},[68,131487,131488,131490],{"class":70,"line":82},[68,131489,53093],{"class":52784},[68,131491,79],{"class":78},[68,131493,131494,131496,131498,131500,131502,131504,131506],{"class":70,"line":98},[68,131495,72374],{"class":85},[68,131497,89],{"class":78},[68,131499,1846],{"class":85},[68,131501,317],{"class":316},[68,131503,53003],{"class":85},[68,131505,131413],{"class":85},[68,131507,95],{"class":78},[68,131509,131510],{"class":70,"line":104},[68,131511,101],{"class":78},[170,131513,131514],{},"边框分开写法：",[58,131516,131518],{"className":60,"code":131517,"language":62,"meta":63,"style":63},"\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",[65,131519,131520,131525,131531,131549,131567,131586,131604],{"__ignoreMap":63},[68,131521,131522],{"class":70,"line":71},[68,131523,131524],{"class":302},"\u002F* 边框分开写法 *\u002F\n",[68,131526,131527,131529],{"class":70,"line":82},[68,131528,53093],{"class":52784},[68,131530,79],{"class":78},[68,131532,131533,131536,131538,131540,131542,131544,131547],{"class":70,"line":98},[68,131534,131535],{"class":85},"  border-top",[68,131537,89],{"class":78},[68,131539,1846],{"class":85},[68,131541,317],{"class":316},[68,131543,53003],{"class":85},[68,131545,131546],{"class":85}," #000",[68,131548,95],{"class":78},[68,131550,131551,131554,131556,131558,131560,131562,131565],{"class":70,"line":104},[68,131552,131553],{"class":85},"  border-right",[68,131555,89],{"class":78},[68,131557,1715],{"class":85},[68,131559,317],{"class":316},[68,131561,63719],{"class":85},[68,131563,131564],{"class":85}," #333",[68,131566,95],{"class":78},[68,131568,131569,131572,131574,131576,131578,131581,131584],{"class":70,"line":112},[68,131570,131571],{"class":85},"  border-bottom",[68,131573,89],{"class":78},[68,131575,1709],{"class":85},[68,131577,317],{"class":316},[68,131579,131580],{"class":85}," dotted",[68,131582,131583],{"class":85}," #666",[68,131585,95],{"class":78},[68,131587,131588,131591,131593,131595,131597,131599,131602],{"class":70,"line":124},[68,131589,131590],{"class":85},"  border-left",[68,131592,89],{"class":78},[68,131594,1846],{"class":85},[68,131596,317],{"class":316},[68,131598,53003],{"class":85},[68,131600,131601],{"class":85}," #999",[68,131603,95],{"class":78},[68,131605,131606],{"class":70,"line":1496},[68,131607,101],{"class":78},[263,131609,131610],{"start":104},[27,131611,131612],{},"表格的细线边框",[170,131614,131615],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[58,131617,131619],{"className":60,"code":131618,"language":62,"meta":63,"style":63},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[65,131620,131621,131626,131632,131642],{"__ignoreMap":63},[68,131622,131623],{"class":70,"line":71},[68,131624,131625],{"class":302},"\u002F* 表格细线边框合并 *\u002F\n",[68,131627,131628,131630],{"class":70,"line":82},[68,131629,128],{"class":52784},[68,131631,79],{"class":78},[68,131633,131634,131636,131638,131640],{"class":70,"line":98},[68,131635,72056],{"class":85},[68,131637,89],{"class":78},[68,131639,66513],{"class":85},[68,131641,95],{"class":78},[68,131643,131644],{"class":70,"line":104},[68,131645,101],{"class":78},[170,131647,131648],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[263,131650,131651],{"start":112},[27,131652,131653],{},"解决边框额外增加盒子的实际大小的方法：",[24,131655,131656,131659],{},[27,131657,131658],{},"测量盒子大小的时候,不量边框",[27,131660,131661],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,131663,131665],{"id":131664},"_912-内边距","9.1.2 内边距",[263,131667,131668,131671],{},[27,131669,131670],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[27,131672,131382],{},[128,131674,131675,131685],{},[131,131676,131677],{},[134,131678,131679,131682],{},[137,131680,131681],{"align":92},"值的个数",[137,131683,131684],{"align":92},"表达意思",[144,131686,131687,131695,131703,131711],{},[134,131688,131689,131692],{},[149,131690,131691],{"align":92},"padding: 5px;",[149,131693,131694],{"align":92},"1个值，代表上下左右都有5个元素",[134,131696,131697,131700],{},[149,131698,131699],{"align":92},"padding: 5px 10px;",[149,131701,131702],{"align":92},"2个值，代表上下内边距为5像素，左右内边距为10像素",[134,131704,131705,131708],{},[149,131706,131707],{"align":92},"padding: 5px 10px 20px;",[149,131709,131710],{"align":92},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[134,131712,131713,131716],{},[149,131714,131715],{"align":92},"padding: 5px 10px 20px 30px;",[149,131717,131718],{"align":92},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[128,131720,131721,131729],{},[131,131722,131723],{},[134,131724,131725,131727],{},[137,131726,130623],{"align":92},[137,131728,104171],{"align":92},[144,131730,131731,131739,131747,131755],{},[134,131732,131733,131736],{},[149,131734,131735],{"align":92},"padding-left",[149,131737,131738],{"align":92},"左内边距",[134,131740,131741,131744],{},[149,131742,131743],{"align":92},"padding-right",[149,131745,131746],{"align":92},"右内边距",[134,131748,131749,131752],{},[149,131750,131751],{"align":92},"padding-top",[149,131753,131754],{"align":92},"上内边距",[134,131756,131757,131760],{},[149,131758,131759],{"align":92},"padding-bottom",[149,131761,131762],{"align":92},"下内边距",[263,131764,131765],{"start":98},[27,131766,131767],{},"内边距会影响盒子的实际大小",[170,131769,131770],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[170,131772,131773],{},"①内容和边框有了距离，添加了内边距",[170,131775,131776],{},"②padding影响了盒子实际大小",[170,131778,131779],{},"内边距对盒子大小的影响：",[170,131781,131782],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[170,131784,131785],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[170,131787,96695],{},[170,131789,131790],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,131792,131794],{"id":131793},"_913-外边距","9.1.3 外边距",[263,131796,131797],{},[27,131798,131799],{},"控制盒子与盒子之间的距离",[128,131801,131802,131810],{},[131,131803,131804],{},[134,131805,131806,131808],{},[137,131807,130623],{"align":92},[137,131809,104171],{"align":92},[144,131811,131812,131820,131828,131836],{},[134,131813,131814,131817],{},[149,131815,131816],{"align":92},"margin-left",[149,131818,131819],{"align":92},"左外边距",[134,131821,131822,131825],{},[149,131823,131824],{"align":92},"margin-right",[149,131826,131827],{"align":92},"右外边距",[134,131829,131830,131833],{},[149,131831,131832],{"align":92},"margin-top",[149,131834,131835],{"align":92},"上外边距",[134,131837,131838,131841],{},[149,131839,131840],{"align":92},"margin-bottom",[149,131842,131843],{"align":92},"下外边距",[263,131845,131846],{"start":82},[27,131847,131848],{},"外边距可以让块级盒子水平居中的两个条件：",[170,131850,131851],{},"①盒子必须指定了宽度（width）",[170,131853,131854],{},"②盒子左右的外边距都设置为 auto",[58,131856,131858],{"className":60,"code":131857,"language":62,"meta":63,"style":63},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,131859,131860,131865,131871,131886],{"__ignoreMap":63},[68,131861,131862],{"class":70,"line":71},[68,131863,131864],{"class":302},"\u002F* margin 复合写法（同上） *\u002F\n",[68,131866,131867,131869],{"class":70,"line":82},[68,131868,284],{"class":74},[68,131870,79],{"class":78},[68,131872,131873,131875,131877,131879,131881,131883],{"class":70,"line":98},[68,131874,71948],{"class":85},[68,131876,89],{"class":78},[68,131878,1248],{"class":85},[68,131880,53038],{"class":85},[68,131882,299],{"class":78},[68,131884,131885],{"class":302},"\u002F* 块级盒子水平居中 *\u002F\n",[68,131887,131888],{"class":70,"line":104},[68,131889,101],{"class":78},[263,131891,131892],{"start":98},[27,131893,131894],{},"外边距塌陷问题",[170,131896,131897],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[801,131899],{"style":803,"src":131900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[170,131902,131903],{},"解决方案：",[170,131905,131906],{},"①可以为父亲元素定义上边距",[58,131908,131909],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,131910,131911,131915,131921,131935],{"__ignoreMap":63},[68,131912,131913],{"class":70,"line":71},[68,131914,131864],{"class":302},[68,131916,131917,131919],{"class":70,"line":82},[68,131918,284],{"class":74},[68,131920,79],{"class":78},[68,131922,131923,131925,131927,131929,131931,131933],{"class":70,"line":98},[68,131924,71948],{"class":85},[68,131926,89],{"class":78},[68,131928,1248],{"class":85},[68,131930,53038],{"class":85},[68,131932,299],{"class":78},[68,131934,131885],{"class":302},[68,131936,131937],{"class":70,"line":104},[68,131938,101],{"class":78},[170,131940,131941],{},"②可以为父亲元素定义上内边距",[170,131943,131944],{},"③可以为父亲元素添加overflow:hidden",[801,131946],{"style":803,"src":131947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[58,131949,131950],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,131951,131952,131956,131962,131976],{"__ignoreMap":63},[68,131953,131954],{"class":70,"line":71},[68,131955,131864],{"class":302},[68,131957,131958,131960],{"class":70,"line":82},[68,131959,284],{"class":74},[68,131961,79],{"class":78},[68,131963,131964,131966,131968,131970,131972,131974],{"class":70,"line":98},[68,131965,71948],{"class":85},[68,131967,89],{"class":78},[68,131969,1248],{"class":85},[68,131971,53038],{"class":85},[68,131973,299],{"class":78},[68,131975,131885],{"class":302},[68,131977,131978],{"class":70,"line":104},[68,131979,101],{"class":78},[801,131981],{"style":803,"src":131982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[170,131984,131985],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[170,131987,131988],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,131990,131992],{"id":131991},"_914-清除内外边距","9.1.4 清除内外边距",[170,131994,131995],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[58,131997,131998],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,131999,132000,132004,132010,132024],{"__ignoreMap":63},[68,132001,132002],{"class":70,"line":71},[68,132003,131864],{"class":302},[68,132005,132006,132008],{"class":70,"line":82},[68,132007,284],{"class":74},[68,132009,79],{"class":78},[68,132011,132012,132014,132016,132018,132020,132022],{"class":70,"line":98},[68,132013,71948],{"class":85},[68,132015,89],{"class":78},[68,132017,1248],{"class":85},[68,132019,53038],{"class":85},[68,132021,299],{"class":78},[68,132023,131885],{"class":302},[68,132025,132026],{"class":70,"line":104},[68,132027,101],{"class":78},[170,132029,132030],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,132032,132034],{"id":132033},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[24,132036,132037,132040,132043,132046,132049,132052],{},[27,132038,132039],{},"文件→打开 ：可以打开我们要测量的图片",[27,132041,132042],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[27,132044,132045],{},"右击标尺，把里面的单位改为像素",[27,132047,132048],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[27,132050,132051],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[27,132053,132054],{},"用选区拖动 可以测量大小",[801,132056],{"style":803,"src":132057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[24,132059,132060,132063],{},[27,132061,132062],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[27,132064,132065],{},"吸管取色工具",[801,132067],{"style":803,"src":132068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,132070,132072],{"id":132071},"_916-案例","9.1.6 案例",[263,132074,132075],{},[27,132076,132077],{},"小米商品",[801,132079],{"style":803,"src":132080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[58,132082,132083],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,132084,132085,132089,132095,132109],{"__ignoreMap":63},[68,132086,132087],{"class":70,"line":71},[68,132088,131864],{"class":302},[68,132090,132091,132093],{"class":70,"line":82},[68,132092,284],{"class":74},[68,132094,79],{"class":78},[68,132096,132097,132099,132101,132103,132105,132107],{"class":70,"line":98},[68,132098,71948],{"class":85},[68,132100,89],{"class":78},[68,132102,1248],{"class":85},[68,132104,53038],{"class":85},[68,132106,299],{"class":78},[68,132108,131885],{"class":302},[68,132110,132111],{"class":70,"line":104},[68,132112,101],{"class":78},[263,132114,132115],{"start":82},[27,132116,132117],{},"快报模块",[801,132119],{"style":803,"src":132120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[58,132122,132124],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[65,132125,132126,132131,132146,132151],{"__ignoreMap":63},[68,132127,132128],{"class":70,"line":71},[68,132129,132130],{"class":302},"\u003C!-- HTML 代码示例 -->\n",[68,132132,132133,132135,132137,132139,132141,132144],{"class":70,"line":82},[68,132134,2537],{"class":78},[68,132136,53093],{"class":52784},[68,132138,54968],{"class":74},[68,132140,1685],{"class":78},[68,132142,132143],{"class":1742},"\"example\"",[68,132145,52791],{"class":78},[68,132147,132148],{"class":70,"line":98},[68,132149,132150],{"class":78},"  示例内容\n",[68,132152,132153,132155,132157],{"class":70,"line":104},[68,132154,53267],{"class":78},[68,132156,53093],{"class":52784},[68,132158,52791],{"class":78},[19,132160,132162],{"id":132161},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[263,132164,132165],{},[27,132166,132167],{},"圆角边框",[170,132169,132170],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[801,132172],{"style":803,"src":132173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[58,132175,132177],{"className":60,"code":132176,"language":62,"meta":63,"style":63},"div {\n  border: 1px solid #ccc;\n}\n",[65,132178,132179,132185,132201],{"__ignoreMap":63},[68,132180,132181,132183],{"class":70,"line":71},[68,132182,53093],{"class":52784},[68,132184,79],{"class":78},[68,132186,132187,132189,132191,132193,132195,132197,132199],{"class":70,"line":82},[68,132188,72374],{"class":85},[68,132190,89],{"class":78},[68,132192,1846],{"class":85},[68,132194,317],{"class":316},[68,132196,53003],{"class":85},[68,132198,131413],{"class":85},[68,132200,95],{"class":78},[68,132202,132203],{"class":70,"line":98},[68,132204,101],{"class":78},[170,132206,132207],{},"解释:",[24,132209,132210,132213,132216,132219,132222],{},[27,132211,132212],{},"参数值可以为数值或百分比的形式",[27,132214,132215],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[27,132217,132218],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[27,132220,132221],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[27,132223,132224],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[263,132226,132227],{"start":82},[27,132228,132229],{},"盒子阴影",[58,132231,132233],{"className":60,"code":132232,"language":62,"meta":63,"style":63},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[65,132234,132235,132241,132278],{"__ignoreMap":63},[68,132236,132237,132239],{"class":70,"line":71},[68,132238,53093],{"class":52784},[68,132240,79],{"class":78},[68,132242,132243,132246,132248,132250,132252,132254,132256,132258,132260,132262,132264,132266,132268,132270,132272,132274,132276],{"class":70,"line":82},[68,132244,132245],{"class":85},"  box-shadow",[68,132247,89],{"class":78},[68,132249,1248],{"class":85},[68,132251,16243],{"class":85},[68,132253,317],{"class":316},[68,132255,3528],{"class":85},[68,132257,317],{"class":316},[68,132259,80244],{"class":85},[68,132261,1640],{"class":78},[68,132263,1248],{"class":85},[68,132265,13923],{"class":78},[68,132267,1248],{"class":85},[68,132269,13923],{"class":78},[68,132271,1248],{"class":85},[68,132273,13923],{"class":78},[68,132275,87686],{"class":85},[68,132277,4209],{"class":78},[68,132279,132280],{"class":70,"line":98},[68,132281,101],{"class":78},[128,132283,132284,132292],{},[131,132285,132286],{},[134,132287,132288,132290],{},[137,132289,354],{"align":92},[137,132291,142],{"align":92},[144,132293,132294,132302,132310,132318,132326,132334],{},[134,132295,132296,132299],{},[149,132297,132298],{"align":92},"h-shadow",[149,132300,132301],{"align":92},"必需,水平阴影的位置,允许负值",[134,132303,132304,132307],{},[149,132305,132306],{"align":92},"v-shadow",[149,132308,132309],{"align":92},"必需,垂直阴影的位置,允许负值",[134,132311,132312,132315],{},[149,132313,132314],{"align":92},"blur",[149,132316,132317],{"align":92},"可选,模糊距离,就是影子的虚实",[134,132319,132320,132323],{},[149,132321,132322],{"align":92},"spread",[149,132324,132325],{"align":92},"可选,阴影尺寸",[134,132327,132328,132331],{},[149,132329,132330],{"align":92},"color",[149,132332,132333],{"align":92},"可选,阴影的颜色",[134,132335,132336,132339],{},[149,132337,132338],{"align":92},"inset",[149,132340,132341],{"align":92},"可选,将外部阴影(outset)改为内部阴影",[263,132343,132344],{"start":98},[27,132345,132346],{},"文字阴影",[58,132348,132350],{"className":60,"code":132349,"language":62,"meta":63,"style":63},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[65,132351,132352,132358,132397],{"__ignoreMap":63},[68,132353,132354,132356],{"class":70,"line":71},[68,132355,170],{"class":52784},[68,132357,79],{"class":78},[68,132359,132360,132363,132365,132367,132369,132371,132373,132375,132377,132379,132381,132383,132385,132387,132389,132391,132393,132395],{"class":70,"line":82},[68,132361,132362],{"class":85},"  text-shadow",[68,132364,89],{"class":78},[68,132366,1846],{"class":85},[68,132368,317],{"class":316},[68,132370,26604],{"class":85},[68,132372,317],{"class":316},[68,132374,16243],{"class":85},[68,132376,317],{"class":316},[68,132378,80244],{"class":85},[68,132380,1640],{"class":78},[68,132382,1248],{"class":85},[68,132384,13923],{"class":78},[68,132386,1248],{"class":85},[68,132388,13923],{"class":78},[68,132390,1248],{"class":85},[68,132392,13923],{"class":78},[68,132394,101996],{"class":85},[68,132396,4209],{"class":78},[68,132398,132399],{"class":70,"line":98},[68,132400,101],{"class":78},[128,132402,132403,132411],{},[131,132404,132405],{},[134,132406,132407,132409],{},[137,132408,354],{"align":92},[137,132410,142],{"align":92},[144,132412,132413,132419,132426,132433],{},[134,132414,132415,132417],{},[149,132416,132298],{"align":92},[149,132418,132301],{"align":92},[134,132420,132421,132423],{},[149,132422,132306],{"align":92},[149,132424,132425],{"align":92},"必需,垂直阴影位置,允许负值",[134,132427,132428,132430],{},[149,132429,132314],{"align":92},[149,132431,132432],{"align":92},"可选,模糊的距离",[134,132434,132435,132437],{},[149,132436,132330],{"align":92},[149,132438,132333],{"align":92},[14,132440,132442],{"id":132441},"_92-浮动","9.2 浮动",[19,132444,132446],{"id":132445},"_921-浮动介绍","9.2.1 浮动介绍",[170,132448,132449],{},"在16.2中详细介绍",[19,132451,132453],{"id":132452},"_922-清除浮动","9.2.2 清除浮动",[263,132455,132456,132459],{},[27,132457,132458],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[27,132460,132461],{},"清除浮动的本质",[170,132463,132464],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[170,132466,1106],{},[24,132468,132469,132472,132475],{},[27,132470,132471],{},"如果父盒子本身有高度，则不需要清除浮动",[27,132473,132474],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[27,132476,132477],{},"父级有了高度，就不会影响下面的标准流了",[263,132479,132480],{"start":98},[27,132481,132482],{},"清除浮动样式",[58,132484,132485],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132486,132487,132493,132503,132507,132513,132523],{"__ignoreMap":63},[68,132488,132489,132491],{"class":70,"line":71},[68,132490,75],{"class":74},[68,132492,79],{"class":78},[68,132494,132495,132497,132499,132501],{"class":70,"line":82},[68,132496,86],{"class":85},[68,132498,89],{"class":78},[68,132500,92],{"class":85},[68,132502,95],{"class":78},[68,132504,132505],{"class":70,"line":98},[68,132506,101],{"class":78},[68,132508,132509,132511],{"class":70,"line":104},[68,132510,107],{"class":74},[68,132512,79],{"class":78},[68,132514,132515,132517,132519,132521],{"class":70,"line":112},[68,132516,86],{"class":85},[68,132518,89],{"class":78},[68,132520,119],{"class":85},[68,132522,95],{"class":78},[68,132524,132525],{"class":70,"line":124},[68,132526,101],{"class":78},[128,132528,132529,132537],{},[131,132530,132531],{},[134,132532,132533,132535],{},[137,132534,139],{"align":92},[137,132536,142],{"align":92},[144,132538,132539,132546,132553],{},[134,132540,132541,132543],{},[149,132542,92],{"align":92},[149,132544,132545],{"align":92},"不允许左侧有浮动元素（清除左侧浮动的影响）",[134,132547,132548,132550],{},[149,132549,119],{"align":92},[149,132551,132552],{"align":92},"不允许右侧有浮动元素（清除右侧浮动的影响）",[134,132554,132555,132558],{},[149,132556,132557],{"align":92},"both",[149,132559,132560],{"align":92},"同时清除左右侧浮动的影响",[170,132562,132563],{},"法一",[170,132565,132566],{},"额外标签法也称为隔墙法",[170,132568,132569],{},"使用方式：",[170,132571,132572],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[58,132574,132575],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132576,132577,132583,132593,132597,132603,132613],{"__ignoreMap":63},[68,132578,132579,132581],{"class":70,"line":71},[68,132580,75],{"class":74},[68,132582,79],{"class":78},[68,132584,132585,132587,132589,132591],{"class":70,"line":82},[68,132586,86],{"class":85},[68,132588,89],{"class":78},[68,132590,92],{"class":85},[68,132592,95],{"class":78},[68,132594,132595],{"class":70,"line":98},[68,132596,101],{"class":78},[68,132598,132599,132601],{"class":70,"line":104},[68,132600,107],{"class":74},[68,132602,79],{"class":78},[68,132604,132605,132607,132609,132611],{"class":70,"line":112},[68,132606,86],{"class":85},[68,132608,89],{"class":78},[68,132610,119],{"class":85},[68,132612,95],{"class":78},[68,132614,132615],{"class":70,"line":124},[68,132616,101],{"class":78},[170,132618,132619],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[170,132621,132622],{},"优点： 通俗易懂，书写方便",[170,132624,132625],{},"缺点： 添加许多无意义的标签，结构化较差",[170,132627,132628],{},"注意： 要求这个新的空标签必须是块级元素。",[170,132630,132631],{},"法二",[170,132633,132634],{},"父级添加overflow属性",[58,132636,132637],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132638,132639,132645,132655,132659,132665,132675],{"__ignoreMap":63},[68,132640,132641,132643],{"class":70,"line":71},[68,132642,75],{"class":74},[68,132644,79],{"class":78},[68,132646,132647,132649,132651,132653],{"class":70,"line":82},[68,132648,86],{"class":85},[68,132650,89],{"class":78},[68,132652,92],{"class":85},[68,132654,95],{"class":78},[68,132656,132657],{"class":70,"line":98},[68,132658,101],{"class":78},[68,132660,132661,132663],{"class":70,"line":104},[68,132662,107],{"class":74},[68,132664,79],{"class":78},[68,132666,132667,132669,132671,132673],{"class":70,"line":112},[68,132668,86],{"class":85},[68,132670,89],{"class":78},[68,132672,119],{"class":85},[68,132674,95],{"class":78},[68,132676,132677],{"class":70,"line":124},[68,132678,101],{"class":78},[170,132680,132681],{},"overflow: hidden;",[170,132683,132684],{},"优点：代码简洁",[170,132686,132687],{},"缺点：无法显示溢出的部分",[170,132689,132690],{},"注意：是给父元素添加代码",[170,132692,132693],{},"法三",[170,132695,132696],{},"父级添加after伪元素",[170,132698,132699,132702],{},[132700,132701],"after",{}," 方式是额外标签法的升级版",[170,132704,132705],{},"使用的时候复制就可以",[58,132707,132708],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132709,132710,132716,132726,132730,132736,132746],{"__ignoreMap":63},[68,132711,132712,132714],{"class":70,"line":71},[68,132713,75],{"class":74},[68,132715,79],{"class":78},[68,132717,132718,132720,132722,132724],{"class":70,"line":82},[68,132719,86],{"class":85},[68,132721,89],{"class":78},[68,132723,92],{"class":85},[68,132725,95],{"class":78},[68,132727,132728],{"class":70,"line":98},[68,132729,101],{"class":78},[68,132731,132732,132734],{"class":70,"line":104},[68,132733,107],{"class":74},[68,132735,79],{"class":78},[68,132737,132738,132740,132742,132744],{"class":70,"line":112},[68,132739,86],{"class":85},[68,132741,89],{"class":78},[68,132743,119],{"class":85},[68,132745,95],{"class":78},[68,132747,132748],{"class":70,"line":124},[68,132749,101],{"class":78},[170,132751,132752],{},"优点：没有增加标签，结构更简单",[170,132754,132755],{},"缺点：照顾低版本浏览器",[170,132757,132758],{},"代表网站： 百度、淘宝网、网易等",[170,132760,132761],{},"法四",[170,132763,132764],{},"父级添加双伪元素",[58,132766,132767],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,132768,132769,132775,132785,132789,132795,132805],{"__ignoreMap":63},[68,132770,132771,132773],{"class":70,"line":71},[68,132772,75],{"class":74},[68,132774,79],{"class":78},[68,132776,132777,132779,132781,132783],{"class":70,"line":82},[68,132778,86],{"class":85},[68,132780,89],{"class":78},[68,132782,92],{"class":85},[68,132784,95],{"class":78},[68,132786,132787],{"class":70,"line":98},[68,132788,101],{"class":78},[68,132790,132791,132793],{"class":70,"line":104},[68,132792,107],{"class":74},[68,132794,79],{"class":78},[68,132796,132797,132799,132801,132803],{"class":70,"line":112},[68,132798,86],{"class":85},[68,132800,89],{"class":78},[68,132802,119],{"class":85},[68,132804,95],{"class":78},[68,132806,132807],{"class":70,"line":124},[68,132808,101],{"class":78},[170,132810,132811],{},"优点：代码更简洁",[170,132813,132755],{},[170,132815,132816],{},"代表网站：小米、腾讯等",[14,132818,132820],{"id":132819},"_93-ps切图","9.3 PS切图",[19,132822,132824],{"id":132823},"_931-常见图片格式","9.3.1 常见图片格式",[128,132826,132827,132837],{},[131,132828,132829],{},[134,132830,132831,132834],{},[137,132832,132833],{"align":92},"jpg图像格式",[137,132835,132836],{"align":92},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[144,132838,132839,132847,132855],{},[134,132840,132841,132844],{},[149,132842,132843],{"align":92},"gif图像格式",[149,132845,132846],{"align":92},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[134,132848,132849,132852],{},[149,132850,132851],{"align":92},"png图像格式",[149,132853,132854],{"align":92},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[134,132856,132857,132860],{},[149,132858,132859],{"align":92},"PSD图像格式",[149,132861,132862],{"align":92},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,132864,132866],{"id":132865},"_932-图层切图","9.3.2 图层切图",[170,132868,132869],{},"最简单的切图方式：右击图层 → 导出 → 切片",[170,132871,132872],{},"按住shift选中两个图层->图层菜单->合并图层",[19,132874,132876],{"id":132875},"_933-切片切图","9.3.3 切片切图",[24,132878,132879,132882],{},[27,132880,132881],{},"利用切片工具手动划出",[27,132883,132884],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,132886,132888],{"id":132887},"_934-切图步骤","9.3.4 切图步骤",[170,132890,132891],{},"用切片工具选中：",[801,132893],{"style":803,"src":132894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[170,132896,132897],{},"文件 -> 导出",[801,132899],{"style":803,"src":132900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1553,132902,132903],{},"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":63,"searchDepth":82,"depth":82,"links":132905},[132906,132915,132919],{"id":131348,"depth":82,"text":131349,"children":132907},[132908,132909,132910,132911,132912,132913,132914],{"id":131373,"depth":98,"text":131374},{"id":131664,"depth":98,"text":131665},{"id":131793,"depth":98,"text":131794},{"id":131991,"depth":98,"text":131992},{"id":132033,"depth":98,"text":132034},{"id":132071,"depth":98,"text":132072},{"id":132161,"depth":98,"text":132162},{"id":132441,"depth":82,"text":132442,"children":132916},[132917,132918],{"id":132445,"depth":98,"text":132446},{"id":132452,"depth":98,"text":132453},{"id":132819,"depth":82,"text":132820,"children":132920},[132921,132922,132923,132924],{"id":132823,"depth":98,"text":132824},{"id":132865,"depth":98,"text":132866},{"id":132875,"depth":98,"text":132876},{"id":132887,"depth":98,"text":132888},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131340,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132931,"title":132932,"body":132933,"description":1564,"extension":1565,"meta":133573,"navigation":1567,"path":133574,"seo":133575,"stem":133576,"__hash__":133577},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132934,"toc":133561},[132935,132938,132942,132968,133002,133006,133010,133013,133055,133062,133072,133080,133082,133085,133088,133091,133098,133112,133116,133119,133148,133152,133155,133169,133173,133176,133204,133208,133211,133237,133241,133246,133279,133284,133312,133316,133333,133379,133384,133428,133445,133551,133559],[10,132936,132932],{"id":132937},"_10-css规范与学成在线案例",[14,132939,132941],{"id":132940},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[263,132943,132944,132950,132956,132962],{},[27,132945,132946,132949],{},[268,132947,132948],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[27,132951,132952,132955],{},[268,132953,132954],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[27,132957,132958,132961],{},[268,132959,132960],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[27,132963,132964,132967],{},[268,132965,132966],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[58,132969,132970],{"className":60,"code":131385,"language":62,"meta":63,"style":63},[65,132971,132972,132976,132982,132998],{"__ignoreMap":63},[68,132973,132974],{"class":70,"line":71},[68,132975,131392],{"class":302},[68,132977,132978,132980],{"class":70,"line":82},[68,132979,53093],{"class":52784},[68,132981,79],{"class":78},[68,132983,132984,132986,132988,132990,132992,132994,132996],{"class":70,"line":98},[68,132985,72374],{"class":85},[68,132987,89],{"class":78},[68,132989,1846],{"class":85},[68,132991,317],{"class":316},[68,132993,53003],{"class":85},[68,132995,131413],{"class":85},[68,132997,95],{"class":78},[68,132999,133000],{"class":70,"line":104},[68,133001,101],{"class":78},[14,133003,133005],{"id":133004},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,133007,133009],{"id":133008},"_1021-header头部制作","10.2.1 header头部制作",[801,133011],{"style":803,"src":133012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[24,133014,133015,133022,133029,133035,133042,133049],{},[27,133016,133017,133018,133021],{},"1号是版心盒子 ",[268,133019,133020],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[27,133023,133024,133025,133028],{},"版心盒子 里面包含 2号盒子 ",[268,133026,133027],{},"logo"," 图标",[27,133030,133031,133032,133034],{},"版心盒子 里面包含 3号盒子 ",[268,133033,55195],{}," 导航栏",[27,133036,133037,133038,133041],{},"版心盒子 里面包含 4号盒子 ",[268,133039,133040],{},"search"," 搜索框",[27,133043,133044,133045,133048],{},"版心盒子 里面包含 5号盒子 ",[268,133046,133047],{},"user"," 个人信息",[27,133050,133051,133052],{},"注意，要求里面的 ",[268,133053,133054],{},"4个子盒子 必须都浮动",[263,133056,133057],{},[27,133058,133059],{},[268,133060,133061],{},"导航栏注意点:",[170,133063,133064,133065,133068,133069],{},"实际开发中， ",[268,133066,133067],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[268,133070,133071],{},"用 li 包含链接(li+a)的做法",[24,133073,133074,133077],{},[27,133075,133076],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[27,133078,133079],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[170,133081,1106],{},[170,133083,133084],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[170,133086,133087],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[170,133089,133090],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[263,133092,133093],{"start":82},[27,133094,133095],{},[268,133096,133097],{},"4号盒子search的细节：",[24,133099,133100,133103,133106],{},[27,133101,133102],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[27,133104,133105],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[27,133107,133108,133111],{},[65,133109,133110],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,133113,133115],{"id":133114},"_1022-banner制作","10.2.2 banner制作",[801,133117],{"style":803,"src":133118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[24,133120,133121,133128,133134,133141],{},[27,133122,133123,133124,133127],{},"1号盒子是通栏的大盒子 ",[268,133125,133126],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[27,133129,133130,133131,133133],{},"2号盒子是版心 ",[268,133132,2422],{}," ， 要水平居中对齐",[27,133135,133136,133137,133140],{},"3号盒子版心内，左对齐 ",[268,133138,133139],{},"subnav"," 侧导航栏",[27,133142,133143,133144,133147],{},"4号盒子版心内，右对齐 ",[268,133145,133146],{},"course"," 课程",[19,133149,133151],{"id":133150},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[801,133153],{"style":803,"src":133154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[24,133156,133157,133160,133163,133166],{},[27,133158,133159],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[27,133161,133162],{},"1号盒子是标题 H3 左侧浮动",[27,133164,133165],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[27,133167,133168],{},"3号盒子 右浮动 mod 修改",[19,133170,133172],{"id":133171},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[801,133174],{"style":803,"src":133175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[24,133177,133178,133184,133191,133198,133201],{},[27,133179,133180,133181,133183],{},"1号盒子为最大的盒子 ",[268,133182,55196],{}," 版心水平居中对齐",[27,133185,133186,133187,133190],{},"2号盒子为上面部分 ",[268,133188,133189],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[27,133192,133193,133194,133197],{},"3号盒子为底下部分 ",[268,133195,133196],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[27,133199,133200],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[27,133202,133203],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,133205,133207],{"id":133206},"_1025-底部模块制作","10.2.5 底部模块制作",[801,133209],{"style":803,"src":133210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[24,133212,133213,133220,133223,133230],{},[27,133214,133215,133216,133219],{},"1号盒子通栏大盒子 底部 ",[268,133217,133218],{},"footer"," 给高度 底色是白色",[27,133221,133222],{},"2号盒子版心水平居中",[27,133224,133225,133226,133229],{},"3号盒子版权 ",[268,133227,133228],{},"copyright"," 左对齐",[27,133231,133232,133233,133236],{},"4号盒子 链接组 ",[268,133234,133235],{},"links"," 右对齐",[19,133238,133240],{"id":133239},"_1026-代码模块","10.2.6 代码模块",[263,133242,133243],{},[27,133244,133245],{},"html部分",[58,133247,133249],{"className":128769,"code":133248,"language":128771,"meta":63,"style":63},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[65,133250,133251],{"__ignoreMap":63},[68,133252,133253,133255,133257,133259,133261,133264,133267,133269,133272,133275,133277],{"class":70,"line":71},[68,133254,2537],{"class":78},[68,133256,1867],{"class":52784},[68,133258,62535],{"class":74},[68,133260,1685],{"class":78},[68,133262,133263],{"class":1742},"\"https:\u002F\u002Fexample.com\"",[68,133265,133266],{"class":74}," target",[68,133268,1685],{"class":78},[68,133270,133271],{"class":1742},"\"_blank\"",[68,133273,133274],{"class":78},">链接文字\u003C\u002F",[68,133276,1867],{"class":52784},[68,133278,52791],{"class":78},[263,133280,133281],{"start":82},[27,133282,133283],{},"css部分",[58,133285,133286],{"className":128769,"code":133248,"language":128771,"meta":63,"style":63},[65,133287,133288],{"__ignoreMap":63},[68,133289,133290,133292,133294,133296,133298,133300,133302,133304,133306,133308,133310],{"class":70,"line":71},[68,133291,2537],{"class":78},[68,133293,1867],{"class":52784},[68,133295,62535],{"class":74},[68,133297,1685],{"class":78},[68,133299,133263],{"class":1742},[68,133301,133266],{"class":74},[68,133303,1685],{"class":78},[68,133305,133271],{"class":1742},[68,133307,133274],{"class":78},[68,133309,1867],{"class":52784},[68,133311,52791],{"class":78},[19,133313,133315],{"id":133314},"_1027-收获","10.2.7 收获",[263,133317,133318,133321,133324,133327,133330],{},[27,133319,133320],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[27,133322,133323],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[27,133325,133326],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[27,133328,133329],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[27,133331,133332],{},"遗忘代码",[58,133334,133336],{"className":60,"code":133335,"language":62,"meta":63,"style":63},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[65,133337,133338,133360,133365,133375],{"__ignoreMap":63},[68,133339,133340,133342,133344,133346,133348,133350,133352,133354,133356,133358],{"class":70,"line":71},[68,133341,53093],{"class":52784},[68,133343,13923],{"class":78},[68,133345,170],{"class":52784},[68,133347,13923],{"class":78},[68,133349,10],{"class":52784},[68,133351,13923],{"class":78},[68,133353,24],{"class":52784},[68,133355,13923],{"class":78},[68,133357,27],{"class":52784},[68,133359,79],{"class":78},[68,133361,133362],{"class":70,"line":82},[68,133363,133364],{"class":302},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[68,133366,133367,133369,133371,133373],{"class":70,"line":98},[68,133368,129637],{"class":85},[68,133370,89],{"class":78},[68,133372,62347],{"class":85},[68,133374,95],{"class":78},[68,133376,133377],{"class":70,"line":104},[68,133378,101],{"class":78},[263,133380,133381],{"start":124},[27,133382,133383],{},"html引css的程序",[58,133385,133386],{"className":60,"code":133335,"language":62,"meta":63,"style":63},[65,133387,133388,133410,133414,133424],{"__ignoreMap":63},[68,133389,133390,133392,133394,133396,133398,133400,133402,133404,133406,133408],{"class":70,"line":71},[68,133391,53093],{"class":52784},[68,133393,13923],{"class":78},[68,133395,170],{"class":52784},[68,133397,13923],{"class":78},[68,133399,10],{"class":52784},[68,133401,13923],{"class":78},[68,133403,24],{"class":52784},[68,133405,13923],{"class":78},[68,133407,27],{"class":52784},[68,133409,79],{"class":78},[68,133411,133412],{"class":70,"line":82},[68,133413,133364],{"class":302},[68,133415,133416,133418,133420,133422],{"class":70,"line":98},[68,133417,129637],{"class":85},[68,133419,89],{"class":78},[68,133421,62347],{"class":85},[68,133423,95],{"class":78},[68,133425,133426],{"class":70,"line":104},[68,133427,101],{"class":78},[263,133429,133430,133433,133436,133439,133442],{"start":1496},[27,133431,133432],{},"浮动的盒子不会有外边距合并问题",[27,133434,133435],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[27,133437,133438],{},"ctrl+g快速定位行；shift+alt多个光标",[27,133440,133441],{},"学习上方各个模块的选择器起名方法，以后就这样用",[27,133443,133444],{},"在写选择器时尽量写全一些，例如",[58,133446,133448],{"className":60,"code":133447,"language":62,"meta":63,"style":63},"\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",[65,133449,133450,133455,133470,133475,133490,133495,133510,133515,133530,133535],{"__ignoreMap":63},[68,133451,133452],{"class":70,"line":71},[68,133453,133454],{"class":302},"\u002F* 静态定位（默认） *\u002F\n",[68,133456,133457,133460,133462,133464,133466,133468],{"class":70,"line":82},[68,133458,133459],{"class":74},".static",[68,133461,81284],{"class":78},[68,133463,130381],{"class":85},[68,133465,89],{"class":78},[68,133467,364],{"class":85},[68,133469,130951],{"class":78},[68,133471,133472],{"class":70,"line":98},[68,133473,133474],{"class":302},"\u002F* 相对定位 *\u002F\n",[68,133476,133477,133480,133482,133484,133486,133488],{"class":70,"line":104},[68,133478,133479],{"class":74},".relative",[68,133481,81284],{"class":78},[68,133483,130381],{"class":85},[68,133485,89],{"class":78},[68,133487,296],{"class":85},[68,133489,130951],{"class":78},[68,133491,133492],{"class":70,"line":112},[68,133493,133494],{"class":302},"\u002F* 绝对定位 *\u002F\n",[68,133496,133497,133500,133502,133504,133506,133508],{"class":70,"line":124},[68,133498,133499],{"class":74},".absolute",[68,133501,81284],{"class":78},[68,133503,130381],{"class":85},[68,133505,89],{"class":78},[68,133507,379],{"class":85},[68,133509,130951],{"class":78},[68,133511,133512],{"class":70,"line":1496},[68,133513,133514],{"class":302},"\u002F* 固定定位 *\u002F\n",[68,133516,133517,133520,133522,133524,133526,133528],{"class":70,"line":1502},[68,133518,133519],{"class":74},".fixed",[68,133521,81284],{"class":78},[68,133523,130381],{"class":85},[68,133525,89],{"class":78},[68,133527,387],{"class":85},[68,133529,130951],{"class":78},[68,133531,133532],{"class":70,"line":1510},[68,133533,133534],{"class":302},"\u002F* 粘性定位 *\u002F\n",[68,133536,133537,133540,133542,133544,133546,133549],{"class":70,"line":1521},[68,133538,133539],{"class":74},".sticky",[68,133541,81284],{"class":78},[68,133543,130381],{"class":85},[68,133545,89],{"class":78},[68,133547,133548],{"class":85},"sticky",[68,133550,130951],{"class":78},[263,133552,133553,133556],{"start":3108},[27,133554,133555],{},"一定要用好注释",[27,133557,133558],{},"浮动的盒子不会有外边距合并的问题",[1553,133560,132903],{},{"title":63,"searchDepth":82,"depth":82,"links":133562},[133563,133564],{"id":132940,"depth":82,"text":132941},{"id":133004,"depth":82,"text":133005,"children":133565},[133566,133567,133568,133569,133570,133571,133572],{"id":133008,"depth":98,"text":133009},{"id":133114,"depth":98,"text":133115},{"id":133150,"depth":98,"text":133151},{"id":133171,"depth":98,"text":133172},{"id":133206,"depth":98,"text":133207},{"id":133239,"depth":98,"text":133240},{"id":133314,"depth":98,"text":133315},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132932,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":4,"title":5,"body":133579,"description":1564,"extension":1565,"meta":134831,"navigation":1567,"path":1568,"seo":134832,"stem":1570,"__hash__":1571},{"type":7,"value":133580,"toc":134823},[133581,133583,133585,133587,133595,133597,133609,133653,133683,133685,133697,133699,133701,133745,133747,133749,133751,133753,133755,133757,133765,133819,133855,133857,133867,133921,133927,133929,133937,133991,134007,134009,134019,134073,134095,134149,134165,134219,134221,134223,134229,134283,134297,134351,134353,134355,134421,134427,134473,134489,134491,134493,134505,134507,134519,134573,134599,134601,134603,134605,134619,134621,134627,134629,134633,134641,134643,134645,134655,134699,134701,134703,134705,134709,134727,134731,134803,134805,134807,134809,134811,134813,134815,134817,134819,134821],[10,133582,5],{"id":12},[14,133584,17],{"id":16},[19,133586,22],{"id":21},[24,133588,133589,133591,133593],{},[27,133590,29],{},[27,133592,32],{},[27,133594,35],{},[19,133596,39],{"id":38},[24,133598,133599,133601,133603,133605,133607],{},[27,133600,44],{},[27,133602,47],{},[27,133604,50],{},[27,133606,53],{},[27,133608,56],{},[58,133610,133611],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,133612,133613,133619,133629,133633,133639,133649],{"__ignoreMap":63},[68,133614,133615,133617],{"class":70,"line":71},[68,133616,75],{"class":74},[68,133618,79],{"class":78},[68,133620,133621,133623,133625,133627],{"class":70,"line":82},[68,133622,86],{"class":85},[68,133624,89],{"class":78},[68,133626,92],{"class":85},[68,133628,95],{"class":78},[68,133630,133631],{"class":70,"line":98},[68,133632,101],{"class":78},[68,133634,133635,133637],{"class":70,"line":104},[68,133636,107],{"class":74},[68,133638,79],{"class":78},[68,133640,133641,133643,133645,133647],{"class":70,"line":112},[68,133642,86],{"class":85},[68,133644,89],{"class":78},[68,133646,119],{"class":85},[68,133648,95],{"class":78},[68,133650,133651],{"class":70,"line":124},[68,133652,101],{"class":78},[128,133654,133655,133663],{},[131,133656,133657],{},[134,133658,133659,133661],{},[137,133660,139],{"align":92},[137,133662,142],{"align":92},[144,133664,133665,133671,133677],{},[134,133666,133667,133669],{},[149,133668,151],{"align":92},[149,133670,154],{"align":92},[134,133672,133673,133675],{},[149,133674,92],{"align":92},[149,133676,161],{"align":92},[134,133678,133679,133681],{},[149,133680,119],{"align":92},[149,133682,168],{"align":92},[170,133684,172],{},[24,133686,133687,133689,133691,133693,133695],{},[27,133688,177],{},[27,133690,180],{},[27,133692,183],{},[27,133694,186],{},[27,133696,189],{},[170,133698,192],{},[170,133700,195],{},[58,133702,133703],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,133704,133705,133711,133721,133725,133731,133741],{"__ignoreMap":63},[68,133706,133707,133709],{"class":70,"line":71},[68,133708,75],{"class":74},[68,133710,79],{"class":78},[68,133712,133713,133715,133717,133719],{"class":70,"line":82},[68,133714,86],{"class":85},[68,133716,89],{"class":78},[68,133718,92],{"class":85},[68,133720,95],{"class":78},[68,133722,133723],{"class":70,"line":98},[68,133724,101],{"class":78},[68,133726,133727,133729],{"class":70,"line":104},[68,133728,107],{"class":74},[68,133730,79],{"class":78},[68,133732,133733,133735,133737,133739],{"class":70,"line":112},[68,133734,86],{"class":85},[68,133736,89],{"class":78},[68,133738,119],{"class":85},[68,133740,95],{"class":78},[68,133742,133743],{"class":70,"line":124},[68,133744,101],{"class":78},[19,133746,243],{"id":242},[245,133748,248],{"id":247},[170,133750,251],{},[170,133752,254],{},[245,133754,258],{"id":257},[170,133756,261],{},[263,133758,133759],{},[27,133760,133761,271,133763],{},[268,133762,270],{},[268,133764,274],{},[58,133766,133767],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,133768,133769,133775,133787,133801,133815],{"__ignoreMap":63},[68,133770,133771,133773],{"class":70,"line":71},[68,133772,284],{"class":74},[68,133774,79],{"class":78},[68,133776,133777,133779,133781,133783,133785],{"class":70,"line":82},[68,133778,291],{"class":85},[68,133780,89],{"class":78},[68,133782,296],{"class":85},[68,133784,299],{"class":78},[68,133786,303],{"class":302},[68,133788,133789,133791,133793,133795,133797,133799],{"class":70,"line":98},[68,133790,308],{"class":85},[68,133792,89],{"class":78},[68,133794,313],{"class":85},[68,133796,317],{"class":316},[68,133798,320],{"class":78},[68,133800,323],{"class":302},[68,133802,133803,133805,133807,133809,133811,133813],{"class":70,"line":104},[68,133804,328],{"class":85},[68,133806,89],{"class":78},[68,133808,333],{"class":85},[68,133810,317],{"class":316},[68,133812,338],{"class":78},[68,133814,341],{"class":302},[68,133816,133817],{"class":70,"line":112},[68,133818,101],{"class":78},[128,133820,133821,133829],{},[131,133822,133823],{},[134,133824,133825,133827],{},[137,133826,354],{"align":92},[137,133828,357],{"align":92},[144,133830,133831,133837,133843,133849],{},[134,133832,133833,133835],{},[149,133834,364],{"align":92},[149,133836,367],{"align":92},[134,133838,133839,133841],{},[149,133840,296],{"align":92},[149,133842,374],{"align":92},[134,133844,133845,133847],{},[149,133846,379],{"align":92},[149,133848,382],{"align":92},[134,133850,133851,133853],{},[149,133852,387],{"align":92},[149,133854,390],{"align":92},[170,133856,393],{},[24,133858,133859,133865],{},[27,133860,398,133861,402,133863,406],{},[268,133862,401],{},[268,133864,405],{},[27,133866,409],{},[58,133868,133869],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,133870,133871,133877,133889,133903,133917],{"__ignoreMap":63},[68,133872,133873,133875],{"class":70,"line":71},[68,133874,284],{"class":74},[68,133876,79],{"class":78},[68,133878,133879,133881,133883,133885,133887],{"class":70,"line":82},[68,133880,291],{"class":85},[68,133882,89],{"class":78},[68,133884,296],{"class":85},[68,133886,299],{"class":78},[68,133888,303],{"class":302},[68,133890,133891,133893,133895,133897,133899,133901],{"class":70,"line":98},[68,133892,308],{"class":85},[68,133894,89],{"class":78},[68,133896,313],{"class":85},[68,133898,317],{"class":316},[68,133900,320],{"class":78},[68,133902,323],{"class":302},[68,133904,133905,133907,133909,133911,133913,133915],{"class":70,"line":104},[68,133906,328],{"class":85},[68,133908,89],{"class":78},[68,133910,333],{"class":85},[68,133912,317],{"class":316},[68,133914,338],{"class":78},[68,133916,341],{"class":302},[68,133918,133919],{"class":70,"line":112},[68,133920,101],{"class":78},[24,133922,133923,133925],{},[27,133924,468],{},[27,133926,471],{},[170,133928,474],{},[24,133930,133931,133935],{},[27,133932,479,133933,483],{},[268,133934,482],{},[27,133936,409],{},[58,133938,133939],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,133940,133941,133947,133959,133973,133987],{"__ignoreMap":63},[68,133942,133943,133945],{"class":70,"line":71},[68,133944,284],{"class":74},[68,133946,79],{"class":78},[68,133948,133949,133951,133953,133955,133957],{"class":70,"line":82},[68,133950,291],{"class":85},[68,133952,89],{"class":78},[68,133954,296],{"class":85},[68,133956,299],{"class":78},[68,133958,303],{"class":302},[68,133960,133961,133963,133965,133967,133969,133971],{"class":70,"line":98},[68,133962,308],{"class":85},[68,133964,89],{"class":78},[68,133966,313],{"class":85},[68,133968,317],{"class":316},[68,133970,320],{"class":78},[68,133972,323],{"class":302},[68,133974,133975,133977,133979,133981,133983,133985],{"class":70,"line":104},[68,133976,328],{"class":85},[68,133978,89],{"class":78},[68,133980,333],{"class":85},[68,133982,317],{"class":316},[68,133984,338],{"class":78},[68,133986,341],{"class":302},[68,133988,133989],{"class":70,"line":112},[68,133990,101],{"class":78},[24,133992,133993],{},[27,133994,544,133995,548,133997,551,133999,555,134001,559,134003,562,134005,566],{},[546,133996],{},[546,133998],{},[268,134000,554],{},[268,134002,558],{},[546,134004],{},[268,134006,565],{},[170,134008,569],{},[24,134010,134011,134017],{},[27,134012,134013,576,134015,580],{},[268,134014,382],{},[268,134016,579],{},[27,134018,409],{},[58,134020,134021],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134022,134023,134029,134041,134055,134069],{"__ignoreMap":63},[68,134024,134025,134027],{"class":70,"line":71},[68,134026,284],{"class":74},[68,134028,79],{"class":78},[68,134030,134031,134033,134035,134037,134039],{"class":70,"line":82},[68,134032,291],{"class":85},[68,134034,89],{"class":78},[68,134036,296],{"class":85},[68,134038,299],{"class":78},[68,134040,303],{"class":302},[68,134042,134043,134045,134047,134049,134051,134053],{"class":70,"line":98},[68,134044,308],{"class":85},[68,134046,89],{"class":78},[68,134048,313],{"class":85},[68,134050,317],{"class":316},[68,134052,320],{"class":78},[68,134054,323],{"class":302},[68,134056,134057,134059,134061,134063,134065,134067],{"class":70,"line":104},[68,134058,328],{"class":85},[68,134060,89],{"class":78},[68,134062,333],{"class":85},[68,134064,317],{"class":316},[68,134066,338],{"class":78},[68,134068,341],{"class":302},[68,134070,134071],{"class":70,"line":112},[68,134072,101],{"class":78},[24,134074,134075,134085,134091,134093],{},[27,134076,641,134077,644,134079,647,134081,650,134083,653],{},[546,134078],{},[546,134080],{},[546,134082],{},[546,134084],{},[27,134086,134087,658,134089,662],{},[268,134088,390],{},[268,134090,661],{},[27,134092,665],{},[27,134094,668],{},[58,134096,134097],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134098,134099,134105,134117,134131,134145],{"__ignoreMap":63},[68,134100,134101,134103],{"class":70,"line":71},[68,134102,284],{"class":74},[68,134104,79],{"class":78},[68,134106,134107,134109,134111,134113,134115],{"class":70,"line":82},[68,134108,291],{"class":85},[68,134110,89],{"class":78},[68,134112,296],{"class":85},[68,134114,299],{"class":78},[68,134116,303],{"class":302},[68,134118,134119,134121,134123,134125,134127,134129],{"class":70,"line":98},[68,134120,308],{"class":85},[68,134122,89],{"class":78},[68,134124,313],{"class":85},[68,134126,317],{"class":316},[68,134128,320],{"class":78},[68,134130,323],{"class":302},[68,134132,134133,134135,134137,134139,134141,134143],{"class":70,"line":104},[68,134134,328],{"class":85},[68,134136,89],{"class":78},[68,134138,333],{"class":85},[68,134140,317],{"class":316},[68,134142,338],{"class":78},[68,134144,341],{"class":302},[68,134146,134147],{"class":70,"line":112},[68,134148,101],{"class":78},[24,134150,134151,134157],{},[27,134152,727,134153,730,134155,733],{},[546,134154],{},[546,134156],{},[27,134158,736,134159,739,134161,742,134163,745],{},[546,134160],{},[546,134162],{},[546,134164],{},[58,134166,134167],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134168,134169,134175,134187,134201,134215],{"__ignoreMap":63},[68,134170,134171,134173],{"class":70,"line":71},[68,134172,284],{"class":74},[68,134174,79],{"class":78},[68,134176,134177,134179,134181,134183,134185],{"class":70,"line":82},[68,134178,291],{"class":85},[68,134180,89],{"class":78},[68,134182,296],{"class":85},[68,134184,299],{"class":78},[68,134186,303],{"class":302},[68,134188,134189,134191,134193,134195,134197,134199],{"class":70,"line":98},[68,134190,308],{"class":85},[68,134192,89],{"class":78},[68,134194,313],{"class":85},[68,134196,317],{"class":316},[68,134198,320],{"class":78},[68,134200,323],{"class":302},[68,134202,134203,134205,134207,134209,134211,134213],{"class":70,"line":104},[68,134204,328],{"class":85},[68,134206,89],{"class":78},[68,134208,333],{"class":85},[68,134210,317],{"class":316},[68,134212,338],{"class":78},[68,134214,341],{"class":302},[68,134216,134217],{"class":70,"line":112},[68,134218,101],{"class":78},[801,134220],{"style":803,"src":804},[170,134222,807],{},[24,134224,134225,134227],{},[27,134226,812],{},[27,134228,409],{},[58,134230,134231],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134232,134233,134239,134251,134265,134279],{"__ignoreMap":63},[68,134234,134235,134237],{"class":70,"line":71},[68,134236,284],{"class":74},[68,134238,79],{"class":78},[68,134240,134241,134243,134245,134247,134249],{"class":70,"line":82},[68,134242,291],{"class":85},[68,134244,89],{"class":78},[68,134246,296],{"class":85},[68,134248,299],{"class":78},[68,134250,303],{"class":302},[68,134252,134253,134255,134257,134259,134261,134263],{"class":70,"line":98},[68,134254,308],{"class":85},[68,134256,89],{"class":78},[68,134258,313],{"class":85},[68,134260,317],{"class":316},[68,134262,320],{"class":78},[68,134264,323],{"class":302},[68,134266,134267,134269,134271,134273,134275,134277],{"class":70,"line":104},[68,134268,328],{"class":85},[68,134270,89],{"class":78},[68,134272,333],{"class":85},[68,134274,317],{"class":316},[68,134276,338],{"class":78},[68,134278,341],{"class":302},[68,134280,134281],{"class":70,"line":112},[68,134282,101],{"class":78},[24,134284,134285],{},[27,134286,873,134287,876,134289,879,134291,882,134293,886,134295,889],{},[546,134288],{},[546,134290],{},[546,134292],{},[268,134294,885],{},[546,134296],{},[58,134298,134299],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134300,134301,134307,134319,134333,134347],{"__ignoreMap":63},[68,134302,134303,134305],{"class":70,"line":71},[68,134304,284],{"class":74},[68,134306,79],{"class":78},[68,134308,134309,134311,134313,134315,134317],{"class":70,"line":82},[68,134310,291],{"class":85},[68,134312,89],{"class":78},[68,134314,296],{"class":85},[68,134316,299],{"class":78},[68,134318,303],{"class":302},[68,134320,134321,134323,134325,134327,134329,134331],{"class":70,"line":98},[68,134322,308],{"class":85},[68,134324,89],{"class":78},[68,134326,313],{"class":85},[68,134328,317],{"class":316},[68,134330,320],{"class":78},[68,134332,323],{"class":302},[68,134334,134335,134337,134339,134341,134343,134345],{"class":70,"line":104},[68,134336,328],{"class":85},[68,134338,89],{"class":78},[68,134340,333],{"class":85},[68,134342,317],{"class":316},[68,134344,338],{"class":78},[68,134346,341],{"class":302},[68,134348,134349],{"class":70,"line":112},[68,134350,101],{"class":78},[801,134352],{"style":803,"src":946},[170,134354,949],{},[128,134356,134357,134369],{},[131,134358,134359],{},[134,134360,134361,134363,134365,134367],{},[137,134362,274],{"align":92},[137,134364,960],{"align":92},[137,134366,963],{"align":92},[137,134368,966],{"align":92},[144,134370,134371,134381,134391,134401,134411],{},[134,134372,134373,134375,134377,134379],{},[149,134374,973],{"align":92},[149,134376,976],{"align":92},[149,134378,979],{"align":92},[149,134380,982],{"align":92},[134,134382,134383,134385,134387,134389],{},[149,134384,987],{"align":92},[149,134386,990],{"align":92},[149,134388,993],{"align":92},[149,134390,996],{"align":92},[134,134392,134393,134395,134397,134399],{},[149,134394,1001],{"align":92},[149,134396,1004],{"align":92},[149,134398,1007],{"align":92},[149,134400,1010],{"align":92},[134,134402,134403,134405,134407,134409],{},[149,134404,1015],{"align":92},[149,134406,1004],{"align":92},[149,134408,1020],{"align":92},[149,134410,1023],{"align":92},[134,134412,134413,134415,134417,134419],{},[149,134414,1028],{"align":92},[149,134416,990],{"align":92},[149,134418,1020],{"align":92},[149,134420,1035],{"align":92},[263,134422,134423],{"start":82},[27,134424,134425,1043],{},[268,134426,1042],{},[128,134428,134429,134439],{},[131,134430,134431],{},[134,134432,134433,134435,134437],{},[137,134434,1052],{"align":92},[137,134436,1055],{"align":92},[137,134438,142],{"align":92},[144,134440,134441,134449,134457,134465],{},[134,134442,134443,134445,134447],{},[149,134444,1064],{"align":92},[149,134446,1067],{"align":92},[149,134448,1070],{"align":92},[134,134450,134451,134453,134455],{},[149,134452,1075],{"align":92},[149,134454,1078],{"align":92},[149,134456,1081],{"align":92},[134,134458,134459,134461,134463],{},[149,134460,92],{"align":92},[149,134462,1088],{"align":92},[149,134464,1091],{"align":92},[134,134466,134467,134469,134471],{},[149,134468,119],{"align":92},[149,134470,1098],{"align":92},[149,134472,1101],{"align":92},[24,134474,134475],{},[27,134476,1106,134477,1109,134479,1112,134481,1115,134483,1119,134485,1122,134487,1125],{},[546,134478],{},[268,134480,1042],{},[268,134482,274],{},[268,134484,1118],{},[546,134486],{},[546,134488],{},[245,134490,1129],{"id":1128},[170,134492,1132],{},[24,134494,134495,134497,134499,134501],{},[27,134496,1137],{},[27,134498,1140],{},[27,134500,1143],{},[27,134502,1146,134503,1150],{},[268,134504,1149],{},[245,134506,1154],{"id":1153},[24,134508,134509,134517],{},[27,134510,1159,134511,1163,134513,1167,134515,1171],{},[268,134512,1162],{},[268,134514,1166],{},[268,134516,1170],{},[27,134518,409],{},[58,134520,134521],{"className":60,"code":277,"language":62,"meta":63,"style":63},[65,134522,134523,134529,134541,134555,134569],{"__ignoreMap":63},[68,134524,134525,134527],{"class":70,"line":71},[68,134526,284],{"class":74},[68,134528,79],{"class":78},[68,134530,134531,134533,134535,134537,134539],{"class":70,"line":82},[68,134532,291],{"class":85},[68,134534,89],{"class":78},[68,134536,296],{"class":85},[68,134538,299],{"class":78},[68,134540,303],{"class":302},[68,134542,134543,134545,134547,134549,134551,134553],{"class":70,"line":98},[68,134544,308],{"class":85},[68,134546,89],{"class":78},[68,134548,313],{"class":85},[68,134550,317],{"class":316},[68,134552,320],{"class":78},[68,134554,323],{"class":302},[68,134556,134557,134559,134561,134563,134565,134567],{"class":70,"line":104},[68,134558,328],{"class":85},[68,134560,89],{"class":78},[68,134562,333],{"class":85},[68,134564,317],{"class":316},[68,134566,338],{"class":78},[68,134568,341],{"class":302},[68,134570,134571],{"class":70,"line":112},[68,134572,101],{"class":78},[24,134574,134575],{},[27,134576,1232,134577,1109,134579,1237,134581,1241,134583,1245,134585,1249,134587,1252,134589,1256,134591,1119,134593,1262,134595,134597,1268],{},[546,134578],{},[268,134580,139],{},[268,134582,1240],{},[268,134584,1244],{},[268,134586,1248],{},[546,134588],{},[268,134590,1255],{},[268,134592,1259],{},[546,134594],{},[268,134596,1265],{},[546,134598],{},[245,134600,1272],{"id":1271},[170,134602,1275],{},[170,134604,1278],{},[24,134606,134607,134613],{},[27,134608,1283,134609,1287,134611],{},[268,134610,1286],{},[268,134612,1290],{},[27,134614,1293,134615,1297,134617],{},[268,134616,1296],{},[268,134618,1300],{},[245,134620,1304],{"id":1303},[263,134622,134623,134625],{},[27,134624,1309],{},[27,134626,1312],{},[170,134628,1315],{},[263,134630,134631],{"start":98},[27,134632,1320],{},[24,134634,134635,134637,134639],{},[27,134636,1325],{},[27,134638,1328],{},[27,134640,1331],{},[170,134642,1334],{},[245,134644,1338],{"id":1337},[263,134646,134647,134649,134651,134653],{},[27,134648,1343],{},[27,134650,1346],{},[27,134652,1349],{},[27,134654,1352],{},[58,134656,134657],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,134658,134659,134665,134675,134679,134685,134695],{"__ignoreMap":63},[68,134660,134661,134663],{"class":70,"line":71},[68,134662,75],{"class":74},[68,134664,79],{"class":78},[68,134666,134667,134669,134671,134673],{"class":70,"line":82},[68,134668,86],{"class":85},[68,134670,89],{"class":78},[68,134672,92],{"class":85},[68,134674,95],{"class":78},[68,134676,134677],{"class":70,"line":98},[68,134678,101],{"class":78},[68,134680,134681,134683],{"class":70,"line":104},[68,134682,107],{"class":74},[68,134684,79],{"class":78},[68,134686,134687,134689,134691,134693],{"class":70,"line":112},[68,134688,86],{"class":85},[68,134690,89],{"class":78},[68,134692,119],{"class":85},[68,134694,95],{"class":78},[68,134696,134697],{"class":70,"line":124},[68,134698,101],{"class":78},[801,134700],{"style":803,"src":1399},[245,134702,1403],{"id":1402},[801,134704],{"style":803,"src":1406},[263,134706,134707],{},[27,134708,1411],{},[24,134710,134711,134713,134715,134721],{},[27,134712,1416],{},[27,134714,1419],{},[27,134716,1422,134717,1425,134719,1428],{},[546,134718],{},[546,134720],{},[27,134722,1431,134723,1434,134725,1437],{},[546,134724],{},[546,134726],{},[263,134728,134729],{"start":82},[27,134730,1442],{},[58,134732,134733],{"className":60,"code":1445,"language":62,"meta":63,"style":63},[65,134734,134735,134739,134745,134755,134765,134775,134779,134783,134789,134799],{"__ignoreMap":63},[68,134736,134737],{"class":70,"line":71},[68,134738,1452],{"class":302},[68,134740,134741,134743],{"class":70,"line":82},[68,134742,1457],{"class":74},[68,134744,79],{"class":78},[68,134746,134747,134749,134751,134753],{"class":70,"line":98},[68,134748,291],{"class":85},[68,134750,89],{"class":78},[68,134752,379],{"class":85},[68,134754,95],{"class":78},[68,134756,134757,134759,134761,134763],{"class":70,"line":104},[68,134758,308],{"class":85},[68,134760,89],{"class":78},[68,134762,1248],{"class":85},[68,134764,95],{"class":78},[68,134766,134767,134769,134771,134773],{"class":70,"line":112},[68,134768,328],{"class":85},[68,134770,89],{"class":78},[68,134772,1248],{"class":85},[68,134774,95],{"class":78},[68,134776,134777],{"class":70,"line":124},[68,134778,101],{"class":78},[68,134780,134781],{"class":70,"line":1496},[68,134782,1499],{"class":302},[68,134784,134785,134787],{"class":70,"line":1502},[68,134786,1505],{"class":74},[68,134788,79],{"class":78},[68,134790,134791,134793,134795,134797],{"class":70,"line":1510},[68,134792,291],{"class":85},[68,134794,89],{"class":78},[68,134796,296],{"class":85},[68,134798,95],{"class":78},[68,134800,134801],{"class":70,"line":1521},[68,134802,101],{"class":78},[170,134804,1526],{},[19,134806,1530],{"id":1529},[801,134808],{"style":803,"src":1533},[170,134810,1536],{},[170,134812,1539],{},[170,134814,1542],{},[170,134816,1545],{},[170,134818,1548],{},[170,134820,1551],{},[1553,134822,1555],{},{"title":63,"searchDepth":82,"depth":82,"links":134824},[134825],{"id":16,"depth":82,"text":17,"children":134826},[134827,134828,134829,134830],{"id":21,"depth":98,"text":22},{"id":38,"depth":98,"text":39},{"id":242,"depth":98,"text":243},{"id":1529,"depth":98,"text":1530},{},{"title":5,"description":1564},{"id":134834,"title":134835,"body":134836,"description":1564,"extension":1565,"meta":136259,"navigation":1567,"path":136260,"seo":136261,"stem":136262,"__hash__":136263},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134837,"toc":136238},[134838,134841,134845,134853,134857,134862,134870,134882,134886,134891,134899,134910,134914,134919,134960,134968,134972,134975,134978,134981,135075,135078,135172,135175,135269,135272,135275,135310,135313,135316,135346,135349,135352,135355,135358,135361,135364,135367,135437,135440,135444,135448,135489,135493,135499,135502,135505,135509,135512,135515,135518,135599,135602,135605,135609,135613,135616,135619,135622,135625,135628,135634,135643,135647,135666,135670,135680,135683,135686,135689,135692,135695,135698,135701,135704,135713,135717,135726,135729,135734,135787,135792,135958,135961,135964,135969,135972,135975,135978,135981,135986,136134,136137,136140,136145,136148,136153,136187,136190,136193,136197,136200,136207,136210,136213,136216,136219,136222,136225,136228,136232,136235],[10,134839,134835],{"id":134840},"_12-显示隐藏与图形资源",[14,134842,134844],{"id":134843},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[24,134846,134847,134850],{},[27,134848,134849],{},"目的:让一个元素在页面中消失或者显示出来",[27,134851,134852],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,134854,134856],{"id":134855},"_1211-display-显示","12.1.1 display 显示",[263,134858,134859],{},[27,134860,134861],{},"display 设置或检索对象是否及如何显示",[24,134863,134864,134867],{},[27,134865,134866],{},"display: none;隐藏对象",[27,134868,134869],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[263,134871,134872,134879],{"start":82},[27,134873,134874,134875,134878],{},"特点： display 隐藏元素后， ",[268,134876,134877],{},"不再占"," 有原来的位置",[27,134880,134881],{},"在js中使用非常的广泛",[19,134883,134885],{"id":134884},"_1212-visibility可见性","12.1.2 visibility可见性",[263,134887,134888],{},[27,134889,134890],{},"visibility 属性用于指定一个元素应可见还是隐藏",[24,134892,134893,134896],{},[27,134894,134895],{},"visibility： visible；元素可见",[27,134897,134898],{},"visibility：hidden；元素隐藏",[263,134900,134901,134904,134907],{"start":82},[27,134902,134903],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[27,134905,134906],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[27,134908,134909],{},"隐藏后继续占有原有位置",[19,134911,134913],{"id":134912},"_1213-overflow溢出","12.1.3 overflow溢出",[24,134915,134916],{},[27,134917,134918],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[128,134920,134921,134929],{},[131,134922,134923],{},[134,134924,134925,134927],{},[137,134926,139],{"align":92},[137,134928,142],{"align":92},[144,134930,134931,134939,134946,134953],{},[134,134932,134933,134936],{},[149,134934,134935],{"align":92},"visible",[149,134937,134938],{"align":92},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[134,134940,134941,134943],{},[149,134942,63192],{"align":92},[149,134944,134945],{"align":92},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[134,134947,134948,134950],{},[149,134949,130441],{"align":92},[149,134951,134952],{"align":92},"不管超出内容否，总是显示滚动条",[134,134954,134955,134957],{},[149,134956,74140],{"align":92},[149,134958,134959],{"align":92},"超出自动显示滚动条，不超出不显示滚动条",[24,134961,134962,134965],{},[27,134963,134964],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[27,134966,134967],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,134969,134971],{"id":134970},"_1214-案例收获","12.1.4 案例收获",[801,134973],{"style":803,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[170,134976,134977],{},"问题：没做出来动态效果，使用hover没实现",[170,134979,134980],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[58,134982,134983],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,134984,134985,134989,135003,135007,135021,135025,135039,135043,135057,135061],{"__ignoreMap":63},[68,134986,134987],{"class":70,"line":71},[68,134988,133454],{"class":302},[68,134990,134991,134993,134995,134997,134999,135001],{"class":70,"line":82},[68,134992,133459],{"class":74},[68,134994,81284],{"class":78},[68,134996,130381],{"class":85},[68,134998,89],{"class":78},[68,135000,364],{"class":85},[68,135002,130951],{"class":78},[68,135004,135005],{"class":70,"line":98},[68,135006,133474],{"class":302},[68,135008,135009,135011,135013,135015,135017,135019],{"class":70,"line":104},[68,135010,133479],{"class":74},[68,135012,81284],{"class":78},[68,135014,130381],{"class":85},[68,135016,89],{"class":78},[68,135018,296],{"class":85},[68,135020,130951],{"class":78},[68,135022,135023],{"class":70,"line":112},[68,135024,133494],{"class":302},[68,135026,135027,135029,135031,135033,135035,135037],{"class":70,"line":124},[68,135028,133499],{"class":74},[68,135030,81284],{"class":78},[68,135032,130381],{"class":85},[68,135034,89],{"class":78},[68,135036,379],{"class":85},[68,135038,130951],{"class":78},[68,135040,135041],{"class":70,"line":1496},[68,135042,133514],{"class":302},[68,135044,135045,135047,135049,135051,135053,135055],{"class":70,"line":1502},[68,135046,133519],{"class":74},[68,135048,81284],{"class":78},[68,135050,130381],{"class":85},[68,135052,89],{"class":78},[68,135054,387],{"class":85},[68,135056,130951],{"class":78},[68,135058,135059],{"class":70,"line":1510},[68,135060,133534],{"class":302},[68,135062,135063,135065,135067,135069,135071,135073],{"class":70,"line":1521},[68,135064,133539],{"class":74},[68,135066,81284],{"class":78},[68,135068,130381],{"class":85},[68,135070,89],{"class":78},[68,135072,133548],{"class":85},[68,135074,130951],{"class":78},[170,135076,135077],{},"完整代码：",[58,135079,135080],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,135081,135082,135086,135100,135104,135118,135122,135136,135140,135154,135158],{"__ignoreMap":63},[68,135083,135084],{"class":70,"line":71},[68,135085,133454],{"class":302},[68,135087,135088,135090,135092,135094,135096,135098],{"class":70,"line":82},[68,135089,133459],{"class":74},[68,135091,81284],{"class":78},[68,135093,130381],{"class":85},[68,135095,89],{"class":78},[68,135097,364],{"class":85},[68,135099,130951],{"class":78},[68,135101,135102],{"class":70,"line":98},[68,135103,133474],{"class":302},[68,135105,135106,135108,135110,135112,135114,135116],{"class":70,"line":104},[68,135107,133479],{"class":74},[68,135109,81284],{"class":78},[68,135111,130381],{"class":85},[68,135113,89],{"class":78},[68,135115,296],{"class":85},[68,135117,130951],{"class":78},[68,135119,135120],{"class":70,"line":112},[68,135121,133494],{"class":302},[68,135123,135124,135126,135128,135130,135132,135134],{"class":70,"line":124},[68,135125,133499],{"class":74},[68,135127,81284],{"class":78},[68,135129,130381],{"class":85},[68,135131,89],{"class":78},[68,135133,379],{"class":85},[68,135135,130951],{"class":78},[68,135137,135138],{"class":70,"line":1496},[68,135139,133514],{"class":302},[68,135141,135142,135144,135146,135148,135150,135152],{"class":70,"line":1502},[68,135143,133519],{"class":74},[68,135145,81284],{"class":78},[68,135147,130381],{"class":85},[68,135149,89],{"class":78},[68,135151,387],{"class":85},[68,135153,130951],{"class":78},[68,135155,135156],{"class":70,"line":1510},[68,135157,133534],{"class":302},[68,135159,135160,135162,135164,135166,135168,135170],{"class":70,"line":1521},[68,135161,133539],{"class":74},[68,135163,81284],{"class":78},[68,135165,130381],{"class":85},[68,135167,89],{"class":78},[68,135169,133548],{"class":85},[68,135171,130951],{"class":78},[170,135173,135174],{},"分布思路重点详解：",[58,135176,135177],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,135178,135179,135183,135197,135201,135215,135219,135233,135237,135251,135255],{"__ignoreMap":63},[68,135180,135181],{"class":70,"line":71},[68,135182,133454],{"class":302},[68,135184,135185,135187,135189,135191,135193,135195],{"class":70,"line":82},[68,135186,133459],{"class":74},[68,135188,81284],{"class":78},[68,135190,130381],{"class":85},[68,135192,89],{"class":78},[68,135194,364],{"class":85},[68,135196,130951],{"class":78},[68,135198,135199],{"class":70,"line":98},[68,135200,133474],{"class":302},[68,135202,135203,135205,135207,135209,135211,135213],{"class":70,"line":104},[68,135204,133479],{"class":74},[68,135206,81284],{"class":78},[68,135208,130381],{"class":85},[68,135210,89],{"class":78},[68,135212,296],{"class":85},[68,135214,130951],{"class":78},[68,135216,135217],{"class":70,"line":112},[68,135218,133494],{"class":302},[68,135220,135221,135223,135225,135227,135229,135231],{"class":70,"line":124},[68,135222,133499],{"class":74},[68,135224,81284],{"class":78},[68,135226,130381],{"class":85},[68,135228,89],{"class":78},[68,135230,379],{"class":85},[68,135232,130951],{"class":78},[68,135234,135235],{"class":70,"line":1496},[68,135236,133514],{"class":302},[68,135238,135239,135241,135243,135245,135247,135249],{"class":70,"line":1502},[68,135240,133519],{"class":74},[68,135242,81284],{"class":78},[68,135244,130381],{"class":85},[68,135246,89],{"class":78},[68,135248,387],{"class":85},[68,135250,130951],{"class":78},[68,135252,135253],{"class":70,"line":1510},[68,135254,133534],{"class":302},[68,135256,135257,135259,135261,135263,135265,135267],{"class":70,"line":1521},[68,135258,133539],{"class":74},[68,135260,81284],{"class":78},[68,135262,130381],{"class":85},[68,135264,89],{"class":78},[68,135266,133548],{"class":85},[68,135268,130951],{"class":78},[801,135270],{"style":803,"src":135271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[170,135273,135274],{},"图片太大，盒子太小，此时需要修改图片的大小",[58,135276,135278],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[65,135279,135280],{"__ignoreMap":63},[68,135281,135282,135284,135286,135288,135290,135293,135295,135297,135300,135303,135305,135308],{"class":70,"line":71},[68,135283,2537],{"class":78},[68,135285,801],{"class":52784},[68,135287,56717],{"class":74},[68,135289,1685],{"class":78},[68,135291,135292],{"class":1742},"\"images\u002Fpic.jpg\"",[68,135294,56725],{"class":74},[68,135296,1685],{"class":78},[68,135298,135299],{"class":1742},"\"描述文字\"",[68,135301,135302],{"class":74}," title",[68,135304,1685],{"class":78},[68,135306,135307],{"class":1742},"\"悬停提示\"",[68,135309,52791],{"class":78},[801,135311],{"style":803,"src":135312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[170,135314,135315],{},"制造遮罩层",[58,135317,135318],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,135319,135320],{"__ignoreMap":63},[68,135321,135322,135324,135326,135328,135330,135332,135334,135336,135338,135340,135342,135344],{"class":70,"line":71},[68,135323,2537],{"class":78},[68,135325,801],{"class":52784},[68,135327,56717],{"class":74},[68,135329,1685],{"class":78},[68,135331,135292],{"class":1742},[68,135333,56725],{"class":74},[68,135335,1685],{"class":78},[68,135337,135299],{"class":1742},[68,135339,135302],{"class":74},[68,135341,1685],{"class":78},[68,135343,135307],{"class":1742},[68,135345,52791],{"class":78},[170,135347,135348],{},"此时是这样的为标准流",[801,135350],{"style":803,"src":135351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[170,135353,135354],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[170,135356,135357],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[170,135359,135360],{},"让他在中间，用center(background-position)",[170,135362,135363],{},"将需要变的尽可能放到一个盒子中",[170,135365,135366],{},"放大盒子上内部盒子发生变化",[58,135368,135370],{"className":60,"code":135369,"language":62,"meta":63,"style":63},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[65,135371,135372,135378,135388,135392,135399,135409,135421,135433],{"__ignoreMap":63},[68,135373,135374,135376],{"class":70,"line":71},[68,135375,129089],{"class":74},[68,135377,79],{"class":78},[68,135379,135380,135382,135384,135386],{"class":70,"line":82},[68,135381,291],{"class":85},[68,135383,89],{"class":78},[68,135385,296],{"class":85},[68,135387,95],{"class":78},[68,135389,135390],{"class":70,"line":98},[68,135391,101],{"class":78},[68,135393,135394,135397],{"class":70,"line":104},[68,135395,135396],{"class":74},".child",[68,135398,79],{"class":78},[68,135400,135401,135403,135405,135407],{"class":70,"line":112},[68,135402,291],{"class":85},[68,135404,89],{"class":78},[68,135406,379],{"class":85},[68,135408,95],{"class":78},[68,135410,135411,135413,135415,135417,135419],{"class":70,"line":124},[68,135412,308],{"class":85},[68,135414,89],{"class":78},[68,135416,2284],{"class":85},[68,135418,1957],{"class":316},[68,135420,95],{"class":78},[68,135422,135423,135425,135427,135429,135431],{"class":70,"line":1496},[68,135424,328],{"class":85},[68,135426,89],{"class":78},[68,135428,2284],{"class":85},[68,135430,1957],{"class":316},[68,135432,95],{"class":78},[68,135434,135435],{"class":70,"line":1502},[68,135436,101],{"class":78},[170,135438,135439],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135441,135443],{"id":135442},"_122-精灵图","12.2 精灵图",[19,135445,135447],{"id":135446},"_1221-理解","12.2.1 理解",[263,135449,135450,135468],{},[27,135451,135452,135453,402,135456,135459,135460,135463,135464,135467],{},"目的： ",[268,135454,135455],{},"为了有效地减少服务器接收和发送请求的次数",[268,135457,135458],{},"提高"," 页面的 ",[268,135461,135462],{},"加载速度"," ，出现了 ",[268,135465,135466],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[27,135469,135470,135471,135473,135474,135476,135477,135479,135480,135482,135483,135485,135486,135488],{},"使用精灵图核心：",[546,135472],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[546,135475],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[546,135478],{},"  ③移动背景图片位置， 此时可以使用 background-position",[546,135481],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[546,135484],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[546,135487],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,135490,135492],{"id":135491},"_1222-扒图","12.2.2 扒图",[58,135494,135497],{"className":135495,"code":135496,"language":6676},[6674],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[65,135498,135496],{"__ignoreMap":63},[801,135500],{"style":803,"src":135501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[801,135503],{"style":803,"src":135504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,135506,135508],{"id":135507},"_1223-精灵图的实现","12.2.3 精灵图的实现",[801,135510],{"style":803,"src":135511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[170,135513,135514],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[801,135516],{"style":803,"src":135517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[58,135519,135521],{"className":60,"code":135520,"language":62,"meta":63,"style":63},"\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",[65,135522,135523,135528,135535,135547,135559,135578,135595],{"__ignoreMap":63},[68,135524,135525],{"class":70,"line":71},[68,135526,135527],{"class":302},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[68,135529,135530,135533],{"class":70,"line":82},[68,135531,135532],{"class":74},".icon",[68,135534,79],{"class":78},[68,135536,135537,135539,135541,135543,135545],{"class":70,"line":98},[68,135538,72046],{"class":85},[68,135540,89],{"class":78},[68,135542,333],{"class":85},[68,135544,317],{"class":316},[68,135546,95],{"class":78},[68,135548,135549,135551,135553,135555,135557],{"class":70,"line":104},[68,135550,72266],{"class":85},[68,135552,89],{"class":78},[68,135554,333],{"class":85},[68,135556,317],{"class":316},[68,135558,95],{"class":78},[68,135560,135561,135563,135565,135567,135569,135572,135574,135576],{"class":70,"line":112},[68,135562,72089],{"class":85},[68,135564,89],{"class":78},[68,135566,63204],{"class":85},[68,135568,1640],{"class":78},[68,135570,135571],{"class":6705},"sprites.png",[68,135573,15202],{"class":78},[68,135575,63214],{"class":85},[68,135577,95],{"class":78},[68,135579,135580,135582,135584,135586,135588,135591,135593],{"class":70,"line":124},[68,135581,130281],{"class":85},[68,135583,89],{"class":78},[68,135585,53245],{"class":85},[68,135587,317],{"class":316},[68,135589,135590],{"class":85}," -20",[68,135592,317],{"class":316},[68,135594,95],{"class":78},[68,135596,135597],{"class":70,"line":1496},[68,135598,101],{"class":78},[801,135600],{"style":803,"src":135601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[170,135603,135604],{},"在前端中坐标轴的正方向是右和下",[14,135606,135608],{"id":135607},"_123-字体图标","12.3 字体图标",[19,135610,135612],{"id":135611},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[170,135614,135615],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[170,135617,135618],{},"精灵图是有诸多优点的，但是缺点很明显。",[170,135620,135621],{},"1.图片文件还是比较大的。",[170,135623,135624],{},"2.图片本身放大和缩小会失真。",[170,135626,135627],{},"3.一旦图片制作完毕想要更换非常复杂。",[170,135629,135630,135631,27226],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[268,135632,135633],{},"字体图标 iconfont",[170,135635,135636,135639,135640,29869],{},[268,135637,135638],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[268,135641,135642],{},"展示的是图标，本质属于字体",[19,135644,135646],{"id":135645},"_1232-字体图标的优点","12.3.2 字体图标的优点",[24,135648,135649,135654,135657,135660,135663],{},[27,135650,135651,135653],{},[268,135652,27362],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[27,135655,135656],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[27,135658,135659],{},"兼容性：几乎支持所有的浏览器，请放心使用",[27,135661,135662],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[27,135664,135665],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,135667,135669],{"id":135668},"_1233-字体库下载网站","12.3.3 字体库下载网站",[24,135671,135672],{},[27,135673,135674,135675],{},"icomoon字体库：",[1867,135676,135679],{"href":135677,"rel":135678},"http:\u002F\u002Ficomoon.io\u002F",[25350],"http:\u002F\u002Ficomoon.io",[170,135681,135682],{},"进去之后点icomoon app",[801,135684],{"style":803,"src":135685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[170,135687,135688],{},"可以对其编辑：",[801,135690],{"style":803,"src":135691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[170,135693,135694],{},"生成字体：",[801,135696],{"style":803,"src":135697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[170,135699,135700],{},"下载：",[801,135702],{"style":803,"src":135703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[24,135705,135706],{},[27,135707,135708,135709],{},"阿里iconfont字体库： ",[1867,135710,135711],{"href":135711,"rel":135712},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25350],[19,135714,135716],{"id":135715},"_1234-字体图标的引入","12.3.4 字体图标的引入",[263,135718,135719],{},[27,135720,135721,135722,135725],{},"把下载包里面的 ",[268,135723,135724],{},"fonts"," 文件夹放入页面根目录下",[801,135727],{"style":803,"src":135728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[263,135730,135731],{"start":82},[27,135732,135733],{},"字体文件格式",[128,135735,135736,135745],{},[131,135737,135738],{},[134,135739,135740,135743],{},[137,135741,135742],{"align":92},"格式",[137,135744,25225],{"align":92},[144,135746,135747,135757,135767,135777],{},[134,135748,135749,135754],{},[149,135750,135751],{"align":92},[268,135752,135753],{},".ttf",[149,135755,135756],{"align":92},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[134,135758,135759,135764],{},[149,135760,135761],{"align":92},[268,135762,135763],{},".woff",[149,135765,135766],{"align":92},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[134,135768,135769,135774],{},[149,135770,135771],{"align":92},[268,135772,135773],{},".eot",[149,135775,135776],{"align":92},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[134,135778,135779,135784],{},[149,135780,135781],{"align":92},[268,135782,135783],{},"svg",[149,135785,135786],{"align":92},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[263,135788,135789],{"start":98},[27,135790,135791],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[58,135793,135795],{"className":60,"code":135794,"language":62,"meta":63,"style":63},"\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",[65,135796,135797,135802,135809,135821,135837,135862,135883,135903,135923,135927,135933,135943,135954],{"__ignoreMap":63},[68,135798,135799],{"class":70,"line":71},[68,135800,135801],{"class":302},"\u002F* 引入字体图标 *\u002F\n",[68,135803,135804,135807],{"class":70,"line":82},[68,135805,135806],{"class":316},"@font-face",[68,135808,79],{"class":78},[68,135810,135811,135814,135816,135819],{"class":70,"line":98},[68,135812,135813],{"class":85},"  font-family",[68,135815,89],{"class":78},[68,135817,135818],{"class":1742},"'icomoon'",[68,135820,95],{"class":78},[68,135822,135823,135826,135828,135830,135832,135835],{"class":70,"line":104},[68,135824,135825],{"class":85},"  src",[68,135827,89],{"class":78},[68,135829,63204],{"class":85},[68,135831,1640],{"class":78},[68,135833,135834],{"class":1742},"'fonts\u002Ficomoon.eot'",[68,135836,4209],{"class":78},[68,135838,135839,135841,135843,135845,135847,135850,135852,135855,135857,135860],{"class":70,"line":112},[68,135840,135825],{"class":85},[68,135842,89],{"class":78},[68,135844,63204],{"class":85},[68,135846,1640],{"class":78},[68,135848,135849],{"class":1742},"'fonts\u002Ficomoon.eot?#iefix'",[68,135851,15202],{"class":78},[68,135853,135854],{"class":85},"format",[68,135856,1640],{"class":78},[68,135858,135859],{"class":1742},"'embedded-opentype'",[68,135861,39531],{"class":78},[68,135863,135864,135867,135869,135872,135874,135876,135878,135881],{"class":70,"line":124},[68,135865,135866],{"class":85},"       url",[68,135868,1640],{"class":78},[68,135870,135871],{"class":1742},"'fonts\u002Ficomoon.woff'",[68,135873,15202],{"class":78},[68,135875,135854],{"class":85},[68,135877,1640],{"class":78},[68,135879,135880],{"class":1742},"'woff'",[68,135882,39531],{"class":78},[68,135884,135885,135887,135889,135892,135894,135896,135898,135901],{"class":70,"line":1496},[68,135886,135866],{"class":85},[68,135888,1640],{"class":78},[68,135890,135891],{"class":1742},"'fonts\u002Ficomoon.ttf'",[68,135893,15202],{"class":78},[68,135895,135854],{"class":85},[68,135897,1640],{"class":78},[68,135899,135900],{"class":1742},"'truetype'",[68,135902,39531],{"class":78},[68,135904,135905,135907,135909,135912,135914,135916,135918,135921],{"class":70,"line":1502},[68,135906,135866],{"class":85},[68,135908,1640],{"class":78},[68,135910,135911],{"class":1742},"'fonts\u002Ficomoon.svg#icomoon'",[68,135913,15202],{"class":78},[68,135915,135854],{"class":85},[68,135917,1640],{"class":78},[68,135919,135920],{"class":1742},"'svg'",[68,135922,4209],{"class":78},[68,135924,135925],{"class":70,"line":1510},[68,135926,101],{"class":78},[68,135928,135929,135931],{"class":70,"line":1521},[68,135930,135532],{"class":74},[68,135932,79],{"class":78},[68,135934,135935,135937,135939,135941],{"class":70,"line":3103},[68,135936,135813],{"class":85},[68,135938,89],{"class":78},[68,135940,135818],{"class":1742},[68,135942,95],{"class":78},[68,135944,135945,135948,135950,135952],{"class":70,"line":3108},[68,135946,135947],{"class":85},"  font-style",[68,135949,89],{"class":78},[68,135951,65319],{"class":85},[68,135953,95],{"class":78},[68,135955,135956],{"class":70,"line":3114},[68,135957,101],{"class":78},[170,135959,135960],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[801,135962],{"style":803,"src":135963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[263,135965,135966],{"start":104},[27,135967,135968],{},"添加字体",[801,135970],{"style":803,"src":135971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[170,135973,135974],{},"复制：",[801,135976],{"style":803,"src":135977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[170,135979,135980],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[263,135982,135983],{"start":112},[27,135984,135985],{},"代码展示：",[58,135987,135988],{"className":60,"code":135794,"language":62,"meta":63,"style":63},[65,135989,135990,135994,136000,136010,136024,136046,136064,136082,136100,136104,136110,136120,136130],{"__ignoreMap":63},[68,135991,135992],{"class":70,"line":71},[68,135993,135801],{"class":302},[68,135995,135996,135998],{"class":70,"line":82},[68,135997,135806],{"class":316},[68,135999,79],{"class":78},[68,136001,136002,136004,136006,136008],{"class":70,"line":98},[68,136003,135813],{"class":85},[68,136005,89],{"class":78},[68,136007,135818],{"class":1742},[68,136009,95],{"class":78},[68,136011,136012,136014,136016,136018,136020,136022],{"class":70,"line":104},[68,136013,135825],{"class":85},[68,136015,89],{"class":78},[68,136017,63204],{"class":85},[68,136019,1640],{"class":78},[68,136021,135834],{"class":1742},[68,136023,4209],{"class":78},[68,136025,136026,136028,136030,136032,136034,136036,136038,136040,136042,136044],{"class":70,"line":112},[68,136027,135825],{"class":85},[68,136029,89],{"class":78},[68,136031,63204],{"class":85},[68,136033,1640],{"class":78},[68,136035,135849],{"class":1742},[68,136037,15202],{"class":78},[68,136039,135854],{"class":85},[68,136041,1640],{"class":78},[68,136043,135859],{"class":1742},[68,136045,39531],{"class":78},[68,136047,136048,136050,136052,136054,136056,136058,136060,136062],{"class":70,"line":124},[68,136049,135866],{"class":85},[68,136051,1640],{"class":78},[68,136053,135871],{"class":1742},[68,136055,15202],{"class":78},[68,136057,135854],{"class":85},[68,136059,1640],{"class":78},[68,136061,135880],{"class":1742},[68,136063,39531],{"class":78},[68,136065,136066,136068,136070,136072,136074,136076,136078,136080],{"class":70,"line":1496},[68,136067,135866],{"class":85},[68,136069,1640],{"class":78},[68,136071,135891],{"class":1742},[68,136073,15202],{"class":78},[68,136075,135854],{"class":85},[68,136077,1640],{"class":78},[68,136079,135900],{"class":1742},[68,136081,39531],{"class":78},[68,136083,136084,136086,136088,136090,136092,136094,136096,136098],{"class":70,"line":1502},[68,136085,135866],{"class":85},[68,136087,1640],{"class":78},[68,136089,135911],{"class":1742},[68,136091,15202],{"class":78},[68,136093,135854],{"class":85},[68,136095,1640],{"class":78},[68,136097,135920],{"class":1742},[68,136099,4209],{"class":78},[68,136101,136102],{"class":70,"line":1510},[68,136103,101],{"class":78},[68,136105,136106,136108],{"class":70,"line":1521},[68,136107,135532],{"class":74},[68,136109,79],{"class":78},[68,136111,136112,136114,136116,136118],{"class":70,"line":3103},[68,136113,135813],{"class":85},[68,136115,89],{"class":78},[68,136117,135818],{"class":1742},[68,136119,95],{"class":78},[68,136121,136122,136124,136126,136128],{"class":70,"line":3108},[68,136123,135947],{"class":85},[68,136125,89],{"class":78},[68,136127,65319],{"class":85},[68,136129,95],{"class":78},[68,136131,136132],{"class":70,"line":3114},[68,136133,101],{"class":78},[801,136135],{"style":803,"src":136136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[170,136138,136139],{},"更加细节展示：",[263,136141,136142],{},[27,136143,136144],{},"html 标签内添加小图标",[801,136146],{"style":803,"src":136147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[263,136149,136150],{"start":82},[27,136151,136152],{},"给标签定义字体",[58,136154,136155],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,136156,136157,136161,136175,136179],{"__ignoreMap":63},[68,136158,136159],{"class":70,"line":71},[68,136160,132130],{"class":302},[68,136162,136163,136165,136167,136169,136171,136173],{"class":70,"line":82},[68,136164,2537],{"class":78},[68,136166,53093],{"class":52784},[68,136168,54968],{"class":74},[68,136170,1685],{"class":78},[68,136172,132143],{"class":1742},[68,136174,52791],{"class":78},[68,136176,136177],{"class":70,"line":98},[68,136178,132150],{"class":78},[68,136180,136181,136183,136185],{"class":70,"line":104},[68,136182,53267],{"class":78},[68,136184,53093],{"class":52784},[68,136186,52791],{"class":78},[170,136188,136189],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[801,136191],{"style":803,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,136194,136196],{"id":136195},"_1235-字体图标的追加","12.3.5 字体图标的追加",[170,136198,136199],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[170,136201,136202,136203,136206],{},"把压缩包里面的 ",[268,136204,136205],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[170,136208,136209],{},"打开网站，点下方：",[801,136211],{"style":803,"src":136212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[801,136214],{"style":803,"src":136215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[801,136217],{"style":803,"src":136218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[170,136220,136221],{},"点yes重新加载",[170,136223,136224],{},"然后重复之前的操作就可以实现了",[170,136226,136227],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,136229,136231],{"id":136230},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[801,136233],{"style":803,"src":136234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1553,136236,136237],{},"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":63,"searchDepth":82,"depth":82,"links":136239},[136240,136246,136251],{"id":134843,"depth":82,"text":134844,"children":136241},[136242,136243,136244,136245],{"id":134855,"depth":98,"text":134856},{"id":134884,"depth":98,"text":134885},{"id":134912,"depth":98,"text":134913},{"id":134970,"depth":98,"text":134971},{"id":135442,"depth":82,"text":135443,"children":136247},[136248,136249,136250],{"id":135446,"depth":98,"text":135447},{"id":135491,"depth":98,"text":135492},{"id":135507,"depth":98,"text":135508},{"id":135607,"depth":82,"text":135608,"children":136252},[136253,136254,136255,136256,136257,136258],{"id":135611,"depth":98,"text":135612},{"id":135645,"depth":98,"text":135646},{"id":135668,"depth":98,"text":135669},{"id":135715,"depth":98,"text":135716},{"id":136195,"depth":98,"text":136196},{"id":136230,"depth":98,"text":136231},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134835,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136265,"title":136266,"body":136267,"description":1564,"extension":1565,"meta":137494,"navigation":1567,"path":137495,"seo":137496,"stem":137497,"__hash__":137498},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136268,"toc":137475},[136269,136272,136276,136279,136293,136361,136391,136394,136398,136402,136504,136551,136555,136558,136561,136595,136598,136601,136604,136607,136610,136613,136616,136618,136621,136624,136627,136630,136633,136636,136639,136667,136670,136674,136677,136684,136687,136690,136716,136719,136723,136726,136729,136736,136740,136743,136745,136777,136780,136783,136795,136801,136804,136807,136810,136812,136816,136819,136822,136825,136870,136874,136876,136879,136886,136928,136931,136935,136940,136954,136958,136961,136964,136967,136970,136973,137007,137010,137013,137067,137070,137073,137076,137079,137131,137134,137137,137186,137190,137192,137195,137198,137201,137204,137207,137265,137268,137274,137277,137280,137312,137315,137319,137323,137326,137358,137362,137365,137409,137413,137416,137419,137422,137425,137428,137431,137434,137436,137439,137441,137444,137447,137450,137453,137458,137461,137463,137466,137469,137472],[10,136270,136266],{"id":136271},"_13-界面样式与布局技巧",[14,136273,136275],{"id":136274},"_131-css三角","13.1 css三角",[170,136277,136278],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[24,136280,136281,136284,136287,136290],{},[27,136282,136283],{},"用css 边框可以模拟三角效果",[27,136285,136286],{},"宽度高度为0",[27,136288,136289],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[27,136291,136292],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[58,136294,136296],{"className":60,"code":136295,"language":62,"meta":63,"style":63},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[65,136297,136298,136303,136310,136320,136330,136346,136357],{"__ignoreMap":63},[68,136299,136300],{"class":70,"line":71},[68,136301,136302],{"class":302},"\u002F* CSS 实现三角形 *\u002F\n",[68,136304,136305,136308],{"class":70,"line":82},[68,136306,136307],{"class":74},".triangle",[68,136309,79],{"class":78},[68,136311,136312,136314,136316,136318],{"class":70,"line":98},[68,136313,72046],{"class":85},[68,136315,89],{"class":78},[68,136317,1248],{"class":85},[68,136319,95],{"class":78},[68,136321,136322,136324,136326,136328],{"class":70,"line":104},[68,136323,72266],{"class":85},[68,136325,89],{"class":78},[68,136327,1248],{"class":85},[68,136329,95],{"class":78},[68,136331,136332,136334,136336,136338,136340,136342,136344],{"class":70,"line":112},[68,136333,72374],{"class":85},[68,136335,89],{"class":78},[68,136337,313],{"class":85},[68,136339,317],{"class":316},[68,136341,53003],{"class":85},[68,136343,65469],{"class":85},[68,136345,95],{"class":78},[68,136347,136348,136351,136353,136355],{"class":70,"line":124},[68,136349,136350],{"class":85},"  border-bottom-color",[68,136352,89],{"class":78},[68,136354,63847],{"class":85},[68,136356,95],{"class":78},[68,136358,136359],{"class":70,"line":1496},[68,136360,101],{"class":78},[58,136362,136363],{"className":60,"code":132176,"language":62,"meta":63,"style":63},[65,136364,136365,136371,136387],{"__ignoreMap":63},[68,136366,136367,136369],{"class":70,"line":71},[68,136368,53093],{"class":52784},[68,136370,79],{"class":78},[68,136372,136373,136375,136377,136379,136381,136383,136385],{"class":70,"line":82},[68,136374,72374],{"class":85},[68,136376,89],{"class":78},[68,136378,1846],{"class":85},[68,136380,317],{"class":316},[68,136382,53003],{"class":85},[68,136384,131413],{"class":85},[68,136386,95],{"class":78},[68,136388,136389],{"class":70,"line":98},[68,136390,101],{"class":78},[801,136392],{"style":803,"src":136393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136395,136397],{"id":136396},"_132-css用户界面样式","13.2 css用户界面样式",[19,136399,136401],{"id":136400},"_1321-鼠标样式","13.2.1 鼠标样式",[58,136403,136405],{"className":60,"code":136404,"language":62,"meta":63,"style":63},"\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",[65,136406,136407,136412,136431,136449,136468,136485],{"__ignoreMap":63},[68,136408,136409],{"class":70,"line":71},[68,136410,136411],{"class":302},"\u002F* 鼠标样式 *\u002F\n",[68,136413,136414,136416,136418,136421,136423,136425,136428],{"class":70,"line":82},[68,136415,53093],{"class":52784},[68,136417,81284],{"class":78},[68,136419,136420],{"class":85},"cursor",[68,136422,89],{"class":78},[68,136424,63508],{"class":85},[68,136426,136427],{"class":78},"; }   ",[68,136429,136430],{"class":302},"\u002F* 手型 *\u002F\n",[68,136432,136433,136435,136437,136439,136441,136444,136446],{"class":70,"line":98},[68,136434,53093],{"class":52784},[68,136436,81284],{"class":78},[68,136438,136420],{"class":85},[68,136440,89],{"class":78},[68,136442,136443],{"class":85},"default",[68,136445,136427],{"class":78},[68,136447,136448],{"class":302},"\u002F* 默认 *\u002F\n",[68,136450,136451,136453,136455,136457,136459,136462,136465],{"class":70,"line":104},[68,136452,53093],{"class":52784},[68,136454,81284],{"class":78},[68,136456,136420],{"class":85},[68,136458,89],{"class":78},[68,136460,136461],{"class":85},"move",[68,136463,136464],{"class":78},"; }      ",[68,136466,136467],{"class":302},"\u002F* 移动 *\u002F\n",[68,136469,136470,136472,136474,136476,136478,136480,136482],{"class":70,"line":112},[68,136471,53093],{"class":52784},[68,136473,81284],{"class":78},[68,136475,136420],{"class":85},[68,136477,89],{"class":78},[68,136479,6676],{"class":85},[68,136481,136464],{"class":78},[68,136483,136484],{"class":302},"\u002F* 文本 *\u002F\n",[68,136486,136487,136489,136491,136493,136495,136498,136501],{"class":70,"line":124},[68,136488,53093],{"class":52784},[68,136490,81284],{"class":78},[68,136492,136420],{"class":85},[68,136494,89],{"class":78},[68,136496,136497],{"class":85},"not-allowed",[68,136499,136500],{"class":78},"; } ",[68,136502,136503],{"class":302},"\u002F* 禁止 *\u002F\n",[128,136505,136506,136514],{},[131,136507,136508],{},[134,136509,136510,136512],{},[137,136511,139],{"align":92},[137,136513,142],{"align":92},[144,136515,136516,136523,136530,136537,136544],{},[134,136517,136518,136520],{},[149,136519,136443],{"align":92},[149,136521,136522],{"align":92},"小白 默认",[134,136524,136525,136527],{},[149,136526,63508],{"align":92},[149,136528,136529],{"align":92},"小手",[134,136531,136532,136534],{},[149,136533,136461],{"align":92},[149,136535,136536],{"align":92},"移动",[134,136538,136539,136541],{},[149,136540,6676],{"align":92},[149,136542,136543],{"align":92},"文本",[134,136545,136546,136548],{},[149,136547,136497],{"align":92},[149,136549,136550],{"align":92},"禁止",[19,136552,136554],{"id":136553},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[170,136556,136557],{},"去除表单轮廓线",[170,136559,136560],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[58,136562,136563],{"className":60,"code":131385,"language":62,"meta":63,"style":63},[65,136564,136565,136569,136575,136591],{"__ignoreMap":63},[68,136566,136567],{"class":70,"line":71},[68,136568,131392],{"class":302},[68,136570,136571,136573],{"class":70,"line":82},[68,136572,53093],{"class":52784},[68,136574,79],{"class":78},[68,136576,136577,136579,136581,136583,136585,136587,136589],{"class":70,"line":98},[68,136578,72374],{"class":85},[68,136580,89],{"class":78},[68,136582,1846],{"class":85},[68,136584,317],{"class":316},[68,136586,53003],{"class":85},[68,136588,131413],{"class":85},[68,136590,95],{"class":78},[68,136592,136593],{"class":70,"line":104},[68,136594,101],{"class":78},[170,136596,136597],{},"文本域：",[801,136599],{"style":803,"src":136600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[170,136602,136603],{},"此时会有一个空白区域",[801,136605],{"style":803,"src":136606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[170,136608,136609],{},"写在同一行就不会出现这个问题",[801,136611],{"style":803,"src":136612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[170,136614,136615],{},"文本域是行内块元素，一定记住！！！",[170,136617,99708],{},[801,136619],{"style":803,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[170,136622,136623],{},"文本域尽量放在一行",[170,136625,136626],{},"知识回顾：cols是列，rols是行",[801,136628],{"style":803,"src":136629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[170,136631,136632],{},"它可以进行拖动，显然这是我们不愿意看到的",[801,136634],{"style":803,"src":136635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[170,136637,136638],{},"使用resize进行解决",[58,136640,136642],{"className":60,"code":136641,"language":62,"meta":63,"style":63},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[65,136643,136644,136650,136663],{"__ignoreMap":63},[68,136645,136646,136648],{"class":70,"line":71},[68,136647,55302],{"class":52784},[68,136649,79],{"class":78},[68,136651,136652,136654,136656,136658,136660],{"class":70,"line":82},[68,136653,72276],{"class":85},[68,136655,89],{"class":78},[68,136657,151],{"class":85},[68,136659,299],{"class":78},[68,136661,136662],{"class":302},"\u002F* 取消表单轮廓线 *\u002F\n",[68,136664,136665],{"class":70,"line":98},[68,136666,101],{"class":78},[170,136668,136669],{},"此时就无法通过右下方实现拖动了",[19,136671,136673],{"id":136672},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[170,136675,136676],{},"实现一个盒子中的文字和图片对齐",[170,136678,136679,136680,136683],{},"用于设置一个元素的 ",[268,136681,136682],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[170,136685,136686],{},"图片和文字默认是基线对齐",[801,136688],{"style":803,"src":136689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[58,136691,136692],{"className":60,"code":136641,"language":62,"meta":63,"style":63},[65,136693,136694,136700,136712],{"__ignoreMap":63},[68,136695,136696,136698],{"class":70,"line":71},[68,136697,55302],{"class":52784},[68,136699,79],{"class":78},[68,136701,136702,136704,136706,136708,136710],{"class":70,"line":82},[68,136703,72276],{"class":85},[68,136705,89],{"class":78},[68,136707,151],{"class":85},[68,136709,299],{"class":78},[68,136711,136662],{"class":302},[68,136713,136714],{"class":70,"line":98},[68,136715,101],{"class":78},[801,136717],{"style":803,"src":136718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[245,136720,136722],{"id":136721},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[170,136724,136725],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[801,136727],{"style":803,"src":136728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[170,136730,136731,136732,136735],{},"此时可以给图片、表单这些行内块元素的 ",[268,136733,136734],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[245,136737,136739],{"id":136738},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[170,136741,136742],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[170,136744,16121],{},[58,136746,136748],{"className":60,"code":136747,"language":62,"meta":63,"style":63},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[65,136749,136750,136755,136761,136773],{"__ignoreMap":63},[68,136751,136752],{"class":70,"line":71},[68,136753,136754],{"class":302},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[68,136756,136757,136759],{"class":70,"line":82},[68,136758,801],{"class":52784},[68,136760,79],{"class":78},[68,136762,136763,136766,136768,136771],{"class":70,"line":98},[68,136764,136765],{"class":85},"  vertical-align",[68,136767,89],{"class":78},[68,136769,136770],{"class":85},"middle",[68,136772,95],{"class":78},[68,136774,136775],{"class":70,"line":104},[68,136776,101],{"class":78},[801,136778],{"style":803,"src":136779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[170,136781,136782],{},"主要解决方法有两种：",[263,136784,136785],{},[27,136786,136787,136790,136791,136794],{},[268,136788,136789],{},"给图片"," 添加 ",[268,136792,136793],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[170,136796,136797,136798],{},"2.把图片转换为块级元素 ",[268,136799,136800],{},"display: block",[170,136802,136803],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[170,136805,136806],{},"img {",[170,136808,136809],{},"vertical-align:middle;",[170,136811,2573],{},[19,136813,136815],{"id":136814},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[170,136817,136818],{},"效果：",[801,136820],{"style":803,"src":136821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[170,136823,136824],{},"单行文本溢出显示省略号--必须满足三个条件：",[58,136826,136828],{"className":60,"code":136827,"language":62,"meta":63,"style":63},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[65,136829,136830,136835,136841,136851,136856,136866],{"__ignoreMap":63},[68,136831,136832],{"class":70,"line":71},[68,136833,136834],{"class":302},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[68,136836,136837,136839],{"class":70,"line":82},[68,136838,801],{"class":52784},[68,136840,79],{"class":78},[68,136842,136843,136845,136847,136849],{"class":70,"line":98},[68,136844,136765],{"class":85},[68,136846,89],{"class":78},[68,136848,136770],{"class":85},[68,136850,95],{"class":78},[68,136852,136853],{"class":70,"line":104},[68,136854,136855],{"class":302},"  \u002F* 或 *\u002F\n",[68,136857,136858,136860,136862,136864],{"class":70,"line":112},[68,136859,129637],{"class":85},[68,136861,89],{"class":78},[68,136863,62347],{"class":85},[68,136865,95],{"class":78},[68,136867,136868],{"class":70,"line":124},[68,136869,101],{"class":78},[19,136871,136873],{"id":136872},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[170,136875,136818],{},[801,136877],{"style":803,"src":136878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[170,136880,136881,136882,136885],{},"多行文本溢出显示省略号， ",[268,136883,136884],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[58,136887,136888],{"className":60,"code":136827,"language":62,"meta":63,"style":63},[65,136889,136890,136894,136900,136910,136914,136924],{"__ignoreMap":63},[68,136891,136892],{"class":70,"line":71},[68,136893,136834],{"class":302},[68,136895,136896,136898],{"class":70,"line":82},[68,136897,801],{"class":52784},[68,136899,79],{"class":78},[68,136901,136902,136904,136906,136908],{"class":70,"line":98},[68,136903,136765],{"class":85},[68,136905,89],{"class":78},[68,136907,136770],{"class":85},[68,136909,95],{"class":78},[68,136911,136912],{"class":70,"line":104},[68,136913,136855],{"class":302},[68,136915,136916,136918,136920,136922],{"class":70,"line":112},[68,136917,129637],{"class":85},[68,136919,89],{"class":78},[68,136921,62347],{"class":85},[68,136923,95],{"class":78},[68,136925,136926],{"class":70,"line":124},[68,136927,101],{"class":78},[170,136929,136930],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136932,136934],{"id":136933},"_133-常见布局技巧","13.3 常见布局技巧",[170,136936,136937],{},[268,136938,136939],{},"巧妙利用一个技术更快更好的布局：",[263,136941,136942,136945,136948,136951],{},[27,136943,136944],{},"margin负值的运用",[27,136946,136947],{},"文字围绕浮动元素",[27,136949,136950],{},"行内块的巧妙运用",[27,136952,136953],{},"CSS三角强化",[19,136955,136957],{"id":136956},"_1331-margin负值的运用","13.3.1 margin负值的运用",[170,136959,136960],{},"应用场景：",[801,136962],{"style":803,"src":136963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[801,136965],{"style":803,"src":136966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[170,136968,136969],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[170,136971,136972],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[58,136974,136975],{"className":60,"code":131385,"language":62,"meta":63,"style":63},[65,136976,136977,136981,136987,137003],{"__ignoreMap":63},[68,136978,136979],{"class":70,"line":71},[68,136980,131392],{"class":302},[68,136982,136983,136985],{"class":70,"line":82},[68,136984,53093],{"class":52784},[68,136986,79],{"class":78},[68,136988,136989,136991,136993,136995,136997,136999,137001],{"class":70,"line":98},[68,136990,72374],{"class":85},[68,136992,89],{"class":78},[68,136994,1846],{"class":85},[68,136996,317],{"class":316},[68,136998,53003],{"class":85},[68,137000,131413],{"class":85},[68,137002,95],{"class":78},[68,137004,137005],{"class":70,"line":104},[68,137006,101],{"class":78},[801,137008],{"style":803,"src":137009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[170,137011,137012],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[58,137014,137016],{"className":60,"code":137015,"language":62,"meta":63,"style":63},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,137017,137018,137023,137029,137039,137051,137063],{"__ignoreMap":63},[68,137019,137020],{"class":70,"line":71},[68,137021,137022],{"class":302},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[68,137024,137025,137027],{"class":70,"line":82},[68,137026,284],{"class":74},[68,137028,79],{"class":78},[68,137030,137031,137033,137035,137037],{"class":70,"line":98},[68,137032,291],{"class":85},[68,137034,89],{"class":78},[68,137036,296],{"class":85},[68,137038,95],{"class":78},[68,137040,137041,137043,137045,137047,137049],{"class":70,"line":104},[68,137042,308],{"class":85},[68,137044,89],{"class":78},[68,137046,313],{"class":85},[68,137048,317],{"class":316},[68,137050,95],{"class":78},[68,137052,137053,137055,137057,137059,137061],{"class":70,"line":112},[68,137054,328],{"class":85},[68,137056,89],{"class":78},[68,137058,333],{"class":85},[68,137060,317],{"class":316},[68,137062,95],{"class":78},[68,137064,137065],{"class":70,"line":124},[68,137066,101],{"class":78},[170,137068,137069],{},"加上上述代码会发现：",[801,137071],{"style":803,"src":137072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[170,137074,137075],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[170,137077,137078],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[58,137080,137081],{"className":60,"code":137015,"language":62,"meta":63,"style":63},[65,137082,137083,137087,137093,137103,137115,137127],{"__ignoreMap":63},[68,137084,137085],{"class":70,"line":71},[68,137086,137022],{"class":302},[68,137088,137089,137091],{"class":70,"line":82},[68,137090,284],{"class":74},[68,137092,79],{"class":78},[68,137094,137095,137097,137099,137101],{"class":70,"line":98},[68,137096,291],{"class":85},[68,137098,89],{"class":78},[68,137100,296],{"class":85},[68,137102,95],{"class":78},[68,137104,137105,137107,137109,137111,137113],{"class":70,"line":104},[68,137106,308],{"class":85},[68,137108,89],{"class":78},[68,137110,313],{"class":85},[68,137112,317],{"class":316},[68,137114,95],{"class":78},[68,137116,137117,137119,137121,137123,137125],{"class":70,"line":112},[68,137118,328],{"class":85},[68,137120,89],{"class":78},[68,137122,333],{"class":85},[68,137124,317],{"class":316},[68,137126,95],{"class":78},[68,137128,137129],{"class":70,"line":124},[68,137130,101],{"class":78},[170,137132,137133],{},"解决方式2：",[170,137135,137136],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[58,137138,137140],{"className":60,"code":137139,"language":62,"meta":63,"style":63},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,137141,137142,137148,137158,137170,137182],{"__ignoreMap":63},[68,137143,137144,137146],{"class":70,"line":71},[68,137145,53093],{"class":52784},[68,137147,79],{"class":78},[68,137149,137150,137152,137154,137156],{"class":70,"line":82},[68,137151,291],{"class":85},[68,137153,89],{"class":78},[68,137155,296],{"class":85},[68,137157,95],{"class":78},[68,137159,137160,137162,137164,137166,137168],{"class":70,"line":98},[68,137161,308],{"class":85},[68,137163,89],{"class":78},[68,137165,313],{"class":85},[68,137167,317],{"class":316},[68,137169,95],{"class":78},[68,137171,137172,137174,137176,137178,137180],{"class":70,"line":104},[68,137173,328],{"class":85},[68,137175,89],{"class":78},[68,137177,333],{"class":85},[68,137179,317],{"class":316},[68,137181,95],{"class":78},[68,137183,137184],{"class":70,"line":112},[68,137185,101],{"class":78},[19,137187,137189],{"id":137188},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[170,137191,136960],{},[801,137193],{"style":803,"src":137194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[170,137196,137197],{},"实现结构图：",[801,137199],{"style":803,"src":137200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[170,137202,137203],{},"巧妙运用浮动元素不会压住文字的特性",[170,137205,137206],{},"代码显示：",[58,137208,137210],{"className":60,"code":137209,"language":62,"meta":63,"style":63},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,137211,137212,137218,137228,137232,137237,137241,137247,137261],{"__ignoreMap":63},[68,137213,137214,137216],{"class":70,"line":71},[68,137215,284],{"class":74},[68,137217,79],{"class":78},[68,137219,137220,137222,137224,137226],{"class":70,"line":82},[68,137221,86],{"class":85},[68,137223,89],{"class":78},[68,137225,92],{"class":85},[68,137227,95],{"class":78},[68,137229,137230],{"class":70,"line":98},[68,137231,101],{"class":78},[68,137233,137234],{"class":70,"line":104},[68,137235,137236],{"class":78},"```Css\n",[68,137238,137239],{"class":70,"line":112},[68,137240,131864],{"class":302},[68,137242,137243,137245],{"class":70,"line":124},[68,137244,284],{"class":74},[68,137246,79],{"class":78},[68,137248,137249,137251,137253,137255,137257,137259],{"class":70,"line":1496},[68,137250,71948],{"class":85},[68,137252,89],{"class":78},[68,137254,1248],{"class":85},[68,137256,53038],{"class":85},[68,137258,299],{"class":78},[68,137260,131885],{"class":302},[68,137262,137263],{"class":70,"line":1502},[68,137264,101],{"class":78},[170,137266,137267],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[58,137269,137272],{"className":137270,"code":137271,"language":6676},[6674],"\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",[65,137273,137271],{"__ignoreMap":63},[801,137275],{"style":803,"src":137276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[170,137278,137279],{},"最终展示结果：",[58,137281,137282],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,137283,137284,137288,137294,137308],{"__ignoreMap":63},[68,137285,137286],{"class":70,"line":71},[68,137287,131864],{"class":302},[68,137289,137290,137292],{"class":70,"line":82},[68,137291,284],{"class":74},[68,137293,79],{"class":78},[68,137295,137296,137298,137300,137302,137304,137306],{"class":70,"line":98},[68,137297,71948],{"class":85},[68,137299,89],{"class":78},[68,137301,1248],{"class":85},[68,137303,53038],{"class":85},[68,137305,299],{"class":78},[68,137307,131885],{"class":302},[68,137309,137310],{"class":70,"line":104},[68,137311,101],{"class":78},[801,137313],{"style":803,"src":137314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137316,137318],{"id":137317},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,137320,137322],{"id":137321},"_1341-原理","13.4.1 原理",[801,137324],{"style":803,"src":137325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[58,137327,137328],{"className":60,"code":131857,"language":62,"meta":63,"style":63},[65,137329,137330,137334,137340,137354],{"__ignoreMap":63},[68,137331,137332],{"class":70,"line":71},[68,137333,131864],{"class":302},[68,137335,137336,137338],{"class":70,"line":82},[68,137337,284],{"class":74},[68,137339,79],{"class":78},[68,137341,137342,137344,137346,137348,137350,137352],{"class":70,"line":98},[68,137343,71948],{"class":85},[68,137345,89],{"class":78},[68,137347,1248],{"class":85},[68,137349,53038],{"class":85},[68,137351,299],{"class":78},[68,137353,131885],{"class":302},[68,137355,137356],{"class":70,"line":104},[68,137357,101],{"class":78},[19,137359,137361],{"id":137360},"_1342-实例","13.4.2 实例",[801,137363],{"style":803,"src":137364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[58,137366,137367],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,137368,137369,137375,137385,137389,137395,137405],{"__ignoreMap":63},[68,137370,137371,137373],{"class":70,"line":71},[68,137372,75],{"class":74},[68,137374,79],{"class":78},[68,137376,137377,137379,137381,137383],{"class":70,"line":82},[68,137378,86],{"class":85},[68,137380,89],{"class":78},[68,137382,92],{"class":85},[68,137384,95],{"class":78},[68,137386,137387],{"class":70,"line":98},[68,137388,101],{"class":78},[68,137390,137391,137393],{"class":70,"line":104},[68,137392,107],{"class":74},[68,137394,79],{"class":78},[68,137396,137397,137399,137401,137403],{"class":70,"line":112},[68,137398,86],{"class":85},[68,137400,89],{"class":78},[68,137402,119],{"class":85},[68,137404,95],{"class":78},[68,137406,137407],{"class":70,"line":124},[68,137408,101],{"class":78},[14,137410,137412],{"id":137411},"_135-css的初始化","13.5 css的初始化",[170,137414,137415],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[170,137417,137418],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[170,137420,137421],{},"每个网页都必须首先进行 CSS初始化。",[170,137423,137424],{},"这里我们以 京东CSS初始化代码为例。",[170,137426,137427],{},"在网页右键查看网页源代码",[170,137429,137430],{},"找到css的link引入语句",[170,137432,137433],{},"然后ctrl+f 输入body",[170,137435,78703],{},[801,137437],{"style":803,"src":137438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[170,137440,78726],{},[801,137442],{"style":803,"src":137443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[170,137445,137446],{},"③打开了网页上传压缩的代码",[801,137448],{"style":803,"src":137449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[170,137451,137452],{},"④从body前可以查看这个网页的初始化代码",[170,137454,137455],{},[268,137456,137457],{},"Unicode编码字体：",[170,137459,137460],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[170,137462,84683],{},[170,137464,137465],{},"黑体 \\9ED1\\4F53",[170,137467,137468],{},"宋体 \\5B8B\\4F53",[170,137470,137471],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1553,137473,137474],{},"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":63,"searchDepth":82,"depth":82,"links":137476},[137477,137478,137485,137489,137493],{"id":136274,"depth":82,"text":136275},{"id":136396,"depth":82,"text":136397,"children":137479},[137480,137481,137482,137483,137484],{"id":136400,"depth":98,"text":136401},{"id":136553,"depth":98,"text":136554},{"id":136672,"depth":98,"text":136673},{"id":136814,"depth":98,"text":136815},{"id":136872,"depth":98,"text":136873},{"id":136933,"depth":82,"text":136934,"children":137486},[137487,137488],{"id":136956,"depth":98,"text":136957},{"id":137188,"depth":98,"text":137189},{"id":137317,"depth":82,"text":137318,"children":137490},[137491,137492],{"id":137321,"depth":98,"text":137322},{"id":137360,"depth":98,"text":137361},{"id":137411,"depth":82,"text":137412},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136266,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137500,"title":137501,"body":137502,"description":1564,"extension":1565,"meta":139188,"navigation":1567,"path":139189,"seo":139190,"stem":139191,"__hash__":139192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137503,"toc":139177},[137504,137507,137511,137515,137518,137525,137528,137531,137569,137572,137574,137588,137592,137601,137605,137610,137613,137616,137619,137654,137659,137662,137692,137695,137700,137703,137706,137736,137739,137793,137796,137800,137805,137817,137820,137824,137854,137857,137862,137865,137895,137898,137902,137919,137923,137927,137930,137963,137966,137970,137973,137976,137979,137982,137985,138096,138099,138102,138105,138207,138210,138214,138218,138222,138225,138265,138268,138270,138286,138290,138293,138298,138379,138382,138385,138511,138516,138519,138527,138530,138535,138620,138623,138627,138630,138633,138637,138657,138662,138746,138749,138754,138757,138760,138838,138841,138844,138847,138850,138853,138858,138861,138864,138936,138939,138944,138947,139044,139047,139053,139056,139059,139062,139065,139068,139071,139074,139077,139081,139086,139089,139122,139127,139130,139171,139174],[10,137505,137501],{"id":137506},"_14-html5与css3新特性",[14,137508,137510],{"id":137509},"_141-html5的新特性","14.1 HTML5的新特性",[19,137512,137514],{"id":137513},"_1411-基本标签","14.1.1 基本标签",[170,137516,137517],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[170,137519,137520,137521,137524],{},"这些新特性都有兼容性问题，基本是 ",[268,137522,137523],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[170,137526,137527],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[170,137529,137530],{},"现在使用的是新特性：",[24,137532,137533,137539,137545,137551,137557,137563],{},[27,137534,137535,137538],{},[65,137536,137537],{},"\u003Cheader>"," 头部标签",[27,137540,137541,137544],{},[65,137542,137543],{},"\u003Cnav>"," 导航标签",[27,137546,137547,137550],{},[65,137548,137549],{},"\u003Carticle>"," 内容标签",[27,137552,137553,137556],{},[65,137554,137555],{},"\u003Csection>"," 定义文档某个区域",[27,137558,137559,137562],{},[65,137560,137561],{},"\u003Caside>"," 侧边栏标签",[27,137564,137565,137568],{},[65,137566,137567],{},"\u003Cfooter>"," 尾部标签",[801,137570],{"style":803,"src":137571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[170,137573,1669],{},[24,137575,137576,137579,137582,137585],{},[27,137577,137578],{},"这种语义化标准主要是针对搜索引擎的",[27,137580,137581],{},"这些标签页面中可以经常使用",[27,137583,137584],{},"在IE9中，需要把这些元素转换为块级元素",[27,137586,137587],{},"移动端更喜欢使用这些标签",[19,137589,137591],{"id":137590},"_1412-多媒体标签","14.1.2 多媒体标签",[170,137593,137594,137595,137597,137598,137600],{},"音频 ",[268,137596,29658],{}," 和视频 ",[268,137599,29667],{}," 两个标签",[245,137602,137604],{"id":137603},"_14121-视频标签-video","14.1.2.1 视频标签- video",[263,137606,137607],{},[27,137608,137609],{},"支持格式：",[801,137611],{"style":803,"src":137612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[170,137614,137615],{},"尽量使用MP4，兼容性好",[170,137617,137618],{},"用MP4就可以",[58,137620,137622],{"className":128769,"code":137621,"language":128771,"meta":63,"style":63},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[65,137623,137624],{"__ignoreMap":63},[68,137625,137626,137628,137630,137632,137634,137637,137639,137642,137645,137648,137650,137652],{"class":70,"line":71},[68,137627,2537],{"class":78},[68,137629,29667],{"class":52784},[68,137631,56717],{"class":74},[68,137633,1685],{"class":78},[68,137635,137636],{"class":1742},"\"movie.mp4\"",[68,137638,93898],{"class":74},[68,137640,137641],{"class":74}," autoplay",[68,137643,137644],{"class":74}," muted",[68,137646,137647],{"class":74}," loop",[68,137649,56792],{"class":78},[68,137651,29667],{"class":52784},[68,137653,52791],{"class":78},[263,137655,137656],{"start":82},[27,137657,137658],{},"兼容写法",[170,137660,137661],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[58,137663,137664],{"className":128769,"code":137621,"language":128771,"meta":63,"style":63},[65,137665,137666],{"__ignoreMap":63},[68,137667,137668,137670,137672,137674,137676,137678,137680,137682,137684,137686,137688,137690],{"class":70,"line":71},[68,137669,2537],{"class":78},[68,137671,29667],{"class":52784},[68,137673,56717],{"class":74},[68,137675,1685],{"class":78},[68,137677,137636],{"class":1742},[68,137679,93898],{"class":74},[68,137681,137641],{"class":74},[68,137683,137644],{"class":74},[68,137685,137647],{"class":74},[68,137687,56792],{"class":78},[68,137689,29667],{"class":52784},[68,137691,52791],{"class":78},[170,137693,137694],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[263,137696,137697],{"start":98},[27,137698,137699],{},"video常用属性",[801,137701],{"style":803,"src":137702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[170,137704,137705],{},"poster属性后面是跟的等待加载图片的地址",[58,137707,137708],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,137709,137710],{"__ignoreMap":63},[68,137711,137712,137714,137716,137718,137720,137722,137724,137726,137728,137730,137732,137734],{"class":70,"line":71},[68,137713,2537],{"class":78},[68,137715,801],{"class":52784},[68,137717,56717],{"class":74},[68,137719,1685],{"class":78},[68,137721,135292],{"class":1742},[68,137723,56725],{"class":74},[68,137725,1685],{"class":78},[68,137727,135299],{"class":1742},[68,137729,135302],{"class":74},[68,137731,1685],{"class":78},[68,137733,135307],{"class":1742},[68,137735,52791],{"class":78},[170,137737,137738],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[58,137740,137742],{"className":60,"code":137741,"language":62,"meta":63,"style":63},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[65,137743,137744,137749,137755,137779,137784,137789],{"__ignoreMap":63},[68,137745,137746],{"class":70,"line":71},[68,137747,137748],{"class":302},"\u002F* 2D 位移 *\u002F\n",[68,137750,137751,137753],{"class":70,"line":82},[68,137752,53093],{"class":52784},[68,137754,79],{"class":78},[68,137756,137757,137760,137762,137765,137767,137769,137771,137773,137775,137777],{"class":70,"line":98},[68,137758,137759],{"class":85},"  transform",[68,137761,89],{"class":78},[68,137763,137764],{"class":85},"translate",[68,137766,1640],{"class":78},[68,137768,1940],{"class":85},[68,137770,317],{"class":316},[68,137772,13923],{"class":78},[68,137774,2284],{"class":85},[68,137776,317],{"class":316},[68,137778,4209],{"class":78},[68,137780,137781],{"class":70,"line":104},[68,137782,137783],{"class":302},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[68,137785,137786],{"class":70,"line":112},[68,137787,137788],{"class":302},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[68,137790,137791],{"class":70,"line":124},[68,137792,101],{"class":78},[170,137794,137795],{},"muted:自动静音属性",[245,137797,137799],{"id":137798},"_14122-音频标签audio","14.1.2.2 音频标签audio",[263,137801,137802],{},[27,137803,137804],{},"基本使用",[170,137806,137807,137808,137813,137814],{},"当前 ",[268,137809,137810],{},[65,137811,137812],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[268,137815,137816],{},"mp3格式",[801,137818],{"style":803,"src":137819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[263,137821,137822],{"start":82},[27,137823,137658],{},[58,137825,137826],{"className":128769,"code":137621,"language":128771,"meta":63,"style":63},[65,137827,137828],{"__ignoreMap":63},[68,137829,137830,137832,137834,137836,137838,137840,137842,137844,137846,137848,137850,137852],{"class":70,"line":71},[68,137831,2537],{"class":78},[68,137833,29667],{"class":52784},[68,137835,56717],{"class":74},[68,137837,1685],{"class":78},[68,137839,137636],{"class":1742},[68,137841,93898],{"class":74},[68,137843,137641],{"class":74},[68,137845,137644],{"class":74},[68,137847,137647],{"class":74},[68,137849,56792],{"class":78},[68,137851,29667],{"class":52784},[68,137853,52791],{"class":78},[170,137855,137856],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[263,137858,137859],{"start":98},[27,137860,137861],{},"常用属性",[801,137863],{"style":803,"src":137864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[58,137866,137867],{"className":128769,"code":137621,"language":128771,"meta":63,"style":63},[65,137868,137869],{"__ignoreMap":63},[68,137870,137871,137873,137875,137877,137879,137881,137883,137885,137887,137889,137891,137893],{"class":70,"line":71},[68,137872,2537],{"class":78},[68,137874,29667],{"class":52784},[68,137876,56717],{"class":74},[68,137878,1685],{"class":78},[68,137880,137636],{"class":1742},[68,137882,93898],{"class":74},[68,137884,137641],{"class":74},[68,137886,137644],{"class":74},[68,137888,137647],{"class":74},[68,137890,56792],{"class":78},[68,137892,29667],{"class":52784},[68,137894,52791],{"class":78},[170,137896,137897],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[245,137899,137901],{"id":137900},"_14123-总结","14.1.2.3 总结",[24,137903,137904,137907,137910,137913,137916],{},[27,137905,137906],{},"音频标签和视频标签使用方式基本一致",[27,137908,137909],{},"浏览器支持情况不同",[27,137911,137912],{},"谷歌浏览器把音频和视频自动播放禁止了",[27,137914,137915],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[27,137917,137918],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,137920,137922],{"id":137921},"_1413-表单元素","14.1.3 表单元素",[245,137924,137926],{"id":137925},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[801,137928],{"style":803,"src":137929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[58,137931,137933],{"className":128769,"code":137932,"language":128771,"meta":63,"style":63},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[65,137934,137935],{"__ignoreMap":63},[68,137936,137937,137939,137941,137943,137945,137947,137949,137951,137954,137956,137958,137961],{"class":70,"line":71},[68,137938,2537],{"class":78},[68,137940,55302],{"class":52784},[68,137942,55305],{"class":74},[68,137944,1685],{"class":78},[68,137946,64177],{"class":1742},[68,137948,16408],{"class":74},[68,137950,1685],{"class":78},[68,137952,137953],{"class":1742},"\"username\"",[68,137955,62498],{"class":74},[68,137957,1685],{"class":78},[68,137959,137960],{"class":1742},"\"请输入用户名\"",[68,137962,52791],{"class":78},[801,137964],{"style":803,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[245,137967,137969],{"id":137968},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[801,137971],{"style":803,"src":137972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[170,137974,137975],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[170,137977,137978],{},"快捷操作：",[801,137980],{"style":803,"src":137981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[170,137983,137984],{},"例子1：",[58,137986,137988],{"className":128769,"code":137987,"language":128771,"meta":63,"style":63},"\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",[65,137989,137990,138013,138040,138069,138088],{"__ignoreMap":63},[68,137991,137992,137994,137996,137998,138000,138003,138006,138008,138011],{"class":70,"line":71},[68,137993,2537],{"class":78},[68,137995,68103],{"class":52784},[68,137997,68106],{"class":74},[68,137999,1685],{"class":78},[68,138001,138002],{"class":1742},"\"\u002Fsubmit\"",[68,138004,138005],{"class":74}," method",[68,138007,1685],{"class":78},[68,138009,138010],{"class":1742},"\"post\"",[68,138012,52791],{"class":78},[68,138014,138015,138017,138019,138021,138023,138025,138027,138029,138031,138033,138035,138038],{"class":70,"line":82},[68,138016,53626],{"class":78},[68,138018,55302],{"class":52784},[68,138020,55305],{"class":74},[68,138022,1685],{"class":78},[68,138024,64177],{"class":1742},[68,138026,16408],{"class":74},[68,138028,1685],{"class":78},[68,138030,137953],{"class":1742},[68,138032,62498],{"class":74},[68,138034,1685],{"class":78},[68,138036,138037],{"class":1742},"\"用户名\"",[68,138039,52791],{"class":78},[68,138041,138042,138044,138046,138048,138050,138053,138055,138057,138060,138062,138064,138067],{"class":70,"line":98},[68,138043,53626],{"class":78},[68,138045,55302],{"class":52784},[68,138047,55305],{"class":74},[68,138049,1685],{"class":78},[68,138051,138052],{"class":1742},"\"password\"",[68,138054,16408],{"class":74},[68,138056,1685],{"class":78},[68,138058,138059],{"class":1742},"\"pwd\"",[68,138061,62498],{"class":74},[68,138063,1685],{"class":78},[68,138065,138066],{"class":1742},"\"密码\"",[68,138068,52791],{"class":78},[68,138070,138071,138073,138075,138077,138079,138081,138084,138086],{"class":70,"line":104},[68,138072,53626],{"class":78},[68,138074,55368],{"class":52784},[68,138076,55305],{"class":74},[68,138078,1685],{"class":78},[68,138080,68126],{"class":1742},[68,138082,138083],{"class":78},">提交\u003C\u002F",[68,138085,55368],{"class":52784},[68,138087,52791],{"class":78},[68,138089,138090,138092,138094],{"class":70,"line":112},[68,138091,53267],{"class":78},[68,138093,68103],{"class":52784},[68,138095,52791],{"class":78},[801,138097],{"style":803,"src":138098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[170,138100,138101],{},"value是表单域的内容",[170,138103,138104],{},"例子2：",[58,138106,138107],{"className":128769,"code":137987,"language":128771,"meta":63,"style":63},[65,138108,138109,138129,138155,138181,138199],{"__ignoreMap":63},[68,138110,138111,138113,138115,138117,138119,138121,138123,138125,138127],{"class":70,"line":71},[68,138112,2537],{"class":78},[68,138114,68103],{"class":52784},[68,138116,68106],{"class":74},[68,138118,1685],{"class":78},[68,138120,138002],{"class":1742},[68,138122,138005],{"class":74},[68,138124,1685],{"class":78},[68,138126,138010],{"class":1742},[68,138128,52791],{"class":78},[68,138130,138131,138133,138135,138137,138139,138141,138143,138145,138147,138149,138151,138153],{"class":70,"line":82},[68,138132,53626],{"class":78},[68,138134,55302],{"class":52784},[68,138136,55305],{"class":74},[68,138138,1685],{"class":78},[68,138140,64177],{"class":1742},[68,138142,16408],{"class":74},[68,138144,1685],{"class":78},[68,138146,137953],{"class":1742},[68,138148,62498],{"class":74},[68,138150,1685],{"class":78},[68,138152,138037],{"class":1742},[68,138154,52791],{"class":78},[68,138156,138157,138159,138161,138163,138165,138167,138169,138171,138173,138175,138177,138179],{"class":70,"line":98},[68,138158,53626],{"class":78},[68,138160,55302],{"class":52784},[68,138162,55305],{"class":74},[68,138164,1685],{"class":78},[68,138166,138052],{"class":1742},[68,138168,16408],{"class":74},[68,138170,1685],{"class":78},[68,138172,138059],{"class":1742},[68,138174,62498],{"class":74},[68,138176,1685],{"class":78},[68,138178,138066],{"class":1742},[68,138180,52791],{"class":78},[68,138182,138183,138185,138187,138189,138191,138193,138195,138197],{"class":70,"line":104},[68,138184,53626],{"class":78},[68,138186,55368],{"class":52784},[68,138188,55305],{"class":74},[68,138190,1685],{"class":78},[68,138192,68126],{"class":1742},[68,138194,138083],{"class":78},[68,138196,55368],{"class":52784},[68,138198,52791],{"class":78},[68,138200,138201,138203,138205],{"class":70,"line":112},[68,138202,53267],{"class":78},[68,138204,68103],{"class":52784},[68,138206,52791],{"class":78},[801,138208],{"style":803,"src":138209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138211,138213],{"id":138212},"_142-css新特性","14.2 CSS新特性",[19,138215,138217],{"id":138216},"_1421-新增选择器","14.2.1 新增选择器",[245,138219,138221],{"id":138220},"_14211-属性选择器","14.2.1.1 属性选择器",[801,138223],{"style":803,"src":138224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[58,138226,138228],{"className":60,"code":138227,"language":62,"meta":63,"style":63},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[65,138229,138230,138245,138261],{"__ignoreMap":63},[68,138231,138232,138234,138236,138238,138240,138242],{"class":70,"line":71},[68,138233,55302],{"class":52784},[68,138235,2517],{"class":78},[68,138237,104582],{"class":74},[68,138239,1685],{"class":316},[68,138241,64177],{"class":1742},[68,138243,138244],{"class":78},"] {\n",[68,138246,138247,138249,138251,138253,138255,138257,138259],{"class":70,"line":82},[68,138248,72374],{"class":85},[68,138250,89],{"class":78},[68,138252,1846],{"class":85},[68,138254,317],{"class":316},[68,138256,53003],{"class":85},[68,138258,131601],{"class":85},[68,138260,95],{"class":78},[68,138262,138263],{"class":70,"line":98},[68,138264,101],{"class":78},[801,138266],{"style":803,"src":138267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[170,138269,1669],{},[24,138271,138272,138275,138278,138281],{},[27,138273,138274],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[27,138276,138277],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[27,138279,138280],{},"属性选择器也可以选择出来自定义的属性",[27,138282,138283,138285],{},[268,138284,1106],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[245,138287,138289],{"id":138288},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[801,138291],{"style":803,"src":138292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[263,138294,138295],{},[27,138296,138297],{},"fist-child",[58,138299,138301],{"className":60,"code":138300,"language":62,"meta":63,"style":63},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[65,138302,138303,138308,138323,138343,138361],{"__ignoreMap":63},[68,138304,138305],{"class":70,"line":71},[68,138306,138307],{"class":302},"\u002F* 属性选择器 *\u002F\n",[68,138309,138310,138312,138314,138316,138318,138320],{"class":70,"line":82},[68,138311,55302],{"class":52784},[68,138313,2517],{"class":78},[68,138315,104582],{"class":74},[68,138317,1685],{"class":316},[68,138319,64177],{"class":1742},[68,138321,138322],{"class":78},"] { }\n",[68,138324,138325,138327,138329,138331,138334,138337,138340],{"class":70,"line":98},[68,138326,55302],{"class":52784},[68,138328,2517],{"class":78},[68,138330,16182],{"class":74},[68,138332,138333],{"class":316},"^=",[68,138335,138336],{"class":1742},"\"icon\"",[68,138338,138339],{"class":78},"] { }  ",[68,138341,138342],{"class":302},"\u002F* 以 icon 开头 *\u002F\n",[68,138344,138345,138347,138349,138351,138354,138356,138358],{"class":70,"line":104},[68,138346,55302],{"class":52784},[68,138348,2517],{"class":78},[68,138350,16182],{"class":74},[68,138352,138353],{"class":316},"$=",[68,138355,138336],{"class":1742},[68,138357,138339],{"class":78},[68,138359,138360],{"class":302},"\u002F* 以 icon 结尾 *\u002F\n",[68,138362,138363,138365,138367,138369,138372,138374,138376],{"class":70,"line":112},[68,138364,55302],{"class":52784},[68,138366,2517],{"class":78},[68,138368,16182],{"class":74},[68,138370,138371],{"class":316},"*=",[68,138373,138336],{"class":1742},[68,138375,138339],{"class":78},[68,138377,138378],{"class":302},"\u002F* 包含 icon *\u002F\n",[170,138380,138381],{},"ul的第一个儿子文本为红色",[170,138383,138384],{},"一定要在冒号前加空格，不然就是选中所有的了",[58,138386,138388],{"className":60,"code":138387,"language":62,"meta":63,"style":63},".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",[65,138389,138390,138396,138406,138410,138414,138419,138432,138445,138461,138478,138495],{"__ignoreMap":63},[68,138391,138392,138394],{"class":70,"line":71},[68,138393,128314],{"class":74},[68,138395,79],{"class":78},[68,138397,138398,138400,138402,138404],{"class":70,"line":82},[68,138399,72383],{"class":85},[68,138401,89],{"class":78},[68,138403,58899],{"class":85},[68,138405,95],{"class":78},[68,138407,138408],{"class":70,"line":98},[68,138409,101],{"class":78},[68,138411,138412],{"class":70,"line":104},[68,138413,137236],{"class":78},[68,138415,138416],{"class":70,"line":112},[68,138417,138418],{"class":302},"\u002F* 结构伪类选择器 *\u002F\n",[68,138420,138421,138423,138426,138429],{"class":70,"line":124},[68,138422,27],{"class":52784},[68,138424,138425],{"class":74},":first-child",[68,138427,138428],{"class":78}," { }           ",[68,138430,138431],{"class":302},"\u002F* 第一个 *\u002F\n",[68,138433,138434,138436,138439,138442],{"class":70,"line":1496},[68,138435,27],{"class":52784},[68,138437,138438],{"class":74},":last-child",[68,138440,138441],{"class":78}," { }            ",[68,138443,138444],{"class":302},"\u002F* 最后一个 *\u002F\n",[68,138446,138447,138449,138451,138453,138455,138458],{"class":70,"line":1502},[68,138448,27],{"class":52784},[68,138450,130935],{"class":74},[68,138452,1640],{"class":78},[68,138454,1715],{"class":85},[68,138456,138457],{"class":78},") { }          ",[68,138459,138460],{"class":302},"\u002F* 第2个 *\u002F\n",[68,138462,138463,138465,138467,138469,138472,138475],{"class":70,"line":1510},[68,138464,27],{"class":52784},[68,138466,130935],{"class":74},[68,138468,1640],{"class":78},[68,138470,138471],{"class":85},"2n",[68,138473,138474],{"class":78},") { }         ",[68,138476,138477],{"class":302},"\u002F* 偶数 *\u002F\n",[68,138479,138480,138482,138484,138486,138489,138492],{"class":70,"line":1521},[68,138481,27],{"class":52784},[68,138483,130935],{"class":74},[68,138485,1640],{"class":78},[68,138487,138488],{"class":85},"2n+1",[68,138490,138491],{"class":78},") { }       ",[68,138493,138494],{"class":302},"\u002F* 奇数 *\u002F\n",[68,138496,138497,138499,138501,138503,138506,138508],{"class":70,"line":3103},[68,138498,27],{"class":52784},[68,138500,130935],{"class":74},[68,138502,1640],{"class":78},[68,138504,138505],{"class":85},"-n+3",[68,138507,138491],{"class":78},[68,138509,138510],{"class":302},"\u002F* 前3个 *\u002F\n",[53093,138512,138515],{"className":138513},[138514],"example","\n  示例内容\n",[170,138517,138518],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[24,138520,138521],{},[27,138522,138523,138526],{},[65,138524,138525],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[170,138528,138529],{},"也就是说它选择的是熊大",[263,138531,138532],{"start":124},[27,138533,138534],{},"权重",[58,138536,138538],{"className":60,"code":138537,"language":62,"meta":63,"style":63},"\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",[65,138539,138540,138544,138554,138564,138578,138592,138606],{"__ignoreMap":63},[68,138541,138542],{"class":70,"line":71},[68,138543,138418],{"class":302},[68,138545,138546,138548,138550,138552],{"class":70,"line":82},[68,138547,27],{"class":52784},[68,138549,138425],{"class":74},[68,138551,138428],{"class":78},[68,138553,138431],{"class":302},[68,138555,138556,138558,138560,138562],{"class":70,"line":98},[68,138557,27],{"class":52784},[68,138559,138438],{"class":74},[68,138561,138441],{"class":78},[68,138563,138444],{"class":302},[68,138565,138566,138568,138570,138572,138574,138576],{"class":70,"line":104},[68,138567,27],{"class":52784},[68,138569,130935],{"class":74},[68,138571,1640],{"class":78},[68,138573,1715],{"class":85},[68,138575,138457],{"class":78},[68,138577,138460],{"class":302},[68,138579,138580,138582,138584,138586,138588,138590],{"class":70,"line":112},[68,138581,27],{"class":52784},[68,138583,130935],{"class":74},[68,138585,1640],{"class":78},[68,138587,138471],{"class":85},[68,138589,138474],{"class":78},[68,138591,138477],{"class":302},[68,138593,138594,138596,138598,138600,138602,138604],{"class":70,"line":124},[68,138595,27],{"class":52784},[68,138597,130935],{"class":74},[68,138599,1640],{"class":78},[68,138601,138488],{"class":85},[68,138603,138491],{"class":78},[68,138605,138494],{"class":302},[68,138607,138608,138610,138612,138614,138616,138618],{"class":70,"line":1496},[68,138609,27],{"class":52784},[68,138611,130935],{"class":74},[68,138613,1640],{"class":78},[68,138615,138505],{"class":85},[68,138617,138491],{"class":78},[68,138619,138510],{"class":302},[170,138621,138622],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[245,138624,138626],{"id":138625},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[170,138628,138629],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[801,138631],{"style":803,"src":138632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[263,138634,138635],{},[27,138636,1669],{},[24,138638,138639,138642,138645,138648,138651,138654],{},[27,138640,138641],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[27,138643,138644],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[27,138646,138647],{},"语法： element::before {}",[27,138649,138650],{},"before 和 after 必须有 content 属性",[27,138652,138653],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[27,138655,138656],{},"伪元素选择器和标签选择器一样，权重为 1",[263,138658,138659],{"start":82},[27,138660,138661],{},"实例",[58,138663,138664],{"className":60,"code":138537,"language":62,"meta":63,"style":63},[65,138665,138666,138670,138680,138690,138704,138718,138732],{"__ignoreMap":63},[68,138667,138668],{"class":70,"line":71},[68,138669,138418],{"class":302},[68,138671,138672,138674,138676,138678],{"class":70,"line":82},[68,138673,27],{"class":52784},[68,138675,138425],{"class":74},[68,138677,138428],{"class":78},[68,138679,138431],{"class":302},[68,138681,138682,138684,138686,138688],{"class":70,"line":98},[68,138683,27],{"class":52784},[68,138685,138438],{"class":74},[68,138687,138441],{"class":78},[68,138689,138444],{"class":302},[68,138691,138692,138694,138696,138698,138700,138702],{"class":70,"line":104},[68,138693,27],{"class":52784},[68,138695,130935],{"class":74},[68,138697,1640],{"class":78},[68,138699,1715],{"class":85},[68,138701,138457],{"class":78},[68,138703,138460],{"class":302},[68,138705,138706,138708,138710,138712,138714,138716],{"class":70,"line":112},[68,138707,27],{"class":52784},[68,138709,130935],{"class":74},[68,138711,1640],{"class":78},[68,138713,138471],{"class":85},[68,138715,138474],{"class":78},[68,138717,138477],{"class":302},[68,138719,138720,138722,138724,138726,138728,138730],{"class":70,"line":124},[68,138721,27],{"class":52784},[68,138723,130935],{"class":74},[68,138725,1640],{"class":78},[68,138727,138488],{"class":85},[68,138729,138491],{"class":78},[68,138731,138494],{"class":302},[68,138733,138734,138736,138738,138740,138742,138744],{"class":70,"line":1496},[68,138735,27],{"class":52784},[68,138737,130935],{"class":74},[68,138739,1640],{"class":78},[68,138741,138505],{"class":85},[68,138743,138491],{"class":78},[68,138745,138510],{"class":302},[801,138747],{"style":803,"src":138748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[263,138750,138751],{"start":98},[27,138752,138753],{},"使用场景1",[801,138755],{"style":803,"src":138756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[170,138758,138759],{},"不需要再加盒子来整红色那部分了",[58,138761,138763],{"className":60,"code":138762,"language":62,"meta":63,"style":63},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[65,138764,138765,138770,138779,138790,138800,138804,138813,138824,138834],{"__ignoreMap":63},[68,138766,138767],{"class":70,"line":71},[68,138768,138769],{"class":302},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[68,138771,138772,138774,138777],{"class":70,"line":82},[68,138773,53093],{"class":52784},[68,138775,138776],{"class":74},"::before",[68,138778,79],{"class":78},[68,138780,138781,138784,138786,138788],{"class":70,"line":98},[68,138782,138783],{"class":85},"  content",[68,138785,89],{"class":78},[68,138787,9141],{"class":1742},[68,138789,95],{"class":78},[68,138791,138792,138794,138796,138798],{"class":70,"line":104},[68,138793,129637],{"class":85},[68,138795,89],{"class":78},[68,138797,62347],{"class":85},[68,138799,95],{"class":78},[68,138801,138802],{"class":70,"line":112},[68,138803,101],{"class":78},[68,138805,138806,138808,138811],{"class":70,"line":124},[68,138807,53093],{"class":52784},[68,138809,138810],{"class":74},"::after",[68,138812,79],{"class":78},[68,138814,138815,138817,138819,138822],{"class":70,"line":1496},[68,138816,138783],{"class":85},[68,138818,89],{"class":78},[68,138820,138821],{"class":1742},"\"→\"",[68,138823,95],{"class":78},[68,138825,138826,138828,138830,138832],{"class":70,"line":1502},[68,138827,72383],{"class":85},[68,138829,89],{"class":78},[68,138831,63548],{"class":85},[68,138833,95],{"class":78},[68,138835,138836],{"class":70,"line":1510},[68,138837,101],{"class":78},[801,138839],{"style":803,"src":138840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[170,138842,138843],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[801,138845],{"style":803,"src":138846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[170,138848,138849],{},"但是在引用时需要先转义一下",[170,138851,138852],{},"content='\\e930'",[263,138854,138855],{"start":104},[27,138856,138857],{},"使用场景2",[170,138859,138860],{},"仿土豆效果",[170,138862,138863],{},"通过使用伪元素选择器可以减少body中盒子的数量",[58,138865,138866],{"className":60,"code":138762,"language":62,"meta":63,"style":63},[65,138867,138868,138872,138880,138890,138900,138904,138912,138922,138932],{"__ignoreMap":63},[68,138869,138870],{"class":70,"line":71},[68,138871,138769],{"class":302},[68,138873,138874,138876,138878],{"class":70,"line":82},[68,138875,53093],{"class":52784},[68,138877,138776],{"class":74},[68,138879,79],{"class":78},[68,138881,138882,138884,138886,138888],{"class":70,"line":98},[68,138883,138783],{"class":85},[68,138885,89],{"class":78},[68,138887,9141],{"class":1742},[68,138889,95],{"class":78},[68,138891,138892,138894,138896,138898],{"class":70,"line":104},[68,138893,129637],{"class":85},[68,138895,89],{"class":78},[68,138897,62347],{"class":85},[68,138899,95],{"class":78},[68,138901,138902],{"class":70,"line":112},[68,138903,101],{"class":78},[68,138905,138906,138908,138910],{"class":70,"line":124},[68,138907,53093],{"class":52784},[68,138909,138810],{"class":74},[68,138911,79],{"class":78},[68,138913,138914,138916,138918,138920],{"class":70,"line":1496},[68,138915,138783],{"class":85},[68,138917,89],{"class":78},[68,138919,138821],{"class":1742},[68,138921,95],{"class":78},[68,138923,138924,138926,138928,138930],{"class":70,"line":1502},[68,138925,72383],{"class":85},[68,138927,89],{"class":78},[68,138929,63548],{"class":85},[68,138931,95],{"class":78},[68,138933,138934],{"class":70,"line":1510},[68,138935,101],{"class":78},[801,138937],{"style":803,"src":138938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[263,138940,138941],{"start":112},[27,138942,138943],{},"使用场景3",[170,138945,138946],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[58,138948,138950],{"className":60,"code":138949,"language":62,"meta":63,"style":63},".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",[65,138951,138952,138958,138968,138972,138976,138980,138988,138998,139008,139012,139020,139030,139040],{"__ignoreMap":63},[68,138953,138954,138956],{"class":70,"line":71},[68,138955,284],{"class":74},[68,138957,79],{"class":78},[68,138959,138960,138962,138964,138966],{"class":70,"line":82},[68,138961,86],{"class":85},[68,138963,89],{"class":78},[68,138965,92],{"class":85},[68,138967,95],{"class":78},[68,138969,138970],{"class":70,"line":98},[68,138971,101],{"class":78},[68,138973,138974],{"class":70,"line":104},[68,138975,137236],{"class":78},[68,138977,138978],{"class":70,"line":112},[68,138979,138769],{"class":302},[68,138981,138982,138984,138986],{"class":70,"line":124},[68,138983,53093],{"class":52784},[68,138985,138776],{"class":74},[68,138987,79],{"class":78},[68,138989,138990,138992,138994,138996],{"class":70,"line":1496},[68,138991,138783],{"class":85},[68,138993,89],{"class":78},[68,138995,9141],{"class":1742},[68,138997,95],{"class":78},[68,138999,139000,139002,139004,139006],{"class":70,"line":1502},[68,139001,129637],{"class":85},[68,139003,89],{"class":78},[68,139005,62347],{"class":85},[68,139007,95],{"class":78},[68,139009,139010],{"class":70,"line":1510},[68,139011,101],{"class":78},[68,139013,139014,139016,139018],{"class":70,"line":1521},[68,139015,53093],{"class":52784},[68,139017,138810],{"class":74},[68,139019,79],{"class":78},[68,139021,139022,139024,139026,139028],{"class":70,"line":3103},[68,139023,138783],{"class":85},[68,139025,89],{"class":78},[68,139027,138821],{"class":1742},[68,139029,95],{"class":78},[68,139031,139032,139034,139036,139038],{"class":70,"line":3108},[68,139033,72383],{"class":85},[68,139035,89],{"class":78},[68,139037,63548],{"class":85},[68,139039,95],{"class":78},[68,139041,139042],{"class":70,"line":3114},[68,139043,101],{"class":78},[170,139045,139046],{},"div {\nmargin: 0 auto;\n}",[58,139048,139051],{"className":139049,"code":139050,"language":6676},[6674],"\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",[65,139052,139050],{"__ignoreMap":63},[170,139054,139055],{},"如果想让多个元素都发生变化",[170,139057,139058],{},"不能如下操作：",[170,139060,139061],{},"transition: width 2s ease 0.5s;",[170,139063,139064],{},"transition: height 2s ease 0.5s;不对！！！",[170,139066,139067],{},"上方会样式冲突，导致不显示任何过渡效果",[170,139069,139070],{},"使用如下：加逗号隔开",[170,139072,139073],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[170,139075,139076],{},"transition all 2s ease;",[19,139078,139080],{"id":139079},"_1426-过渡练习","14.2.6 过渡练习",[263,139082,139083],{},[27,139084,139085],{},"进度条",[801,139087],{"style":803,"src":139088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[58,139090,139092],{"className":60,"code":139091,"language":62,"meta":63,"style":63},"div {\n  transition: all 0.3s ease;\n}\n",[65,139093,139094,139100,139118],{"__ignoreMap":63},[68,139095,139096,139098],{"class":70,"line":71},[68,139097,53093],{"class":52784},[68,139099,79],{"class":78},[68,139101,139102,139105,139107,139109,139112,139114,139116],{"class":70,"line":82},[68,139103,139104],{"class":85},"  transition",[68,139106,89],{"class":78},[68,139108,29605],{"class":85},[68,139110,139111],{"class":85}," 0.3",[68,139113,2323],{"class":316},[68,139115,80157],{"class":85},[68,139117,95],{"class":78},[68,139119,139120],{"class":70,"line":98},[68,139121,101],{"class":78},[263,139123,139124],{"start":82},[27,139125,139126],{},"小米logo",[170,139128,139129],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[58,139131,139133],{"className":60,"code":139132,"language":62,"meta":63,"style":63},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[65,139134,139135,139140,139146,139162,139167],{"__ignoreMap":63},[68,139136,139137],{"class":70,"line":71},[68,139138,139139],{"class":302},"\u002F* CSS3 过渡 *\u002F\n",[68,139141,139142,139144],{"class":70,"line":82},[68,139143,53093],{"class":52784},[68,139145,79],{"class":78},[68,139147,139148,139150,139152,139154,139156,139158,139160],{"class":70,"line":98},[68,139149,139104],{"class":85},[68,139151,89],{"class":78},[68,139153,29605],{"class":85},[68,139155,139111],{"class":85},[68,139157,2323],{"class":316},[68,139159,80157],{"class":85},[68,139161,95],{"class":78},[68,139163,139164],{"class":70,"line":104},[68,139165,139166],{"class":302},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[68,139168,139169],{"class":70,"line":112},[68,139170,101],{"class":78},[170,139172,139173],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1553,139175,139176],{},"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":63,"searchDepth":82,"depth":82,"links":139178},[139179,139184],{"id":137509,"depth":82,"text":137510,"children":139180},[139181,139182,139183],{"id":137513,"depth":98,"text":137514},{"id":137590,"depth":98,"text":137591},{"id":137921,"depth":98,"text":137922},{"id":138212,"depth":82,"text":138213,"children":139185},[139186,139187],{"id":138216,"depth":98,"text":138217},{"id":139079,"depth":98,"text":139080},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137501,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139194,"title":139195,"body":139196,"description":1564,"extension":1565,"meta":140940,"navigation":1567,"path":140941,"seo":140942,"stem":140943,"__hash__":140944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139197,"toc":140921},[139198,139201,139205,139208,139214,139220,139224,139226,139229,139232,139235,139238,139241,139244,139247,139251,139255,139258,139261,139264,139268,139271,139274,139279,139282,139285,139288,139292,139295,139304,139307,139310,139314,139317,139320,139325,139332,139346,139354,139361,139366,139369,139372,139375,139382,139386,139392,139398,139401,139404,139409,139415,139417,139425,139430,139433,139439,139441,139446,139451,139454,139456,139461,139464,139469,139474,139508,139512,139516,139519,139523,139526,139612,139615,139652,139655,139691,139695,139700,139713,139767,139769,139797,139799,139827,139833,139847,139849,139893,139895,139939,139942,139949,139960,139962,139989,139991,140017,140024,140040,140042,140136,140138,140232,140239,140242,140247,140253,140327,140330,140332,140368,140370,140406,140409,140416,140435,140438,140441,140443,140468,140470,140494,140497,140500,140530,140534,140537,140600,140602,140668,140670,140734,140737,140769,140771,140797,140799,140825,140828,140859,140861,140887,140889,140915,140918],[10,139199,139195],{"id":139200},"_15-品优购项目上篇-搭建与公共模块",[14,139202,139204],{"id":139203},"_151-项目规划","15.1 项目规划",[801,139206],{"style":803,"src":139207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[170,139209,139210,139213],{},[268,139211,139212],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[170,139215,139216,139219],{},[268,139217,139218],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139221,139223],{"id":139222},"_152-项目介绍","15.2 项目介绍",[170,139225,139212],{},[801,139227],{"style":803,"src":139228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[170,139230,139231],{},"主页：",[801,139233],{"style":803,"src":139234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[170,139236,139237],{},"列表页：",[801,139239],{"style":803,"src":139240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[170,139242,139243],{},"注册页：",[801,139245],{"style":803,"src":139246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139248,139250],{"id":139249},"_153-项目搭建工作","15.3 项目搭建工作",[19,139252,139254],{"id":139253},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[801,139256],{"style":803,"src":139257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[170,139259,139260],{},"经常更换的图片要放到upload文件夹中",[170,139262,139263],{},"不经常换的放到images文件夹中",[19,139265,139267],{"id":139266},"_1532-创建文件如下","15.3.2 创建文件如下",[801,139269],{"style":803,"src":139270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[801,139272],{"style":803,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[170,139275,139276],{},[268,139277,139278],{},"初始化样式：",[170,139280,139281],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[170,139283,139284],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[170,139286,139287],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,139289,139291],{"id":139290},"_1533-项目模块化开发","15.3.3 项目模块化开发",[170,139293,139294],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[170,139296,139297,139298,139303],{},"这里最典型的应用就是 ",[268,139299,139300],{},[65,139301,139302],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[801,139305],{"style":803,"src":139306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[170,139308,139309],{},"通过link方法来引入",[19,139311,139313],{"id":139312},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[801,139315],{"style":803,"src":139316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[170,139318,139319],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[263,139321,139322],{},[27,139323,139324],{},"制作favicon图标",[170,139326,139327,139328,139331],{},"①把品优购图标切成 ",[65,139329,139330],{},"png"," 图片",[170,139333,139334,139335,139337,139338,139341,139342],{},"②把 ",[65,139336,139330],{}," 图片转换为 ",[65,139339,139340],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1867,139343,139344],{"href":139344,"rel":139345},"http:\u002F\u002Fwww.bitbug.net\u002F",[25350],[263,139347,139348,139351],{"start":82},[27,139349,139350],{},"favicon图标放到网站根目录下",[27,139352,139353],{},"HTML页面引入favicon",[170,139355,139356,139357,139360],{},"在html 页面里面的 ",[65,139358,139359],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[170,139362,139363],{},[65,139364,139365],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[170,139367,139368],{},"复制这行代码或者在生成这个的网站进行复制",[801,139370],{"style":803,"src":139371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[170,139373,139374],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[170,139376,139377,139378],{},"例如:",[1867,139379,139380],{"href":139380,"rel":139381},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25350],[19,139383,139385],{"id":139384},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[170,139387,139388,139391],{},[268,139389,139390],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[170,139393,139394,139397],{},[268,139395,139396],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[170,139399,139400],{},"页面必须有三个标签用来符合 SEO 优化",[801,139402],{"style":803,"src":139403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[263,139405,139406],{},[27,139407,139408],{},"title网站标题",[170,139410,139411,139414],{},[268,139412,139413],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[170,139416,70268],{},[24,139418,139419,139422],{},[27,139420,139421],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[27,139423,139424],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[263,139426,139427],{"start":82},[27,139428,139429],{},"description网站描述",[170,139431,139432],{},"简要说明我们网站主要是做什么的",[170,139434,139435,139438],{},[268,139436,139437],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[170,139440,70268],{},[170,139442,139443],{},[65,139444,139445],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[263,139447,139448],{"start":98},[27,139449,139450],{},"keywords关键词",[170,139452,139453],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[170,139455,70268],{},[170,139457,139458],{},[65,139459,139460],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[170,139462,139463],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[170,139465,139466],{},[268,139467,139468],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[263,139470,139471],{"start":104},[27,139472,139473],{},"代码总结",[58,139475,139476],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,139477,139478,139482,139496,139500],{"__ignoreMap":63},[68,139479,139480],{"class":70,"line":71},[68,139481,132130],{"class":302},[68,139483,139484,139486,139488,139490,139492,139494],{"class":70,"line":82},[68,139485,2537],{"class":78},[68,139487,53093],{"class":52784},[68,139489,54968],{"class":74},[68,139491,1685],{"class":78},[68,139493,132143],{"class":1742},[68,139495,52791],{"class":78},[68,139497,139498],{"class":70,"line":98},[68,139499,132150],{"class":78},[68,139501,139502,139504,139506],{"class":70,"line":104},[68,139503,53267],{"class":78},[68,139505,53093],{"class":52784},[68,139507,52791],{"class":78},[14,139509,139511],{"id":139510},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,139513,139515],{"id":139514},"_1541-常用模块类命名","15.4.1 常用模块类命名",[801,139517],{"style":803,"src":139518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,139520,139522],{"id":139521},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[170,139524,139525],{},"布局思路：",[24,139527,139528,139531,139534,139556,139589],{},[27,139529,139530],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[27,139532,139533],{},"里面包含版心的盒子",[27,139535,139536,139537],{},"版心盒子里面包含 1 号左侧盒子左浮动",[24,139538,139539,139547,139553],{},[27,139540,139541,139542,22987,139544,139546],{},"1 号盒子 里面包含一个",[65,139543,24],{},[65,139545,24],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[27,139548,139549,139550,139552],{},"里面的内容是水平排列，所以需要给",[65,139551,27],{},"设置浮动",[27,139554,139555],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[27,139557,139558,139559],{},"版心盒子里面包含 2 号右侧盒子右浮动",[24,139560,139561,139575,139580],{},[27,139562,139563,139564,22987,139566,139568,139569,139571,139572,139574],{},"2 号盒子 里面包含一个",[65,139565,24],{},[65,139567,24],{},"包裹",[65,139570,27],{},"，中间的",[65,139573,2548],{},"可以用样式去设置，也可以用字符 |",[27,139576,139577,139578,139552],{},"里面内容水平排列，给",[65,139579,27],{},[27,139581,139582,139583,139585,139586,139588],{},"找到里面所有偶数的 ",[65,139584,27],{}," 设置样式（偶数的 ",[65,139587,27],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[27,139590,139591,139592],{},"需要用到字体图标",[24,139593,139594,139600,139603,139606,139609],{},[27,139595,139596,139597],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[65,139598,139599],{},"arrow-icon",[27,139601,139602],{},"先要引入字体图片的资源",[27,139604,139605],{},"在样式里面利用 font-face 来进行声明",[27,139607,139608],{},"在伪元素的 content属性设置 图标的编码",[27,139610,139611],{},"给伪元素设置font-family属性",[170,139613,139614],{},"结构实例代码：",[58,139616,139618],{"className":60,"code":139617,"language":62,"meta":63,"style":63},"div::before {\n  content: \"\";\n  display: block;\n}\n",[65,139619,139620,139628,139638,139648],{"__ignoreMap":63},[68,139621,139622,139624,139626],{"class":70,"line":71},[68,139623,53093],{"class":52784},[68,139625,138776],{"class":74},[68,139627,79],{"class":78},[68,139629,139630,139632,139634,139636],{"class":70,"line":82},[68,139631,138783],{"class":85},[68,139633,89],{"class":78},[68,139635,9141],{"class":1742},[68,139637,95],{"class":78},[68,139639,139640,139642,139644,139646],{"class":70,"line":98},[68,139641,129637],{"class":85},[68,139643,89],{"class":78},[68,139645,62347],{"class":85},[68,139647,95],{"class":78},[68,139649,139650],{"class":70,"line":104},[68,139651,101],{"class":78},[170,139653,139654],{},"样式实例代码：",[58,139656,139657],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,139658,139659,139667,139677,139687],{"__ignoreMap":63},[68,139660,139661,139663,139665],{"class":70,"line":71},[68,139662,53093],{"class":52784},[68,139664,138776],{"class":74},[68,139666,79],{"class":78},[68,139668,139669,139671,139673,139675],{"class":70,"line":82},[68,139670,138783],{"class":85},[68,139672,89],{"class":78},[68,139674,9141],{"class":1742},[68,139676,95],{"class":78},[68,139678,139679,139681,139683,139685],{"class":70,"line":98},[68,139680,129637],{"class":85},[68,139682,89],{"class":78},[68,139684,62347],{"class":85},[68,139686,95],{"class":78},[68,139688,139689],{"class":70,"line":104},[68,139690,101],{"class":78},[19,139692,139694],{"id":139693},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[24,139696,139697],{},[27,139698,139699],{},"header 盒子必须要有高度",[170,139701,139702,139703,139705,139706],{},"1 号盒子是 ",[65,139704,133027],{}," 标志定位，在正常开发过程中， ",[268,139707,139708,139709,139712],{},"logo的布局其实是有讲究的，需要进行 ",[65,139710,139711],{},"logoSEO","的优化 （★★★）",[24,139714,139715,139723,139731,139758],{},[27,139716,139717,139719,139720,139722],{},[65,139718,133027],{}," 里面首先放一个 ",[65,139721,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[27,139724,139725,139727,139728,139730],{},[65,139726,10],{}," 里面再放一个链接，可以返回首页的，把 ",[65,139729,133027],{}," 的背景图片给链接即可",[27,139732,139733,139734],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[24,139735,139736,139751],{},[27,139737,139738,139739,139742,139743,139746,139747,139750],{},"方法1：",[65,139740,139741],{},"text-indent"," 移到盒子外面（",[65,139744,139745],{},"text-indent: -9999px",") ，然后 ",[65,139748,139749],{},"overflow:hidden"," ，淘宝的做法",[27,139752,139753,139754,139757],{},"方法2：直接给 ",[65,139755,139756],{},"font-size: 0;"," 就看不到文字了，京东的做法",[27,139759,139760,139761,139763,139764,139766],{},"最后给链接一个 ",[65,139762,52891],{}," 属性，这样鼠标放到 ",[65,139765,133027],{}," 上就可以看到提示文字了",[170,139768,139614],{},[58,139770,139771],{"className":128769,"code":133248,"language":128771,"meta":63,"style":63},[65,139772,139773],{"__ignoreMap":63},[68,139774,139775,139777,139779,139781,139783,139785,139787,139789,139791,139793,139795],{"class":70,"line":71},[68,139776,2537],{"class":78},[68,139778,1867],{"class":52784},[68,139780,62535],{"class":74},[68,139782,1685],{"class":78},[68,139784,133263],{"class":1742},[68,139786,133266],{"class":74},[68,139788,1685],{"class":78},[68,139790,133271],{"class":1742},[68,139792,133274],{"class":78},[68,139794,1867],{"class":52784},[68,139796,52791],{"class":78},[170,139798,139654],{},[58,139800,139801],{"className":128769,"code":133248,"language":128771,"meta":63,"style":63},[65,139802,139803],{"__ignoreMap":63},[68,139804,139805,139807,139809,139811,139813,139815,139817,139819,139821,139823,139825],{"class":70,"line":71},[68,139806,2537],{"class":78},[68,139808,1867],{"class":52784},[68,139810,62535],{"class":74},[68,139812,1685],{"class":78},[68,139814,133263],{"class":1742},[68,139816,133266],{"class":74},[68,139818,1685],{"class":78},[68,139820,133271],{"class":1742},[68,139822,133274],{"class":78},[68,139824,1867],{"class":52784},[68,139826,52791],{"class":78},[170,139828,139829,139830,139832],{},"2 号盒子是 ",[65,139831,133040],{}," 搜索模块定位",[24,139834,139835,139838,139841,139844],{},[27,139836,139837],{},"search盒子利用定位的方式放在对应的位置",[27,139839,139840],{},"search盒子设置绝对定位，header盒子设置相对定位",[27,139842,139843],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[27,139845,139846],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[170,139848,139614],{},[58,139850,139851],{"className":60,"code":133335,"language":62,"meta":63,"style":63},[65,139852,139853,139875,139879,139889],{"__ignoreMap":63},[68,139854,139855,139857,139859,139861,139863,139865,139867,139869,139871,139873],{"class":70,"line":71},[68,139856,53093],{"class":52784},[68,139858,13923],{"class":78},[68,139860,170],{"class":52784},[68,139862,13923],{"class":78},[68,139864,10],{"class":52784},[68,139866,13923],{"class":78},[68,139868,24],{"class":52784},[68,139870,13923],{"class":78},[68,139872,27],{"class":52784},[68,139874,79],{"class":78},[68,139876,139877],{"class":70,"line":82},[68,139878,133364],{"class":302},[68,139880,139881,139883,139885,139887],{"class":70,"line":98},[68,139882,129637],{"class":85},[68,139884,89],{"class":78},[68,139886,62347],{"class":85},[68,139888,95],{"class":78},[68,139890,139891],{"class":70,"line":104},[68,139892,101],{"class":78},[170,139894,139654],{},[58,139896,139897],{"className":60,"code":133335,"language":62,"meta":63,"style":63},[65,139898,139899,139921,139925,139935],{"__ignoreMap":63},[68,139900,139901,139903,139905,139907,139909,139911,139913,139915,139917,139919],{"class":70,"line":71},[68,139902,53093],{"class":52784},[68,139904,13923],{"class":78},[68,139906,170],{"class":52784},[68,139908,13923],{"class":78},[68,139910,10],{"class":52784},[68,139912,13923],{"class":78},[68,139914,24],{"class":52784},[68,139916,13923],{"class":78},[68,139918,27],{"class":52784},[68,139920,79],{"class":78},[68,139922,139923],{"class":70,"line":82},[68,139924,133364],{"class":302},[68,139926,139927,139929,139931,139933],{"class":70,"line":98},[68,139928,129637],{"class":85},[68,139930,89],{"class":78},[68,139932,62347],{"class":85},[68,139934,95],{"class":78},[68,139936,139937],{"class":70,"line":104},[68,139938,101],{"class":78},[170,139940,139941],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[170,139943,139944,139945,139948],{},"3 号盒子是 ",[65,139946,139947],{},"hotwords"," 热词模块定位",[24,139950,139951,139954,139957],{},[27,139952,139953],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[27,139955,139956],{},"给里面所有的a标签设置 左右10px的外边距",[27,139958,139959],{},"给第一个a标签设置文字变红色（#c81623）",[170,139961,139614],{},[58,139963,139965],{"className":60,"code":139964,"language":62,"meta":63,"style":63},"div {\n  margin: 0 auto;\n}\n",[65,139966,139967,139973,139985],{"__ignoreMap":63},[68,139968,139969,139971],{"class":70,"line":71},[68,139970,53093],{"class":52784},[68,139972,79],{"class":78},[68,139974,139975,139977,139979,139981,139983],{"class":70,"line":82},[68,139976,71948],{"class":85},[68,139978,89],{"class":78},[68,139980,1248],{"class":85},[68,139982,53038],{"class":85},[68,139984,95],{"class":78},[68,139986,139987],{"class":70,"line":98},[68,139988,101],{"class":78},[170,139990,139654],{},[58,139992,139993],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,139994,139995,140001,140013],{"__ignoreMap":63},[68,139996,139997,139999],{"class":70,"line":71},[68,139998,53093],{"class":52784},[68,140000,79],{"class":78},[68,140002,140003,140005,140007,140009,140011],{"class":70,"line":82},[68,140004,71948],{"class":85},[68,140006,89],{"class":78},[68,140008,1248],{"class":85},[68,140010,53038],{"class":85},[68,140012,95],{"class":78},[68,140014,140015],{"class":70,"line":98},[68,140016,101],{"class":78},[170,140018,140019,140020,140023],{},"4 号盒子是 ",[65,140021,140022],{},"shopcar"," 购物车模块",[24,140025,140026,140031,140034,140037],{},[27,140027,124809,140028,140030],{},[65,140029,140022],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[27,140032,140033],{},"count 统计部分用绝对定位做",[27,140035,140036],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[27,140038,140039],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[170,140041,139614],{},[58,140043,140044],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,140045,140046,140050,140064,140068,140082,140086,140100,140104,140118,140122],{"__ignoreMap":63},[68,140047,140048],{"class":70,"line":71},[68,140049,133454],{"class":302},[68,140051,140052,140054,140056,140058,140060,140062],{"class":70,"line":82},[68,140053,133459],{"class":74},[68,140055,81284],{"class":78},[68,140057,130381],{"class":85},[68,140059,89],{"class":78},[68,140061,364],{"class":85},[68,140063,130951],{"class":78},[68,140065,140066],{"class":70,"line":98},[68,140067,133474],{"class":302},[68,140069,140070,140072,140074,140076,140078,140080],{"class":70,"line":104},[68,140071,133479],{"class":74},[68,140073,81284],{"class":78},[68,140075,130381],{"class":85},[68,140077,89],{"class":78},[68,140079,296],{"class":85},[68,140081,130951],{"class":78},[68,140083,140084],{"class":70,"line":112},[68,140085,133494],{"class":302},[68,140087,140088,140090,140092,140094,140096,140098],{"class":70,"line":124},[68,140089,133499],{"class":74},[68,140091,81284],{"class":78},[68,140093,130381],{"class":85},[68,140095,89],{"class":78},[68,140097,379],{"class":85},[68,140099,130951],{"class":78},[68,140101,140102],{"class":70,"line":1496},[68,140103,133514],{"class":302},[68,140105,140106,140108,140110,140112,140114,140116],{"class":70,"line":1502},[68,140107,133519],{"class":74},[68,140109,81284],{"class":78},[68,140111,130381],{"class":85},[68,140113,89],{"class":78},[68,140115,387],{"class":85},[68,140117,130951],{"class":78},[68,140119,140120],{"class":70,"line":1510},[68,140121,133534],{"class":302},[68,140123,140124,140126,140128,140130,140132,140134],{"class":70,"line":1521},[68,140125,133539],{"class":74},[68,140127,81284],{"class":78},[68,140129,130381],{"class":85},[68,140131,89],{"class":78},[68,140133,133548],{"class":85},[68,140135,130951],{"class":78},[170,140137,139654],{},[58,140139,140140],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,140141,140142,140146,140160,140164,140178,140182,140196,140200,140214,140218],{"__ignoreMap":63},[68,140143,140144],{"class":70,"line":71},[68,140145,133454],{"class":302},[68,140147,140148,140150,140152,140154,140156,140158],{"class":70,"line":82},[68,140149,133459],{"class":74},[68,140151,81284],{"class":78},[68,140153,130381],{"class":85},[68,140155,89],{"class":78},[68,140157,364],{"class":85},[68,140159,130951],{"class":78},[68,140161,140162],{"class":70,"line":98},[68,140163,133474],{"class":302},[68,140165,140166,140168,140170,140172,140174,140176],{"class":70,"line":104},[68,140167,133479],{"class":74},[68,140169,81284],{"class":78},[68,140171,130381],{"class":85},[68,140173,89],{"class":78},[68,140175,296],{"class":85},[68,140177,130951],{"class":78},[68,140179,140180],{"class":70,"line":112},[68,140181,133494],{"class":302},[68,140183,140184,140186,140188,140190,140192,140194],{"class":70,"line":124},[68,140185,133499],{"class":74},[68,140187,81284],{"class":78},[68,140189,130381],{"class":85},[68,140191,89],{"class":78},[68,140193,379],{"class":85},[68,140195,130951],{"class":78},[68,140197,140198],{"class":70,"line":1496},[68,140199,133514],{"class":302},[68,140201,140202,140204,140206,140208,140210,140212],{"class":70,"line":1502},[68,140203,133519],{"class":74},[68,140205,81284],{"class":78},[68,140207,130381],{"class":85},[68,140209,89],{"class":78},[68,140211,387],{"class":85},[68,140213,130951],{"class":78},[68,140215,140216],{"class":70,"line":1510},[68,140217,133534],{"class":302},[68,140219,140220,140222,140224,140226,140228,140230],{"class":70,"line":1521},[68,140221,133539],{"class":74},[68,140223,81284],{"class":78},[68,140225,130381],{"class":85},[68,140227,89],{"class":78},[68,140229,133548],{"class":85},[68,140231,130951],{"class":78},[19,140233,140235,140236,140238],{"id":140234},"_1544-nav导航模块制作","15.4.4 ",[65,140237,55195],{},"导航模块制作",[801,140240],{"style":803,"src":140241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[170,140243,140244,140246],{},[65,140245,55195],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[170,140248,140249,140250],{},"1 号盒子左侧浮动，",[65,140251,140252],{},"dropdown",[24,140254,140255,140265,140273,140279,140287,140297,140305,140316],{},[27,140256,140257,140258,102493,140261,140264],{},"1号盒子有讲究，根据相关性 里面包含 ",[65,140259,140260],{},".dt",[65,140262,140263],{},".dd"," 两个盒子",[27,140266,140267,140269,140270,140272],{},[65,140268,140260],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[65,140271,140263],{}," 挤到下面去了",[27,140274,140275,140276,140278],{},"给 ",[65,140277,140263],{}," 盒子设置宽度 和 高度，以及背景颜色",[27,140280,140275,140281,140283,140284,121711],{},[65,140282,140263],{}," 盒子里面定义 无序列表 （",[65,140285,140286],{},"ul > li > a",[27,140288,140289,140290,140292,140293,140296],{},"每个 ",[65,140291,27],{}," 都有一个高度（",[65,140294,140295],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[27,140298,140275,140299,140301,140302,121711],{},[65,140300,27],{}," 里面的a设置文字大小（",[65,140303,140304],{},"14px",[27,140306,140275,140307,140309,140310,140312,140313,140315],{},[65,140308,27],{}," 设置 ",[65,140311,129183],{},"，当鼠标移入的时候，让",[65,140314,27],{},"的背景变成白色，让里面的文字变成红色",[27,140317,140318,140320,140321,140323,140324,140326],{},[65,140319,27],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[65,140322,27],{},"的右侧，那么给",[65,140325,27],{},"设置相对定位",[170,140328,140329],{},"一定要注意相关性",[170,140331,139614],{},[58,140333,140334],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,140335,140336,140344,140354,140364],{"__ignoreMap":63},[68,140337,140338,140340,140342],{"class":70,"line":71},[68,140339,53093],{"class":52784},[68,140341,138776],{"class":74},[68,140343,79],{"class":78},[68,140345,140346,140348,140350,140352],{"class":70,"line":82},[68,140347,138783],{"class":85},[68,140349,89],{"class":78},[68,140351,9141],{"class":1742},[68,140353,95],{"class":78},[68,140355,140356,140358,140360,140362],{"class":70,"line":98},[68,140357,129637],{"class":85},[68,140359,89],{"class":78},[68,140361,62347],{"class":85},[68,140363,95],{"class":78},[68,140365,140366],{"class":70,"line":104},[68,140367,101],{"class":78},[170,140369,139654],{},[58,140371,140372],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,140373,140374,140382,140392,140402],{"__ignoreMap":63},[68,140375,140376,140378,140380],{"class":70,"line":71},[68,140377,53093],{"class":52784},[68,140379,138776],{"class":74},[68,140381,79],{"class":78},[68,140383,140384,140386,140388,140390],{"class":70,"line":82},[68,140385,138783],{"class":85},[68,140387,89],{"class":78},[68,140389,9141],{"class":1742},[68,140391,95],{"class":78},[68,140393,140394,140396,140398,140400],{"class":70,"line":98},[68,140395,129637],{"class":85},[68,140397,89],{"class":78},[68,140399,62347],{"class":85},[68,140401,95],{"class":78},[68,140403,140404],{"class":70,"line":104},[68,140405,101],{"class":78},[170,140407,140408],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[170,140410,140411,140412,140415],{},"2 号盒子左侧浮动，",[65,140413,140414],{},"navitems"," 导航栏组",[24,140417,140418,140423,140432],{},[27,140419,140420,140421],{},"里面结构是 ",[65,140422,140286],{},[27,140424,140425,140426,140428,140429,140431],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[65,140427,1867],{},"左右的",[65,140430,32367],{},"把两侧撑开",[27,140433,140434],{},"让文字垂直居中（行高等于高度）",[801,140436],{"style":803,"src":140437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[170,140439,140440],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[170,140442,139614],{},[58,140444,140446],{"className":60,"code":140445,"language":62,"meta":63,"style":63},".box {\n  float: left;\n}\n",[65,140447,140448,140454,140464],{"__ignoreMap":63},[68,140449,140450,140452],{"class":70,"line":71},[68,140451,284],{"class":74},[68,140453,79],{"class":78},[68,140455,140456,140458,140460,140462],{"class":70,"line":82},[68,140457,86],{"class":85},[68,140459,89],{"class":78},[68,140461,92],{"class":85},[68,140463,95],{"class":78},[68,140465,140466],{"class":70,"line":98},[68,140467,101],{"class":78},[170,140469,139654],{},[58,140471,140472],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,140473,140474,140480,140490],{"__ignoreMap":63},[68,140475,140476,140478],{"class":70,"line":71},[68,140477,284],{"class":74},[68,140479,79],{"class":78},[68,140481,140482,140484,140486,140488],{"class":70,"line":82},[68,140483,86],{"class":85},[68,140485,89],{"class":78},[68,140487,92],{"class":85},[68,140489,95],{"class":78},[68,140491,140492],{"class":70,"line":98},[68,140493,101],{"class":78},[170,140495,140496],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[801,140498],{"style":803,"src":140499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[58,140501,140502],{"className":60,"code":132176,"language":62,"meta":63,"style":63},[65,140503,140504,140510,140526],{"__ignoreMap":63},[68,140505,140506,140508],{"class":70,"line":71},[68,140507,53093],{"class":52784},[68,140509,79],{"class":78},[68,140511,140512,140514,140516,140518,140520,140522,140524],{"class":70,"line":82},[68,140513,72374],{"class":85},[68,140515,89],{"class":78},[68,140517,1846],{"class":85},[68,140519,317],{"class":316},[68,140521,53003],{"class":85},[68,140523,131413],{"class":85},[68,140525,95],{"class":78},[68,140527,140528],{"class":70,"line":98},[68,140529,101],{"class":78},[19,140531,140533],{"id":140532},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[801,140535],{"style":803,"src":140536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[24,140538,140539,140544,140549],{},[27,140540,140541,140543],{},[65,140542,133218],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[27,140545,140546,140548],{},[65,140547,133218],{}," 里面有一个大的版心",[27,140550,140551,140552,140555,140556],{},"版心里面包含 1 号盒子，",[65,140553,140554],{},"mod_service"," 是服务模块，mod 是模块的意思",[24,140557,140558,140563,140576,140592,140597],{},[27,140559,140275,140560,140562],{},[65,140561,140554],{}," 设置高度（80px）和下边框",[27,140564,140565,140566,140569,140570,140572,140573,140575],{},"在里面定义 ",[65,140567,140568],{},"ul > li"," ,每个",[65,140571,27],{}," 宽度是300px 高度是 50px，给每个",[65,140574,27],{},"设置35px的左内边距",[27,140577,140578,140579,140581,140582,140584,140585,140587,140588,19897,140590,121711],{},"在每个",[65,140580,27],{},"里面，放一个 ",[65,140583,24396],{},"（里面放图标），一个",[65,140586,53093],{},"（里面放",[65,140589,53093],{},[65,140591,170],{},[27,140593,140275,140594,140596],{},[65,140595,24396],{},"设置浮动，让h5与这个div左右排列",[27,140598,140599],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[170,140601,139614],{},[58,140603,140605],{"className":60,"code":140604,"language":62,"meta":63,"style":63},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[65,140606,140607,140613,140625,140637,140664],{"__ignoreMap":63},[68,140608,140609,140611],{"class":70,"line":71},[68,140610,135532],{"class":74},[68,140612,79],{"class":78},[68,140614,140615,140617,140619,140621,140623],{"class":70,"line":82},[68,140616,72046],{"class":85},[68,140618,89],{"class":78},[68,140620,333],{"class":85},[68,140622,317],{"class":316},[68,140624,95],{"class":78},[68,140626,140627,140629,140631,140633,140635],{"class":70,"line":98},[68,140628,72266],{"class":85},[68,140630,89],{"class":78},[68,140632,333],{"class":85},[68,140634,317],{"class":316},[68,140636,95],{"class":78},[68,140638,140639,140641,140643,140645,140647,140649,140651,140653,140656,140658,140660,140662],{"class":70,"line":104},[68,140640,72089],{"class":85},[68,140642,89],{"class":78},[68,140644,63204],{"class":85},[68,140646,1640],{"class":78},[68,140648,135571],{"class":6705},[68,140650,15202],{"class":78},[68,140652,63214],{"class":85},[68,140654,140655],{"class":85}," -10",[68,140657,317],{"class":316},[68,140659,135590],{"class":85},[68,140661,317],{"class":316},[68,140663,95],{"class":78},[68,140665,140666],{"class":70,"line":112},[68,140667,101],{"class":78},[170,140669,139654],{},[58,140671,140672],{"className":60,"code":140604,"language":62,"meta":63,"style":63},[65,140673,140674,140680,140692,140704,140730],{"__ignoreMap":63},[68,140675,140676,140678],{"class":70,"line":71},[68,140677,135532],{"class":74},[68,140679,79],{"class":78},[68,140681,140682,140684,140686,140688,140690],{"class":70,"line":82},[68,140683,72046],{"class":85},[68,140685,89],{"class":78},[68,140687,333],{"class":85},[68,140689,317],{"class":316},[68,140691,95],{"class":78},[68,140693,140694,140696,140698,140700,140702],{"class":70,"line":98},[68,140695,72266],{"class":85},[68,140697,89],{"class":78},[68,140699,333],{"class":85},[68,140701,317],{"class":316},[68,140703,95],{"class":78},[68,140705,140706,140708,140710,140712,140714,140716,140718,140720,140722,140724,140726,140728],{"class":70,"line":104},[68,140707,72089],{"class":85},[68,140709,89],{"class":78},[68,140711,63204],{"class":85},[68,140713,1640],{"class":78},[68,140715,135571],{"class":6705},[68,140717,15202],{"class":78},[68,140719,63214],{"class":85},[68,140721,140655],{"class":85},[68,140723,317],{"class":316},[68,140725,135590],{"class":85},[68,140727,317],{"class":316},[68,140729,95],{"class":78},[68,140731,140732],{"class":70,"line":112},[68,140733,101],{"class":78},[170,140735,140736],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[24,140738,140739,140742,140748,140754,140766],{},[27,140740,140741],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[27,140743,140744,140745,121711],{},"里面的布局利用 自定义列表来实现（",[65,140746,140747],{},"dl > dt + dd",[27,140749,140275,140750,140753],{},[65,140751,140752],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[27,140755,140275,140756,140759,140760,19897,140762,140765],{},[65,140757,140758],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[65,140761,140758],{},[65,140763,140764],{},"dd","之间有些距离",[27,140767,140768],{},"最后一个 dl 结构和样式不一样，需要单独设置",[170,140770,139614],{},[58,140772,140773],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,140774,140775,140781,140793],{"__ignoreMap":63},[68,140776,140777,140779],{"class":70,"line":71},[68,140778,53093],{"class":52784},[68,140780,79],{"class":78},[68,140782,140783,140785,140787,140789,140791],{"class":70,"line":82},[68,140784,71948],{"class":85},[68,140786,89],{"class":78},[68,140788,1248],{"class":85},[68,140790,53038],{"class":85},[68,140792,95],{"class":78},[68,140794,140795],{"class":70,"line":98},[68,140796,101],{"class":78},[170,140798,139654],{},[58,140800,140801],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,140802,140803,140809,140821],{"__ignoreMap":63},[68,140804,140805,140807],{"class":70,"line":71},[68,140806,53093],{"class":52784},[68,140808,79],{"class":78},[68,140810,140811,140813,140815,140817,140819],{"class":70,"line":82},[68,140812,71948],{"class":85},[68,140814,89],{"class":78},[68,140816,1248],{"class":85},[68,140818,53038],{"class":85},[68,140820,95],{"class":78},[68,140822,140823],{"class":70,"line":98},[68,140824,101],{"class":78},[170,140826,140827],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[24,140829,140830,140839,140842,140853],{},[27,140831,140832,140833,140835,140836,140838],{},"分为上下两块，上面是 ",[65,140834,133235],{}," 友情链接，下面是 ",[65,140837,133228],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[27,140840,140841],{},"把内容分别复制到相应模块中",[27,140843,140275,140844,140846,140847,140849,140850,140852],{},[65,140845,133235],{}," 设置 15px 的下外边距，给",[65,140848,133235],{}," 里面 的 ",[65,140851,1867],{}," 标签设置 左右 3px 的外边距",[27,140854,140855,140856,140858],{},"给",[65,140857,133228],{}," 设置 20px 的行高",[170,140860,139614],{},[58,140862,140863],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,140864,140865,140871,140883],{"__ignoreMap":63},[68,140866,140867,140869],{"class":70,"line":71},[68,140868,53093],{"class":52784},[68,140870,79],{"class":78},[68,140872,140873,140875,140877,140879,140881],{"class":70,"line":82},[68,140874,71948],{"class":85},[68,140876,89],{"class":78},[68,140878,1248],{"class":85},[68,140880,53038],{"class":85},[68,140882,95],{"class":78},[68,140884,140885],{"class":70,"line":98},[68,140886,101],{"class":78},[170,140888,139654],{},[58,140890,140891],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,140892,140893,140899,140911],{"__ignoreMap":63},[68,140894,140895,140897],{"class":70,"line":71},[68,140896,53093],{"class":52784},[68,140898,79],{"class":78},[68,140900,140901,140903,140905,140907,140909],{"class":70,"line":82},[68,140902,71948],{"class":85},[68,140904,89],{"class":78},[68,140906,1248],{"class":85},[68,140908,53038],{"class":85},[68,140910,95],{"class":78},[68,140912,140913],{"class":70,"line":98},[68,140914,101],{"class":78},[170,140916,140917],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1553,140919,140920],{},"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":63,"searchDepth":82,"depth":82,"links":140922},[140923,140924,140925,140932],{"id":139203,"depth":82,"text":139204},{"id":139222,"depth":82,"text":139223},{"id":139249,"depth":82,"text":139250,"children":140926},[140927,140928,140929,140930,140931],{"id":139253,"depth":98,"text":139254},{"id":139266,"depth":98,"text":139267},{"id":139290,"depth":98,"text":139291},{"id":139312,"depth":98,"text":139313},{"id":139384,"depth":98,"text":139385},{"id":139510,"depth":82,"text":139511,"children":140933},[140934,140935,140936,140937,140939],{"id":139514,"depth":98,"text":139515},{"id":139521,"depth":98,"text":139522},{"id":139693,"depth":98,"text":139694},{"id":140234,"depth":98,"text":140938},"15.4.4 nav导航模块制作",{"id":140532,"depth":98,"text":140533},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139195,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140946,"title":140947,"body":140948,"description":1564,"extension":1565,"meta":143350,"navigation":1567,"path":143351,"seo":143352,"stem":143353,"__hash__":143354},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140949,"toc":143327},[140950,140953,140957,140961,140973,140976,140979,140982,140993,140995,141019,141021,141045,141050,141053,141055,141091,141093,141129,141132,141137,141140,141143,141146,141176,141183,141186,141196,141198,141232,141235,141269,141275,141292,141294,141330,141332,141368,141373,141398,141400,141426,141428,141452,141459,141462,141526,141528,141570,141572,141612,141619,141624,141626,141656,141658,141688,141692,141695,141702,141714,141716,141742,141744,141768,141771,141773,141797,141803,141813,141815,141845,141847,141877,141884,141925,141927,141963,141965,142001,142005,142008,142011,142014,142020,142025,142028,142051,142054,142078,142081,142105,142110,142113,142116,142119,142122,142125,142199,142201,142231,142233,142263,142266,142269,142301,142305,142309,142323,142332,142335,142340,142342,142436,142438,142532,142555,142557,142581,142583,142607,142614,142617,142627,142629,142653,142658,142666,142668,142698,142703,142743,142745,142771,142773,142799,142803,142806,142811,142814,142818,142826,142833,142841,142843,142873,142875,142905,142913,142916,142919,142921,142951,142953,142983,142986,142991,142993,143017,143019,143043,143046,143131,143133,143157,143159,143183,143187,143189,143213,143215,143249,143253,143267,143270,143275,143278,143283,143286,143316,143324],[10,140951,140947],{"id":140952},"_16-品优购项目下篇-主体与页面开发",[14,140954,140956],{"id":140955},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,140958,140960],{"id":140959},"_1611-首页制作","16.1.1 首页制作",[170,140962,140963,140965,140966,140968,140969,140972],{},[268,140964,103533],{}," 主体模块是 ",[268,140967,75535],{}," 里面专有的，注意需要新的样式文件 ",[268,140970,140971],{},"index.css，"," 就不要写在common.css中了",[801,140974],{"style":803,"src":140975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[801,140977],{"style":803,"src":140978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[170,140980,140981],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[24,140983,140984,140987,140990],{},[27,140985,140986],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[27,140988,140989],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[27,140991,140992],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[170,140994,139614],{},[58,140996,140997],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,140998,140999,141005,141015],{"__ignoreMap":63},[68,141000,141001,141003],{"class":70,"line":71},[68,141002,284],{"class":74},[68,141004,79],{"class":78},[68,141006,141007,141009,141011,141013],{"class":70,"line":82},[68,141008,86],{"class":85},[68,141010,89],{"class":78},[68,141012,92],{"class":85},[68,141014,95],{"class":78},[68,141016,141017],{"class":70,"line":98},[68,141018,101],{"class":78},[170,141020,139654],{},[58,141022,141023],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,141024,141025,141031,141041],{"__ignoreMap":63},[68,141026,141027,141029],{"class":70,"line":71},[68,141028,284],{"class":74},[68,141030,79],{"class":78},[68,141032,141033,141035,141037,141039],{"class":70,"line":82},[68,141034,86],{"class":85},[68,141036,89],{"class":78},[68,141038,92],{"class":85},[68,141040,95],{"class":78},[68,141042,141043],{"class":70,"line":98},[68,141044,101],{"class":78},[263,141046,141047],{},[27,141048,141049],{},"左侧focus模块制作",[801,141051],{"style":803,"src":141052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[170,141054,139614],{},[58,141056,141057],{"className":60,"code":129344,"language":62,"meta":63,"style":63},[65,141058,141059,141067,141077,141087],{"__ignoreMap":63},[68,141060,141061,141063,141065],{"class":70,"line":71},[68,141062,55302],{"class":52784},[68,141064,63378],{"class":74},[68,141066,79],{"class":78},[68,141068,141069,141071,141073,141075],{"class":70,"line":82},[68,141070,129359],{"class":85},[68,141072,89],{"class":78},[68,141074,56367],{"class":85},[68,141076,95],{"class":78},[68,141078,141079,141081,141083,141085],{"class":70,"line":98},[68,141080,72276],{"class":85},[68,141082,89],{"class":78},[68,141084,151],{"class":85},[68,141086,95],{"class":78},[68,141088,141089],{"class":70,"line":104},[68,141090,101],{"class":78},[170,141092,139654],{},[58,141094,141095],{"className":60,"code":129344,"language":62,"meta":63,"style":63},[65,141096,141097,141105,141115,141125],{"__ignoreMap":63},[68,141098,141099,141101,141103],{"class":70,"line":71},[68,141100,55302],{"class":52784},[68,141102,63378],{"class":74},[68,141104,79],{"class":78},[68,141106,141107,141109,141111,141113],{"class":70,"line":82},[68,141108,129359],{"class":85},[68,141110,89],{"class":78},[68,141112,56367],{"class":85},[68,141114,95],{"class":78},[68,141116,141117,141119,141121,141123],{"class":70,"line":98},[68,141118,72276],{"class":85},[68,141120,89],{"class":78},[68,141122,151],{"class":85},[68,141124,95],{"class":78},[68,141126,141127],{"class":70,"line":104},[68,141128,101],{"class":78},[170,141130,141131],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[263,141133,141134],{"start":82},[27,141135,141136],{},"右侧newsflash模块制作",[801,141138],{"style":803,"src":141139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[170,141141,141142],{},"右侧的模块 分为上中下三个盒子",[170,141144,141145],{},"结构代码：",[58,141147,141148],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,141149,141150],{"__ignoreMap":63},[68,141151,141152,141154,141156,141158,141160,141162,141164,141166,141168,141170,141172,141174],{"class":70,"line":71},[68,141153,2537],{"class":78},[68,141155,801],{"class":52784},[68,141157,56717],{"class":74},[68,141159,1685],{"class":78},[68,141161,135292],{"class":1742},[68,141163,56725],{"class":74},[68,141165,1685],{"class":78},[68,141167,135299],{"class":1742},[68,141169,135302],{"class":74},[68,141171,1685],{"class":78},[68,141173,135307],{"class":1742},[68,141175,52791],{"class":78},[170,141177,141178,141179,141182],{},"1 号盒子为 ",[65,141180,141181],{},"news"," 新闻模块 高度为 165px",[801,141184],{"style":803,"src":141185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[170,141187,141188,141189,141192,141193],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[65,141190,141191],{},"news-hd","，下面是 ",[65,141194,141195],{},"news-bd",[170,141197,141145],{},[58,141199,141200],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,141201,141202,141206,141220,141224],{"__ignoreMap":63},[68,141203,141204],{"class":70,"line":71},[68,141205,132130],{"class":302},[68,141207,141208,141210,141212,141214,141216,141218],{"class":70,"line":82},[68,141209,2537],{"class":78},[68,141211,53093],{"class":52784},[68,141213,54968],{"class":74},[68,141215,1685],{"class":78},[68,141217,132143],{"class":1742},[68,141219,52791],{"class":78},[68,141221,141222],{"class":70,"line":98},[68,141223,132150],{"class":78},[68,141225,141226,141228,141230],{"class":70,"line":104},[68,141227,53267],{"class":78},[68,141229,53093],{"class":52784},[68,141231,52791],{"class":78},[170,141233,141234],{},"样式代码：",[58,141236,141237],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,141238,141239,141243,141257,141261],{"__ignoreMap":63},[68,141240,141241],{"class":70,"line":71},[68,141242,132130],{"class":302},[68,141244,141245,141247,141249,141251,141253,141255],{"class":70,"line":82},[68,141246,2537],{"class":78},[68,141248,53093],{"class":52784},[68,141250,54968],{"class":74},[68,141252,1685],{"class":78},[68,141254,132143],{"class":1742},[68,141256,52791],{"class":78},[68,141258,141259],{"class":70,"line":98},[68,141260,132150],{"class":78},[68,141262,141263,141265,141267],{"class":70,"line":104},[68,141264,53267],{"class":78},[68,141266,53093],{"class":52784},[68,141268,52791],{"class":78},[170,141270,141271,141272,141274],{},"上面是",[65,141273,141191],{},"，设置高度是 33px，设置下边框",[24,141276,141277,141283],{},[27,141278,141279,141280,141282],{},"里面放一个",[65,141281,24396],{}," 标题",[27,141284,141285,141286,141288,141289,141291],{},"放一个a",[65,141287,104168],{},"，内容是 更多，然后让 ",[65,141290,1867],{}," 进行右浮动，三角用伪元素设置字体图标就好",[170,141293,141145],{},[58,141295,141296],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,141297,141298,141306,141316,141326],{"__ignoreMap":63},[68,141299,141300,141302,141304],{"class":70,"line":71},[68,141301,53093],{"class":52784},[68,141303,138776],{"class":74},[68,141305,79],{"class":78},[68,141307,141308,141310,141312,141314],{"class":70,"line":82},[68,141309,138783],{"class":85},[68,141311,89],{"class":78},[68,141313,9141],{"class":1742},[68,141315,95],{"class":78},[68,141317,141318,141320,141322,141324],{"class":70,"line":98},[68,141319,129637],{"class":85},[68,141321,89],{"class":78},[68,141323,62347],{"class":85},[68,141325,95],{"class":78},[68,141327,141328],{"class":70,"line":104},[68,141329,101],{"class":78},[170,141331,141234],{},[58,141333,141334],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,141335,141336,141344,141354,141364],{"__ignoreMap":63},[68,141337,141338,141340,141342],{"class":70,"line":71},[68,141339,53093],{"class":52784},[68,141341,138776],{"class":74},[68,141343,79],{"class":78},[68,141345,141346,141348,141350,141352],{"class":70,"line":82},[68,141347,138783],{"class":85},[68,141349,89],{"class":78},[68,141351,9141],{"class":1742},[68,141353,95],{"class":78},[68,141355,141356,141358,141360,141362],{"class":70,"line":98},[68,141357,129637],{"class":85},[68,141359,89],{"class":78},[68,141361,62347],{"class":85},[68,141363,95],{"class":78},[68,141365,141366],{"class":70,"line":104},[68,141367,101],{"class":78},[170,141369,141370,141371],{},"下面是",[65,141372,141195],{},[24,141374,141375,141383],{},[27,141376,141377,141378,102493,141380,141382],{},"里面包含 ",[65,141379,24],{},[65,141381,27],{}," 还有链接",[27,141384,140855,141385,141387,141388,141390,141391,141394,141395],{},[65,141386,27],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[65,141389,132681],{}," 2.设置 ",[65,141392,141393],{},"white-space: nowrap;"," 3. 设置 ",[65,141396,141397],{},"text-overflow: ellipsis;",[170,141399,141145],{},[58,141401,141403],{"className":60,"code":141402,"language":62,"meta":63,"style":63},"div {\n  overflow: hidden;\n}\n",[65,141404,141405,141411,141422],{"__ignoreMap":63},[68,141406,141407,141409],{"class":70,"line":71},[68,141408,53093],{"class":52784},[68,141410,79],{"class":78},[68,141412,141413,141416,141418,141420],{"class":70,"line":82},[68,141414,141415],{"class":85},"  overflow",[68,141417,89],{"class":78},[68,141419,63192],{"class":85},[68,141421,95],{"class":78},[68,141423,141424],{"class":70,"line":98},[68,141425,101],{"class":78},[170,141427,141234],{},[58,141429,141430],{"className":60,"code":141402,"language":62,"meta":63,"style":63},[65,141431,141432,141438,141448],{"__ignoreMap":63},[68,141433,141434,141436],{"class":70,"line":71},[68,141435,53093],{"class":52784},[68,141437,79],{"class":78},[68,141439,141440,141442,141444,141446],{"class":70,"line":82},[68,141441,141415],{"class":85},[68,141443,89],{"class":78},[68,141445,63192],{"class":85},[68,141447,95],{"class":78},[68,141449,141450],{"class":70,"line":98},[68,141451,101],{"class":78},[170,141453,141454,141455,141458],{},"2 号盒子为 ",[65,141456,141457],{},"lifeservice"," 生活服务模块 高度为 209px",[801,141460],{"style":803,"src":141461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[24,141463,141464,141467,141477,141501,141512],{},[27,141465,141466],{},"设置边框（左右下边框）",[27,141468,141469,141470,141473,141474,141476],{},"里面的内容 是 ",[65,141471,141472],{},"ul > 12*li","，给",[65,141475,27],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[27,141478,141479,141480],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[24,141481,141482,141487,141496],{},[27,141483,141484,141486],{},[65,141485,141457],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[27,141488,141489,141490,141492,141493,141495],{},"可以让 ",[65,141491,141457],{}," 里面的 ",[65,141494,24],{}," 宽度为 252，就可以装的下 4 个 小 li",[27,141497,141498,141500],{},[65,141499,141457],{}," 盒子 overflow 隐藏多余的部分就可以了",[27,141502,117941,141503,141505,141506,141508,141509,141511],{},[65,141504,27],{}," 里面放一个 ",[65,141507,2070],{},"（里面放图标），下面的文本用 ",[65,141510,170],{}," 标签包裹",[27,141513,140275,141514,141516,141517,141519,141520,140309,141522,141525],{},[65,141515,2070],{}," 设置 24px宽和28px的高（注意 ",[65,141518,2070],{}," 是行内元素， 转成行内块），给 ",[65,141521,27],{},[65,141523,141524],{},"text-align:center"," 让里面内容居中显示",[170,141527,141145],{},[58,141529,141531],{"className":60,"code":141530,"language":62,"meta":63,"style":63},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[65,141532,141533,141551,141556,141566],{"__ignoreMap":63},[68,141534,141535,141537,141539,141541,141543,141545,141547,141549],{"class":70,"line":71},[68,141536,68],{"class":52784},[68,141538,13923],{"class":78},[68,141540,1867],{"class":52784},[68,141542,13923],{"class":78},[68,141544,25039],{"class":52784},[68,141546,13923],{"class":78},[68,141548,268],{"class":52784},[68,141550,79],{"class":78},[68,141552,141553],{"class":70,"line":82},[68,141554,141555],{"class":302},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[68,141557,141558,141560,141562,141564],{"class":70,"line":98},[68,141559,129637],{"class":85},[68,141561,89],{"class":78},[68,141563,129699],{"class":85},[68,141565,95],{"class":78},[68,141567,141568],{"class":70,"line":104},[68,141569,101],{"class":78},[170,141571,141234],{},[58,141573,141574],{"className":60,"code":141530,"language":62,"meta":63,"style":63},[65,141575,141576,141594,141598,141608],{"__ignoreMap":63},[68,141577,141578,141580,141582,141584,141586,141588,141590,141592],{"class":70,"line":71},[68,141579,68],{"class":52784},[68,141581,13923],{"class":78},[68,141583,1867],{"class":52784},[68,141585,13923],{"class":78},[68,141587,25039],{"class":52784},[68,141589,13923],{"class":78},[68,141591,268],{"class":52784},[68,141593,79],{"class":78},[68,141595,141596],{"class":70,"line":82},[68,141597,141555],{"class":302},[68,141599,141600,141602,141604,141606],{"class":70,"line":98},[68,141601,129637],{"class":85},[68,141603,89],{"class":78},[68,141605,129699],{"class":85},[68,141607,95],{"class":78},[68,141609,141610],{"class":70,"line":104},[68,141611,101],{"class":78},[170,141613,141614,141615,141618],{},"3 号盒子为 ",[65,141616,141617],{},"bargain"," 特价商品",[24,141620,141621],{},[27,141622,141623],{},"这个比较简单，直接插入一张图片即可",[170,141625,141145],{},[58,141627,141628],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,141629,141630],{"__ignoreMap":63},[68,141631,141632,141634,141636,141638,141640,141642,141644,141646,141648,141650,141652,141654],{"class":70,"line":71},[68,141633,2537],{"class":78},[68,141635,801],{"class":52784},[68,141637,56717],{"class":74},[68,141639,1685],{"class":78},[68,141641,135292],{"class":1742},[68,141643,56725],{"class":74},[68,141645,1685],{"class":78},[68,141647,135299],{"class":1742},[68,141649,135302],{"class":74},[68,141651,1685],{"class":78},[68,141653,135307],{"class":1742},[68,141655,52791],{"class":78},[170,141657,141234],{},[58,141659,141660],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,141661,141662],{"__ignoreMap":63},[68,141663,141664,141666,141668,141670,141672,141674,141676,141678,141680,141682,141684,141686],{"class":70,"line":71},[68,141665,2537],{"class":78},[68,141667,801],{"class":52784},[68,141669,56717],{"class":74},[68,141671,1685],{"class":78},[68,141673,135292],{"class":1742},[68,141675,56725],{"class":74},[68,141677,1685],{"class":78},[68,141679,135299],{"class":1742},[68,141681,135302],{"class":74},[68,141683,1685],{"class":78},[68,141685,135307],{"class":1742},[68,141687,52791],{"class":78},[19,141689,141691],{"id":141690},"_1612-推荐模块制作","16.1.2 推荐模块制作",[801,141693],{"style":803,"src":141694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[170,141696,141697,141698,141701],{},"大盒子 ",[65,141699,141700],{},"recom"," 推荐模块 recommend",[24,141703,141704],{},[27,141705,141706,141707,141709,141710,141713],{},"给这个 ",[65,141708,141700],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[65,141711,141712],{},"#ebebeb","），设置距离上边 12px",[170,141715,141145],{},[58,141717,141719],{"className":60,"code":141718,"language":62,"meta":63,"style":63},"div {\n  background-color: #f0f0f0;\n}\n",[65,141720,141721,141727,141738],{"__ignoreMap":63},[68,141722,141723,141725],{"class":70,"line":71},[68,141724,53093],{"class":52784},[68,141726,79],{"class":78},[68,141728,141729,141731,141733,141736],{"class":70,"line":82},[68,141730,72356],{"class":85},[68,141732,89],{"class":78},[68,141734,141735],{"class":85},"#f0f0f0",[68,141737,95],{"class":78},[68,141739,141740],{"class":70,"line":98},[68,141741,101],{"class":78},[170,141743,141234],{},[58,141745,141746],{"className":60,"code":141718,"language":62,"meta":63,"style":63},[65,141747,141748,141754,141764],{"__ignoreMap":63},[68,141749,141750,141752],{"class":70,"line":71},[68,141751,53093],{"class":52784},[68,141753,79],{"class":78},[68,141755,141756,141758,141760,141762],{"class":70,"line":82},[68,141757,72356],{"class":85},[68,141759,89],{"class":78},[68,141761,141735],{"class":85},[68,141763,95],{"class":78},[68,141765,141766],{"class":70,"line":98},[68,141767,101],{"class":78},[170,141769,141770],{},"里面包含 2 个盒子， 浮动即可",[170,141772,141145],{},[58,141774,141775],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,141776,141777,141783,141793],{"__ignoreMap":63},[68,141778,141779,141781],{"class":70,"line":71},[68,141780,284],{"class":74},[68,141782,79],{"class":78},[68,141784,141785,141787,141789,141791],{"class":70,"line":82},[68,141786,86],{"class":85},[68,141788,89],{"class":78},[68,141790,92],{"class":85},[68,141792,95],{"class":78},[68,141794,141795],{"class":70,"line":98},[68,141796,101],{"class":78},[170,141798,141799,141800],{},"1 号盒子 ",[65,141801,141802],{},"recom_hd",[24,141804,141805,141808],{},[27,141806,141807],{},"设置宽度205px，高度163px",[27,141809,141279,141810,141812],{},[65,141811,801],{},"标签，插入图片即可",[170,141814,141145],{},[58,141816,141817],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,141818,141819],{"__ignoreMap":63},[68,141820,141821,141823,141825,141827,141829,141831,141833,141835,141837,141839,141841,141843],{"class":70,"line":71},[68,141822,2537],{"class":78},[68,141824,801],{"class":52784},[68,141826,56717],{"class":74},[68,141828,1685],{"class":78},[68,141830,135292],{"class":1742},[68,141832,56725],{"class":74},[68,141834,1685],{"class":78},[68,141836,135299],{"class":1742},[68,141838,135302],{"class":74},[68,141840,1685],{"class":78},[68,141842,135307],{"class":1742},[68,141844,52791],{"class":78},[170,141846,141234],{},[58,141848,141849],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,141850,141851],{"__ignoreMap":63},[68,141852,141853,141855,141857,141859,141861,141863,141865,141867,141869,141871,141873,141875],{"class":70,"line":71},[68,141854,2537],{"class":78},[68,141856,801],{"class":52784},[68,141858,56717],{"class":74},[68,141860,1685],{"class":78},[68,141862,135292],{"class":1742},[68,141864,56725],{"class":74},[68,141866,1685],{"class":78},[68,141868,135299],{"class":1742},[68,141870,135302],{"class":74},[68,141872,1685],{"class":78},[68,141874,135307],{"class":1742},[68,141876,52791],{"class":78},[170,141878,141879,141880,141883],{},"2 号盒子 ",[65,141881,141882],{},"recom_bd"," ，注意里面的小竖线",[24,141885,141886,141897,141900,141905,141910],{},[27,141887,141888,141889,141891,141892,141894,141895],{},"右侧结构里面放 ",[65,141890,24],{}," 包含 4个 ",[65,141893,27],{},"，每个li里面包含一个",[65,141896,801],{},[27,141898,141899],{},"直接利用切片工具把里面的内容当成一张图片",[27,141901,140275,141902,141904],{},[65,141903,27],{}," 设置浮动",[27,141906,140275,141907,141909],{},[65,141908,801],{}," 设置宽高，宽度 248px，高度 163px",[27,141911,141912,141913,141473,141916,141918,141919,141921,141922],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[65,141914,141915],{},"top 10px",[65,141917,27],{},"设置相对定位（注意，最后一个",[65,141920,27],{},"不用设置伪元素），可以利用 ",[65,141923,141924],{},"nth-child(-n+3){...}",[170,141926,141145],{},[58,141928,141929],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,141930,141931,141939,141949,141959],{"__ignoreMap":63},[68,141932,141933,141935,141937],{"class":70,"line":71},[68,141934,53093],{"class":52784},[68,141936,138776],{"class":74},[68,141938,79],{"class":78},[68,141940,141941,141943,141945,141947],{"class":70,"line":82},[68,141942,138783],{"class":85},[68,141944,89],{"class":78},[68,141946,9141],{"class":1742},[68,141948,95],{"class":78},[68,141950,141951,141953,141955,141957],{"class":70,"line":98},[68,141952,129637],{"class":85},[68,141954,89],{"class":78},[68,141956,62347],{"class":85},[68,141958,95],{"class":78},[68,141960,141961],{"class":70,"line":104},[68,141962,101],{"class":78},[170,141964,141234],{},[58,141966,141967],{"className":60,"code":139617,"language":62,"meta":63,"style":63},[65,141968,141969,141977,141987,141997],{"__ignoreMap":63},[68,141970,141971,141973,141975],{"class":70,"line":71},[68,141972,53093],{"class":52784},[68,141974,138776],{"class":74},[68,141976,79],{"class":78},[68,141978,141979,141981,141983,141985],{"class":70,"line":82},[68,141980,138783],{"class":85},[68,141982,89],{"class":78},[68,141984,9141],{"class":1742},[68,141986,95],{"class":78},[68,141988,141989,141991,141993,141995],{"class":70,"line":98},[68,141990,129637],{"class":85},[68,141992,89],{"class":78},[68,141994,62347],{"class":85},[68,141996,95],{"class":78},[68,141998,141999],{"class":70,"line":104},[68,142000,101],{"class":78},[19,142002,142004],{"id":142003},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[801,142006],{"style":803,"src":142007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[170,142009,142010],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[170,142012,142013],{},"第一楼是家用电器模块： 里面包含两个盒子",[170,142015,142016,142019],{},[65,142017,142018],{},"box_hd"," 制作",[170,142021,141799,142022,142024],{},[65,142023,142018],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[801,142026],{"style":803,"src":142027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[24,142029,142030,142035,142040,142043],{},[27,142031,142032,142034],{},[65,142033,142018],{}," 给 30px 的高度，2个像素的下边框",[27,142036,142037,142038],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[65,142039,140286],{},[27,142041,142042],{},"左侧盒左浮动，右侧盒子右浮动",[27,142044,142045,142047,142048,142050],{},[65,142046,1867],{},"标签之间的距离用左右的",[65,142049,32367],{},"撑开即可",[170,142052,142053],{},"结构代码",[58,142055,142056],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142057,142058,142064,142074],{"__ignoreMap":63},[68,142059,142060,142062],{"class":70,"line":71},[68,142061,284],{"class":74},[68,142063,79],{"class":78},[68,142065,142066,142068,142070,142072],{"class":70,"line":82},[68,142067,86],{"class":85},[68,142069,89],{"class":78},[68,142071,92],{"class":85},[68,142073,95],{"class":78},[68,142075,142076],{"class":70,"line":98},[68,142077,101],{"class":78},[170,142079,142080],{},"样式代码",[58,142082,142083],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142084,142085,142091,142101],{"__ignoreMap":63},[68,142086,142087,142089],{"class":70,"line":71},[68,142088,284],{"class":74},[68,142090,79],{"class":78},[68,142092,142093,142095,142097,142099],{"class":70,"line":82},[68,142094,86],{"class":85},[68,142096,89],{"class":78},[68,142098,92],{"class":85},[68,142100,95],{"class":78},[68,142102,142103],{"class":70,"line":98},[68,142104,101],{"class":78},[170,142106,142107,142019],{},[65,142108,142109],{},"box_bd",[170,142111,142112],{},"2 号盒子 box_bd，不要给高度",[801,142114],{"style":803,"src":142115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[170,142117,142118],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[170,142120,142121],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[170,142123,142124],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[24,142126,142127,142139,142155],{},[27,142128,142129,142131,142132,142135,142136,142138],{},[65,142130,142109],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[65,142133,142134],{},"tab_content","，在",[65,142137,142134],{}," 里面包裹tab选项卡对应的内容",[27,142140,142141,142142,142145,142146,142148,142149,142151,142152,142154],{},"内容被一个大盒子包裹（",[65,142143,142144],{},"tab_list_item","），里面是 ",[65,142147,24],{}," 包裹 5个 ",[65,142150,27],{},"，每个",[65,142153,27],{},"设置对应的宽度，然后设置浮动",[27,142156,142157,142158,142160,142161,142163,142164],{},"而这5个",[65,142159,27],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[65,142162,27],{},"设置",[24,142165,142166,142184,142187],{},[27,142167,142168,142169,142171,142172,142174,142175,142177,142178,142180,142181,142183],{},"第一个小 ",[65,142170,27],{}," 分为上下结构，上面是 ",[65,142173,24],{}," 包裹 ",[65,142176,27],{}," ，",[65,142179,27],{},"里面包裹 ",[65,142182,1867],{},"，下面插入一张图片",[27,142185,142186],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[27,142188,142189,142190,142192,142193,142195,142196,142198],{},"后面的小 ",[65,142191,27],{}," 里面先放一个",[65,142194,1867],{},"标签，然后在",[65,142197,1867],{},"标签里面插入图片即可",[170,142200,142053],{},[58,142202,142203],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,142204,142205],{"__ignoreMap":63},[68,142206,142207,142209,142211,142213,142215,142217,142219,142221,142223,142225,142227,142229],{"class":70,"line":71},[68,142208,2537],{"class":78},[68,142210,801],{"class":52784},[68,142212,56717],{"class":74},[68,142214,1685],{"class":78},[68,142216,135292],{"class":1742},[68,142218,56725],{"class":74},[68,142220,1685],{"class":78},[68,142222,135299],{"class":1742},[68,142224,135302],{"class":74},[68,142226,1685],{"class":78},[68,142228,135307],{"class":1742},[68,142230,52791],{"class":78},[170,142232,142080],{},[58,142234,142235],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,142236,142237],{"__ignoreMap":63},[68,142238,142239,142241,142243,142245,142247,142249,142251,142253,142255,142257,142259,142261],{"class":70,"line":71},[68,142240,2537],{"class":78},[68,142242,801],{"class":52784},[68,142244,56717],{"class":74},[68,142246,1685],{"class":78},[68,142248,135292],{"class":1742},[68,142250,56725],{"class":74},[68,142252,1685],{"class":78},[68,142254,135299],{"class":1742},[68,142256,135302],{"class":74},[68,142258,1685],{"class":78},[68,142260,135307],{"class":1742},[68,142262,52791],{"class":78},[170,142264,142265],{},"tab栏切换需求！！！！！！介绍：",[801,142267],{"style":803,"src":142268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[24,142270,142271,142279,142285,142288],{},[27,142272,142273,142276,142277],{},[65,142274,142275],{},"tab","栏的布局是 ",[65,142278,140286],{},[27,142280,142281,142282,142284],{},"有多少个",[65,142283,142275],{},"选项卡，那么对应就有多少个内容",[27,142286,142287],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[27,142289,142290,142291,142294,142295,142297,142298,142300],{},"等后面我们学习了",[65,142292,142293],{},"js","之后，我们就会配合",[65,142296,142293],{},"来实现，",[65,142299,142275],{},"栏的切换",[14,142302,142304],{"id":142303},"_162-列表制作","16.2 列表制作",[19,142306,142308],{"id":142307},"_1621-准备工作","16.2.1 准备工作",[24,142310,142311,142314,142317,142320],{},[27,142312,142313],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[27,142315,142316],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[27,142318,142319],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[27,142321,142322],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,142324,142326,142327,102493,142329,142331],{"id":142325},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[65,142328,133020],{},[65,142330,55195],{}," 修改",[801,142333],{"style":803,"src":142334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[24,142336,142337],{},[27,142338,142339],{},"秒杀盒子 sk（ second kill ） 定位即可",[170,142341,141145],{},[58,142343,142344],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,142345,142346,142350,142364,142368,142382,142386,142400,142404,142418,142422],{"__ignoreMap":63},[68,142347,142348],{"class":70,"line":71},[68,142349,133454],{"class":302},[68,142351,142352,142354,142356,142358,142360,142362],{"class":70,"line":82},[68,142353,133459],{"class":74},[68,142355,81284],{"class":78},[68,142357,130381],{"class":85},[68,142359,89],{"class":78},[68,142361,364],{"class":85},[68,142363,130951],{"class":78},[68,142365,142366],{"class":70,"line":98},[68,142367,133474],{"class":302},[68,142369,142370,142372,142374,142376,142378,142380],{"class":70,"line":104},[68,142371,133479],{"class":74},[68,142373,81284],{"class":78},[68,142375,130381],{"class":85},[68,142377,89],{"class":78},[68,142379,296],{"class":85},[68,142381,130951],{"class":78},[68,142383,142384],{"class":70,"line":112},[68,142385,133494],{"class":302},[68,142387,142388,142390,142392,142394,142396,142398],{"class":70,"line":124},[68,142389,133499],{"class":74},[68,142391,81284],{"class":78},[68,142393,130381],{"class":85},[68,142395,89],{"class":78},[68,142397,379],{"class":85},[68,142399,130951],{"class":78},[68,142401,142402],{"class":70,"line":1496},[68,142403,133514],{"class":302},[68,142405,142406,142408,142410,142412,142414,142416],{"class":70,"line":1502},[68,142407,133519],{"class":74},[68,142409,81284],{"class":78},[68,142411,130381],{"class":85},[68,142413,89],{"class":78},[68,142415,387],{"class":85},[68,142417,130951],{"class":78},[68,142419,142420],{"class":70,"line":1510},[68,142421,133534],{"class":302},[68,142423,142424,142426,142428,142430,142432,142434],{"class":70,"line":1521},[68,142425,133539],{"class":74},[68,142427,81284],{"class":78},[68,142429,130381],{"class":85},[68,142431,89],{"class":78},[68,142433,133548],{"class":85},[68,142435,130951],{"class":78},[170,142437,141234],{},[58,142439,142440],{"className":60,"code":133447,"language":62,"meta":63,"style":63},[65,142441,142442,142446,142460,142464,142478,142482,142496,142500,142514,142518],{"__ignoreMap":63},[68,142443,142444],{"class":70,"line":71},[68,142445,133454],{"class":302},[68,142447,142448,142450,142452,142454,142456,142458],{"class":70,"line":82},[68,142449,133459],{"class":74},[68,142451,81284],{"class":78},[68,142453,130381],{"class":85},[68,142455,89],{"class":78},[68,142457,364],{"class":85},[68,142459,130951],{"class":78},[68,142461,142462],{"class":70,"line":98},[68,142463,133474],{"class":302},[68,142465,142466,142468,142470,142472,142474,142476],{"class":70,"line":104},[68,142467,133479],{"class":74},[68,142469,81284],{"class":78},[68,142471,130381],{"class":85},[68,142473,89],{"class":78},[68,142475,296],{"class":85},[68,142477,130951],{"class":78},[68,142479,142480],{"class":70,"line":112},[68,142481,133494],{"class":302},[68,142483,142484,142486,142488,142490,142492,142494],{"class":70,"line":124},[68,142485,133499],{"class":74},[68,142487,81284],{"class":78},[68,142489,130381],{"class":85},[68,142491,89],{"class":78},[68,142493,379],{"class":85},[68,142495,130951],{"class":78},[68,142497,142498],{"class":70,"line":1496},[68,142499,133514],{"class":302},[68,142501,142502,142504,142506,142508,142510,142512],{"class":70,"line":1502},[68,142503,133519],{"class":74},[68,142505,81284],{"class":78},[68,142507,130381],{"class":85},[68,142509,89],{"class":78},[68,142511,387],{"class":85},[68,142513,130951],{"class":78},[68,142515,142516],{"class":70,"line":1510},[68,142517,133534],{"class":302},[68,142519,142520,142522,142524,142526,142528,142530],{"class":70,"line":1521},[68,142521,133539],{"class":74},[68,142523,81284],{"class":78},[68,142525,130381],{"class":85},[68,142527,89],{"class":78},[68,142529,133548],{"class":85},[68,142531,130951],{"class":78},[24,142533,142534,142545],{},[27,142535,142536,142537,142540,142541,102493,142543],{},"1 号盒子左侧浮动 ",[65,142538,142539],{},"sk_list"," 里面包含 ",[65,142542,24],{},[65,142544,27],{},[27,142546,142547,142548,142540,142551,102493,142553],{},"2 号盒子左侧浮动 ",[65,142549,142550],{},"sk_con",[65,142552,24],{},[65,142554,27],{},[170,142556,141145],{},[58,142558,142559],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142560,142561,142567,142577],{"__ignoreMap":63},[68,142562,142563,142565],{"class":70,"line":71},[68,142564,284],{"class":74},[68,142566,79],{"class":78},[68,142568,142569,142571,142573,142575],{"class":70,"line":82},[68,142570,86],{"class":85},[68,142572,89],{"class":78},[68,142574,92],{"class":85},[68,142576,95],{"class":78},[68,142578,142579],{"class":70,"line":98},[68,142580,101],{"class":78},[170,142582,141234],{},[58,142584,142585],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142586,142587,142593,142603],{"__ignoreMap":63},[68,142588,142589,142591],{"class":70,"line":71},[68,142590,284],{"class":74},[68,142592,79],{"class":78},[68,142594,142595,142597,142599,142601],{"class":70,"line":82},[68,142596,86],{"class":85},[68,142598,89],{"class":78},[68,142600,92],{"class":85},[68,142602,95],{"class":78},[68,142604,142605],{"class":70,"line":98},[68,142606,101],{"class":78},[19,142608,142610,142611],{"id":142609},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[65,142612,142613],{},"sk_container",[801,142615],{"style":803,"src":142616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[24,142618,142619,142624],{},[27,142620,141799,142621,142623],{},[65,142622,142613],{}," 给宽度 1200，不要给高度",[27,142625,142626],{},"一定不要忘记清除浮动",[170,142628,141145],{},[58,142630,142631],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142632,142633,142639,142649],{"__ignoreMap":63},[68,142634,142635,142637],{"class":70,"line":71},[68,142636,284],{"class":74},[68,142638,79],{"class":78},[68,142640,142641,142643,142645,142647],{"class":70,"line":82},[68,142642,86],{"class":85},[68,142644,89],{"class":78},[68,142646,92],{"class":85},[68,142648,95],{"class":78},[68,142650,142651],{"class":70,"line":98},[68,142652,101],{"class":78},[263,142654,142655],{},[27,142656,142657],{},"sk_hd制作",[24,142659,142660],{},[27,142661,141879,142662,142665],{},[65,142663,142664],{},"sk_hd"," ，插入图片即可",[170,142667,141145],{},[58,142669,142670],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,142671,142672],{"__ignoreMap":63},[68,142673,142674,142676,142678,142680,142682,142684,142686,142688,142690,142692,142694,142696],{"class":70,"line":71},[68,142675,2537],{"class":78},[68,142677,801],{"class":52784},[68,142679,56717],{"class":74},[68,142681,1685],{"class":78},[68,142683,135292],{"class":1742},[68,142685,56725],{"class":74},[68,142687,1685],{"class":78},[68,142689,135299],{"class":1742},[68,142691,135302],{"class":74},[68,142693,1685],{"class":78},[68,142695,135307],{"class":1742},[68,142697,52791],{"class":78},[263,142699,142700],{"start":82},[27,142701,142702],{},"sk_bd制作",[24,142704,142705],{},[27,142706,142707,142708,142711,142712,102493,142714,142716],{},"3 号盒子 ",[65,142709,142710],{},"sk_bd"," ，里面包含很多的 ",[65,142713,24],{},[65,142715,27],{},[24,142717,142718,142727],{},[27,142719,142720,142721,142723,142724,142726],{},"当鼠标移入到 ",[65,142722,27],{}," 上面的时候显示红色的边框，在这里先给 ",[65,142725,27],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[27,142728,142729,142730,142732,142733,142735,142736,142739,142740,142742],{},"由于给每个 ",[65,142731,27],{}," 都设置了外边距，导致一行的最后一个 ",[65,142734,27],{}," 掉了下来，在这里我们利用 ",[65,142737,142738],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[65,142741,27],{},"，去掉外边距就好了",[170,142744,141145],{},[58,142746,142747],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,142748,142749,142755,142767],{"__ignoreMap":63},[68,142750,142751,142753],{"class":70,"line":71},[68,142752,53093],{"class":52784},[68,142754,79],{"class":78},[68,142756,142757,142759,142761,142763,142765],{"class":70,"line":82},[68,142758,71948],{"class":85},[68,142760,89],{"class":78},[68,142762,1248],{"class":85},[68,142764,53038],{"class":85},[68,142766,95],{"class":78},[68,142768,142769],{"class":70,"line":98},[68,142770,101],{"class":78},[170,142772,141234],{},[58,142774,142775],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,142776,142777,142783,142795],{"__ignoreMap":63},[68,142778,142779,142781],{"class":70,"line":71},[68,142780,53093],{"class":52784},[68,142782,79],{"class":78},[68,142784,142785,142787,142789,142791,142793],{"class":70,"line":82},[68,142786,71948],{"class":85},[68,142788,89],{"class":78},[68,142790,1248],{"class":85},[68,142792,53038],{"class":85},[68,142794,95],{"class":78},[68,142796,142797],{"class":70,"line":98},[68,142798,101],{"class":78},[14,142800,142802],{"id":142801},"_163-注册页面制作","16.3 注册页面制作",[801,142804],{"style":803,"src":142805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[170,142807,142808,142810],{},[268,142809,1106],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[801,142812],{"style":803,"src":142813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,142815,142817],{"id":142816},"_1631-准备工作","16.3.1 准备工作",[24,142819,142820,142823],{},[27,142821,142822],{},"创建register.html，引入 base.css，引入favicon图标",[27,142824,142825],{},"创建register.css ，在html页面进行引入",[19,142827,142829,142830,142832],{"id":142828},"_1632-header-头部实现","16.3.2 ",[65,142831,133020],{}," 头部实现",[24,142834,142835,142838],{},[27,142836,142837],{},"整个内容用 版心 进行包裹",[27,142839,142840],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[170,142842,141145],{},[58,142844,142845],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,142846,142847],{"__ignoreMap":63},[68,142848,142849,142851,142853,142855,142857,142859,142861,142863,142865,142867,142869,142871],{"class":70,"line":71},[68,142850,2537],{"class":78},[68,142852,801],{"class":52784},[68,142854,56717],{"class":74},[68,142856,1685],{"class":78},[68,142858,135292],{"class":1742},[68,142860,56725],{"class":74},[68,142862,1685],{"class":78},[68,142864,135299],{"class":1742},[68,142866,135302],{"class":74},[68,142868,1685],{"class":78},[68,142870,135307],{"class":1742},[68,142872,52791],{"class":78},[170,142874,141234],{},[58,142876,142877],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,142878,142879],{"__ignoreMap":63},[68,142880,142881,142883,142885,142887,142889,142891,142893,142895,142897,142899,142901,142903],{"class":70,"line":71},[68,142882,2537],{"class":78},[68,142884,801],{"class":52784},[68,142886,56717],{"class":74},[68,142888,1685],{"class":78},[68,142890,135292],{"class":1742},[68,142892,56725],{"class":74},[68,142894,1685],{"class":78},[68,142896,135299],{"class":1742},[68,142898,135302],{"class":74},[68,142900,1685],{"class":78},[68,142902,135307],{"class":1742},[68,142904,52791],{"class":78},[19,142906,142908,142909,142912],{"id":142907},"_1633-registerarea-主体模块实现","16.3.3 ",[65,142910,142911],{},"registerarea"," 主体模块实现",[801,142914],{"style":803,"src":142915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[170,142917,142918],{},"整个大盒子 高度为 522px，设置4个边框",[170,142920,141145],{},[58,142922,142923],{"className":60,"code":132176,"language":62,"meta":63,"style":63},[65,142924,142925,142931,142947],{"__ignoreMap":63},[68,142926,142927,142929],{"class":70,"line":71},[68,142928,53093],{"class":52784},[68,142930,79],{"class":78},[68,142932,142933,142935,142937,142939,142941,142943,142945],{"class":70,"line":82},[68,142934,72374],{"class":85},[68,142936,89],{"class":78},[68,142938,1846],{"class":85},[68,142940,317],{"class":316},[68,142942,53003],{"class":85},[68,142944,131413],{"class":85},[68,142946,95],{"class":78},[68,142948,142949],{"class":70,"line":98},[68,142950,101],{"class":78},[170,142952,141234],{},[58,142954,142955],{"className":60,"code":132176,"language":62,"meta":63,"style":63},[65,142956,142957,142963,142979],{"__ignoreMap":63},[68,142958,142959,142961],{"class":70,"line":71},[68,142960,53093],{"class":52784},[68,142962,79],{"class":78},[68,142964,142965,142967,142969,142971,142973,142975,142977],{"class":70,"line":82},[68,142966,72374],{"class":85},[68,142968,89],{"class":78},[68,142970,1846],{"class":85},[68,142972,317],{"class":316},[68,142974,53003],{"class":85},[68,142976,131413],{"class":85},[68,142978,95],{"class":78},[68,142980,142981],{"class":70,"line":98},[68,142982,101],{"class":78},[170,142984,142985],{},"1号盒子 是一个 h3 标签，放标题",[24,142987,142988],{},[27,142989,142990],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[170,142992,141145],{},[58,142994,142995],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,142996,142997,143003,143013],{"__ignoreMap":63},[68,142998,142999,143001],{"class":70,"line":71},[68,143000,284],{"class":74},[68,143002,79],{"class":78},[68,143004,143005,143007,143009,143011],{"class":70,"line":82},[68,143006,86],{"class":85},[68,143008,89],{"class":78},[68,143010,92],{"class":85},[68,143012,95],{"class":78},[68,143014,143015],{"class":70,"line":98},[68,143016,101],{"class":78},[170,143018,141234],{},[58,143020,143021],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,143022,143023,143029,143039],{"__ignoreMap":63},[68,143024,143025,143027],{"class":70,"line":71},[68,143026,284],{"class":74},[68,143028,79],{"class":78},[68,143030,143031,143033,143035,143037],{"class":70,"line":82},[68,143032,86],{"class":85},[68,143034,89],{"class":78},[68,143036,92],{"class":85},[68,143038,95],{"class":78},[68,143040,143041],{"class":70,"line":98},[68,143042,101],{"class":78},[170,143044,143045],{},"2号盒子 里面放注册的内容",[24,143047,143048,143051,143060,143074,143087,143090,143093,143111,143125],{},[27,143049,143050],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[27,143052,143053,143054,143056,143057,143059],{},"里面的内容利用 ",[65,143055,24],{}," 包含 ",[65,143058,27],{}," 来实现的（不需要用表格）",[27,143061,140289,143062,143064,143065,143067,143068,143070,143071,143073],{},[65,143063,27],{}," 里面，左侧放 ",[65,143066,35092],{}," 标签， 中间放",[65,143069,55302],{}," 标签， 右侧放 ",[65,143072,68],{}," 提示信息",[27,143075,143076,143077,143079,143080,143082,143083,143086],{},"左侧 ",[65,143078,35092],{},"里面的文字都是右对齐，我们可以给",[65,143081,35092],{},"设置一个宽度（88px），然后利用",[65,143084,143085],{},"text-align"," 来设置右对齐",[27,143088,143089],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[27,143091,143092],{},"右侧 span修饰一下文字颜色",[27,143094,143095,143096],{},"提示信息的样式优化",[24,143097,143098,143101,143104],{},[27,143099,143100],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[27,143102,143103],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[27,143105,143106,143107,143110],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[65,143108,143109],{},"vertical-algin"," 来设置 图片与文字对齐方式",[27,143112,143113,143114],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[24,143115,143116,143122],{},[27,143117,143118,143119,143121],{},"设置 ",[65,143120,25039],{}," 的 左右 12px 的内边距，设置一下文字颜色",[27,143123,143124],{},"分别设置 背景颜色",[27,143126,143127,143128,143130],{},"同意协议 和 完成注册 都是用 ",[65,143129,27],{}," 进行包裹",[170,143132,141145],{},[58,143134,143135],{"className":60,"code":141718,"language":62,"meta":63,"style":63},[65,143136,143137,143143,143153],{"__ignoreMap":63},[68,143138,143139,143141],{"class":70,"line":71},[68,143140,53093],{"class":52784},[68,143142,79],{"class":78},[68,143144,143145,143147,143149,143151],{"class":70,"line":82},[68,143146,72356],{"class":85},[68,143148,89],{"class":78},[68,143150,141735],{"class":85},[68,143152,95],{"class":78},[68,143154,143155],{"class":70,"line":98},[68,143156,101],{"class":78},[170,143158,141234],{},[58,143160,143161],{"className":60,"code":141718,"language":62,"meta":63,"style":63},[65,143162,143163,143169,143179],{"__ignoreMap":63},[68,143164,143165,143167],{"class":70,"line":71},[68,143166,53093],{"class":52784},[68,143168,79],{"class":78},[68,143170,143171,143173,143175,143177],{"class":70,"line":82},[68,143172,72356],{"class":85},[68,143174,89],{"class":78},[68,143176,141735],{"class":85},[68,143178,95],{"class":78},[68,143180,143181],{"class":70,"line":98},[68,143182,101],{"class":78},[19,143184,143186],{"id":143185},"_1634-底部实现","16.3.4 底部实现",[170,143188,141145],{},[58,143190,143191],{"className":60,"code":141718,"language":62,"meta":63,"style":63},[65,143192,143193,143199,143209],{"__ignoreMap":63},[68,143194,143195,143197],{"class":70,"line":71},[68,143196,53093],{"class":52784},[68,143198,79],{"class":78},[68,143200,143201,143203,143205,143207],{"class":70,"line":82},[68,143202,72356],{"class":85},[68,143204,89],{"class":78},[68,143206,141735],{"class":85},[68,143208,95],{"class":78},[68,143210,143211],{"class":70,"line":98},[68,143212,101],{"class":78},[170,143214,141234],{},[58,143216,143217],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,143218,143219,143223,143237,143241],{"__ignoreMap":63},[68,143220,143221],{"class":70,"line":71},[68,143222,132130],{"class":302},[68,143224,143225,143227,143229,143231,143233,143235],{"class":70,"line":82},[68,143226,2537],{"class":78},[68,143228,53093],{"class":52784},[68,143230,54968],{"class":74},[68,143232,1685],{"class":78},[68,143234,132143],{"class":1742},[68,143236,52791],{"class":78},[68,143238,143239],{"class":70,"line":98},[68,143240,132150],{"class":78},[68,143242,143243,143245,143247],{"class":70,"line":104},[68,143244,53267],{"class":78},[68,143246,53093],{"class":52784},[68,143248,52791],{"class":78},[14,143250,143252],{"id":143251},"_164-项目总结","16.4 项目总结",[263,143254,143255,143258,143261,143264],{},[27,143256,143257],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[27,143259,143260],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[27,143262,143263],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[27,143265,143266],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[801,143268],{"style":803,"src":143269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[263,143271,143272],{"start":112},[27,143273,143274],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[801,143276],{"style":803,"src":143277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[263,143279,143280],{"start":124},[27,143281,143282],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[801,143284],{"style":803,"src":143285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[58,143287,143288],{"className":128769,"code":137932,"language":128771,"meta":63,"style":63},[65,143289,143290],{"__ignoreMap":63},[68,143291,143292,143294,143296,143298,143300,143302,143304,143306,143308,143310,143312,143314],{"class":70,"line":71},[68,143293,2537],{"class":78},[68,143295,55302],{"class":52784},[68,143297,55305],{"class":74},[68,143299,1685],{"class":78},[68,143301,64177],{"class":1742},[68,143303,16408],{"class":74},[68,143305,1685],{"class":78},[68,143307,137953],{"class":1742},[68,143309,62498],{"class":74},[68,143311,1685],{"class":78},[68,143313,137960],{"class":1742},[68,143315,52791],{"class":78},[263,143317,143318,143321],{"start":1496},[27,143319,143320],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[27,143322,143323],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1553,143325,143326],{},"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":63,"searchDepth":82,"depth":82,"links":143328},[143329,143334,143341,143349],{"id":140955,"depth":82,"text":140956,"children":143330},[143331,143332,143333],{"id":140959,"depth":98,"text":140960},{"id":141690,"depth":98,"text":141691},{"id":142003,"depth":98,"text":142004},{"id":142303,"depth":82,"text":142304,"children":143335},[143336,143337,143339],{"id":142307,"depth":98,"text":142308},{"id":142325,"depth":98,"text":143338},"16.2.2 列表页 header 和 nav 修改",{"id":142609,"depth":98,"text":143340},"16.2.3 列表页主体 sk_container",{"id":142801,"depth":82,"text":142802,"children":143342},[143343,143344,143346,143348],{"id":142816,"depth":98,"text":142817},{"id":142828,"depth":98,"text":143345},"16.3.2 header 头部实现",{"id":142907,"depth":98,"text":143347},"16.3.3 registerarea 主体模块实现",{"id":143185,"depth":98,"text":143186},{"id":143251,"depth":82,"text":143252},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140947,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143356,"title":143357,"body":143358,"description":1564,"extension":1565,"meta":143466,"navigation":1567,"path":143467,"seo":143468,"stem":143469,"__hash__":143470},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143359,"toc":143461},[143360,143363,143367,143370,143373,143382,143391,143395,143400,143407,143425,143428,143431,143434,143437,143440,143443,143446,143449,143452,143455,143458],[10,143361,143357],{"id":143362},"_17-web服务器与网站发布",[14,143364,143366],{"id":143365},"_171-web服务器","17.1 Web服务器",[170,143368,143369],{},"把自己网站上传到服务器上，可以让其他人访问",[801,143371],{"style":803,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[170,143374,143375,143378,143379],{},[268,143376,143377],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[268,143380,143381],{},"Web 服务器等",[170,143383,143384,143385,102493,143388,27226],{},"根据服务器在网络中所在的位置不同，又可分为 ",[268,143386,143387],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[268,143389,143390],{},"远程服务器",[19,143392,143394],{"id":143393},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[170,143396,143397],{},[268,143398,143399],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[170,143401,143402,143403],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1867,143404,143405],{"href":143405,"rel":143406},"http:\u002F\u002Ffree.3v.do\u002F",[25350],[24,143408,143409,143412,143415,143422],{},[27,143410,143411],{},"去免费空间网站注册账号。",[27,143413,143414],{},"记录下主机名、用户名、密码、域名。",[27,143416,143417,143418,143421],{},"利用 ",[65,143419,143420],{},"utftp"," 软件 上传网站到远程服务器",[27,143423,143424],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[170,143426,143427],{},"使用软件上传，对上传软件文件进行解压",[801,143429],{"style":803,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[801,143432],{"style":803,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[170,143435,143436],{},"输入刚刚申请的服务器账号信息：",[801,143438],{"style":803,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[801,143441],{"style":803,"src":143442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[801,143444],{"style":803,"src":143445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[801,143447],{"style":803,"src":143448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[170,143450,143451],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[801,143453],{"style":803,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[170,143456,143457],{},"浏览器输入域名即可访问",[170,143459,143460],{},"首页一定必须是index",{"title":63,"searchDepth":82,"depth":82,"links":143462},[143463],{"id":143365,"depth":82,"text":143366,"children":143464},[143465],{"id":143393,"depth":98,"text":143394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143357,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143472,"title":143473,"body":143474,"description":1564,"extension":1565,"meta":144401,"navigation":1567,"path":144402,"seo":144403,"stem":144404,"__hash__":144405},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143475,"toc":144384},[143476,143479,143483,143486,143489,143500,143503,143507,143511,143516,143519,143522,143525,143528,143532,143558,143562,143566,143569,143572,143576,143609,143613,143616,143619,143683,143687,143691,143694,143697,143700,143704,143749,143753,143756,143786,143790,143794,143797,143800,143804,143807,143876,143879,143987,143989,143995,143999,144002,144005,144101,144104,144108,144132,144136,144139,144143,144146,144150,144153,144156,144159,144162,144166,144169,144172,144176,144180,144183,144186,144189,144192,144196,144199,144203,144206,144209,144254,144258,144262,144265,144268,144271,144303,144307,144310,144344,144348,144351,144381],[10,143477,143473],{"id":143478},"_18-2d动画与3d转换",[14,143480,143482],{"id":143481},"_181-css3-2d转换","18.1 CSS3 2D转换",[170,143484,143485],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[170,143487,143488],{},"转换（transform）你可以简单理解为变形",[24,143490,143491,143494,143497],{},[27,143492,143493],{},"移动：translate",[27,143495,143496],{},"旋转：rotate",[27,143498,143499],{},"缩放：scale",[801,143501],{"style":803,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,143504,143506],{"id":143505},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[245,143508,143510],{"id":143509},"_18111-translate介绍","18.1.1.1 translate介绍",[170,143512,143513,143514],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[268,143515,1162],{},[801,143517],{"style":803,"src":143518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[170,143520,143521],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[170,143523,143524],{},"对于行内元素无效",[170,143526,143527],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[245,143529,143531],{"id":143530},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[58,143533,143534],{"className":60,"code":139964,"language":62,"meta":63,"style":63},[65,143535,143536,143542,143554],{"__ignoreMap":63},[68,143537,143538,143540],{"class":70,"line":71},[68,143539,53093],{"class":52784},[68,143541,79],{"class":78},[68,143543,143544,143546,143548,143550,143552],{"class":70,"line":82},[68,143545,71948],{"class":85},[68,143547,89],{"class":78},[68,143549,1248],{"class":85},[68,143551,53038],{"class":85},[68,143553,95],{"class":78},[68,143555,143556],{"class":70,"line":98},[68,143557,101],{"class":78},[19,143559,143561],{"id":143560},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[245,143563,143565],{"id":143564},"_18121-rotate介绍","18.1.2.1 rotate介绍",[170,143567,143568],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[801,143570],{"style":803,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[245,143573,143575],{"id":143574},"_18122-旋转效果","18.1.2.2 旋转效果",[58,143577,143579],{"className":60,"code":143578,"language":62,"meta":63,"style":63},"div {\n  transform: rotate(45deg);\n}\n",[65,143580,143581,143587,143605],{"__ignoreMap":63},[68,143582,143583,143585],{"class":70,"line":71},[68,143584,53093],{"class":52784},[68,143586,79],{"class":78},[68,143588,143589,143591,143593,143596,143598,143600,143603],{"class":70,"line":82},[68,143590,137759],{"class":85},[68,143592,89],{"class":78},[68,143594,143595],{"class":85},"rotate",[68,143597,1640],{"class":78},[68,143599,2157],{"class":85},[68,143601,143602],{"class":316},"deg",[68,143604,4209],{"class":78},[68,143606,143607],{"class":70,"line":98},[68,143608,101],{"class":78},[245,143610,143612],{"id":143611},"_18123-三角做法","18.1.2.3 三角做法",[170,143614,143615],{},"该下标当经过最外层大盒子时会实现向上反转",[801,143617],{"style":803,"src":143618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[58,143620,143621],{"className":60,"code":136295,"language":62,"meta":63,"style":63},[65,143622,143623,143627,143633,143643,143653,143669,143679],{"__ignoreMap":63},[68,143624,143625],{"class":70,"line":71},[68,143626,136302],{"class":302},[68,143628,143629,143631],{"class":70,"line":82},[68,143630,136307],{"class":74},[68,143632,79],{"class":78},[68,143634,143635,143637,143639,143641],{"class":70,"line":98},[68,143636,72046],{"class":85},[68,143638,89],{"class":78},[68,143640,1248],{"class":85},[68,143642,95],{"class":78},[68,143644,143645,143647,143649,143651],{"class":70,"line":104},[68,143646,72266],{"class":85},[68,143648,89],{"class":78},[68,143650,1248],{"class":85},[68,143652,95],{"class":78},[68,143654,143655,143657,143659,143661,143663,143665,143667],{"class":70,"line":112},[68,143656,72374],{"class":85},[68,143658,89],{"class":78},[68,143660,313],{"class":85},[68,143662,317],{"class":316},[68,143664,53003],{"class":85},[68,143666,65469],{"class":85},[68,143668,95],{"class":78},[68,143670,143671,143673,143675,143677],{"class":70,"line":124},[68,143672,136350],{"class":85},[68,143674,89],{"class":78},[68,143676,63847],{"class":85},[68,143678,95],{"class":78},[68,143680,143681],{"class":70,"line":1496},[68,143682,101],{"class":78},[19,143684,143686],{"id":143685},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[245,143688,143690],{"id":143689},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[170,143692,143693],{},"设置中心点",[801,143695],{"style":803,"src":143696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[170,143698,143699],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[245,143701,143703],{"id":143702},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[58,143705,143707],{"className":60,"code":143706,"language":62,"meta":63,"style":63},"\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",[65,143708,143709,143714,143720,143735,143740,143745],{"__ignoreMap":63},[68,143710,143711],{"class":70,"line":71},[68,143712,143713],{"class":302},"\u002F* 转换中心点 *\u002F\n",[68,143715,143716,143718],{"class":70,"line":82},[68,143717,53093],{"class":52784},[68,143719,79],{"class":78},[68,143721,143722,143725,143727,143729,143731,143733],{"class":70,"line":98},[68,143723,143724],{"class":85},"  transform-origin",[68,143726,89],{"class":78},[68,143728,53074],{"class":85},[68,143730,18631],{"class":85},[68,143732,299],{"class":78},[68,143734,136448],{"class":302},[68,143736,143737],{"class":70,"line":104},[68,143738,143739],{"class":302},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[68,143741,143742],{"class":70,"line":112},[68,143743,143744],{"class":302},"  \u002F* transform-origin: left top; *\u002F\n",[68,143746,143747],{"class":70,"line":124},[68,143748,101],{"class":78},[245,143750,143752],{"id":143751},"_18133-旋转案例","18.1.3.3 旋转案例",[801,143754],{"style":803,"src":143755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[58,143757,143758],{"className":60,"code":143578,"language":62,"meta":63,"style":63},[65,143759,143760,143766,143782],{"__ignoreMap":63},[68,143761,143762,143764],{"class":70,"line":71},[68,143763,53093],{"class":52784},[68,143765,79],{"class":78},[68,143767,143768,143770,143772,143774,143776,143778,143780],{"class":70,"line":82},[68,143769,137759],{"class":85},[68,143771,89],{"class":78},[68,143773,143595],{"class":85},[68,143775,1640],{"class":78},[68,143777,2157],{"class":85},[68,143779,143602],{"class":316},[68,143781,4209],{"class":78},[68,143783,143784],{"class":70,"line":98},[68,143785,101],{"class":78},[19,143787,143789],{"id":143788},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[245,143791,143793],{"id":143792},"_18141-scale介绍","18.1.4.1 scale介绍",[170,143795,143796],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[801,143798],{"style":803,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[245,143801,143803],{"id":143802},"_18142-分页按钮","18.1.4.2 分页按钮",[801,143805],{"style":803,"src":143806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[58,143808,143810],{"className":60,"code":143809,"language":62,"meta":63,"style":63},"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",[65,143811,143812,143818,143834,143838,143842,143847,143853,143867,143872],{"__ignoreMap":63},[68,143813,143814,143816],{"class":70,"line":71},[68,143815,53093],{"class":52784},[68,143817,79],{"class":78},[68,143819,143820,143822,143824,143827,143829,143832],{"class":70,"line":82},[68,143821,137759],{"class":85},[68,143823,89],{"class":78},[68,143825,143826],{"class":85},"scale",[68,143828,1640],{"class":78},[68,143830,143831],{"class":85},"1.2",[68,143833,4209],{"class":78},[68,143835,143836],{"class":70,"line":98},[68,143837,101],{"class":78},[68,143839,143840],{"class":70,"line":104},[68,143841,137236],{"class":78},[68,143843,143844],{"class":70,"line":112},[68,143845,143846],{"class":302},"\u002F* 2D 缩放 *\u002F\n",[68,143848,143849,143851],{"class":70,"line":124},[68,143850,53093],{"class":52784},[68,143852,79],{"class":78},[68,143854,143855,143857,143859,143861,143863,143865],{"class":70,"line":1496},[68,143856,137759],{"class":85},[68,143858,89],{"class":78},[68,143860,143826],{"class":85},[68,143862,1640],{"class":78},[68,143864,143831],{"class":85},[68,143866,4209],{"class":78},[68,143868,143869],{"class":70,"line":1502},[68,143870,143871],{"class":302},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[68,143873,143874],{"class":70,"line":1510},[68,143875,101],{"class":78},[170,143877,143878],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[58,143880,143882],{"className":60,"code":143881,"language":62,"meta":63,"style":63},"\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",[65,143883,143884,143889,143899,143920,143941,143945,143950,143956,143983],{"__ignoreMap":63},[68,143885,143886],{"class":70,"line":71},[68,143887,143888],{"class":302},"\u002F* 定义动画 *\u002F\n",[68,143890,143891,143894,143897],{"class":70,"line":82},[68,143892,143893],{"class":316},"@keyframes",[68,143895,143896],{"class":6705}," move",[68,143898,79],{"class":78},[68,143900,143901,143904,143906,143908,143910,143913,143915,143917],{"class":70,"line":98},[68,143902,143903],{"class":74},"  0%",[68,143905,81284],{"class":78},[68,143907,49618],{"class":85},[68,143909,89],{"class":78},[68,143911,143912],{"class":85},"translateX",[68,143914,1640],{"class":78},[68,143916,1248],{"class":85},[68,143918,143919],{"class":78},"); }\n",[68,143921,143922,143925,143927,143929,143931,143933,143935,143937,143939],{"class":70,"line":104},[68,143923,143924],{"class":74},"  100%",[68,143926,81284],{"class":78},[68,143928,49618],{"class":85},[68,143930,89],{"class":78},[68,143932,143912],{"class":85},[68,143934,1640],{"class":78},[68,143936,1940],{"class":85},[68,143938,317],{"class":316},[68,143940,143919],{"class":78},[68,143942,143943],{"class":70,"line":112},[68,143944,101],{"class":78},[68,143946,143947],{"class":70,"line":124},[68,143948,143949],{"class":302},"\u002F* 调用动画 *\u002F\n",[68,143951,143952,143954],{"class":70,"line":1496},[68,143953,53093],{"class":52784},[68,143955,79],{"class":78},[68,143957,143958,143961,143963,143965,143967,143969,143971,143973,143975,143978,143981],{"class":70,"line":1502},[68,143959,143960],{"class":85},"  animation",[68,143962,89],{"class":78},[68,143964,136461],{"class":85},[68,143966,26604],{"class":85},[68,143968,2323],{"class":316},[68,143970,80157],{"class":85},[68,143972,5583],{"class":85},[68,143974,2323],{"class":316},[68,143976,143977],{"class":85}," infinite",[68,143979,143980],{"class":85}," alternate",[68,143982,95],{"class":78},[68,143984,143985],{"class":70,"line":1510},[68,143986,101],{"class":78},[170,143988,143878],{},[58,143990,143993],{"className":143991,"code":143992,"language":6676},[6674],"\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",[65,143994,143992],{"__ignoreMap":63},[245,143996,143998],{"id":143997},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[170,144000,144001],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[801,144003],{"style":803,"src":144004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[58,144006,144007],{"className":60,"code":143881,"language":62,"meta":63,"style":63},[65,144008,144009,144013,144021,144039,144059,144063,144067,144073,144097],{"__ignoreMap":63},[68,144010,144011],{"class":70,"line":71},[68,144012,143888],{"class":302},[68,144014,144015,144017,144019],{"class":70,"line":82},[68,144016,143893],{"class":316},[68,144018,143896],{"class":6705},[68,144020,79],{"class":78},[68,144022,144023,144025,144027,144029,144031,144033,144035,144037],{"class":70,"line":98},[68,144024,143903],{"class":74},[68,144026,81284],{"class":78},[68,144028,49618],{"class":85},[68,144030,89],{"class":78},[68,144032,143912],{"class":85},[68,144034,1640],{"class":78},[68,144036,1248],{"class":85},[68,144038,143919],{"class":78},[68,144040,144041,144043,144045,144047,144049,144051,144053,144055,144057],{"class":70,"line":104},[68,144042,143924],{"class":74},[68,144044,81284],{"class":78},[68,144046,49618],{"class":85},[68,144048,89],{"class":78},[68,144050,143912],{"class":85},[68,144052,1640],{"class":78},[68,144054,1940],{"class":85},[68,144056,317],{"class":316},[68,144058,143919],{"class":78},[68,144060,144061],{"class":70,"line":112},[68,144062,101],{"class":78},[68,144064,144065],{"class":70,"line":124},[68,144066,143949],{"class":302},[68,144068,144069,144071],{"class":70,"line":1496},[68,144070,53093],{"class":52784},[68,144072,79],{"class":78},[68,144074,144075,144077,144079,144081,144083,144085,144087,144089,144091,144093,144095],{"class":70,"line":1502},[68,144076,143960],{"class":85},[68,144078,89],{"class":78},[68,144080,136461],{"class":85},[68,144082,26604],{"class":85},[68,144084,2323],{"class":316},[68,144086,80157],{"class":85},[68,144088,5583],{"class":85},[68,144090,2323],{"class":316},[68,144092,143977],{"class":85},[68,144094,143980],{"class":85},[68,144096,95],{"class":78},[68,144098,144099],{"class":70,"line":1510},[68,144100,101],{"class":78},[170,144102,144103],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,144105,144107],{"id":144106},"_1823-知识点回顾","18.2.3 知识点回顾",[58,144109,144110],{"className":60,"code":130190,"language":62,"meta":63,"style":63},[65,144111,144112,144118,144128],{"__ignoreMap":63},[68,144113,144114,144116],{"class":70,"line":71},[68,144115,53093],{"class":52784},[68,144117,79],{"class":78},[68,144119,144120,144122,144124,144126],{"class":70,"line":82},[68,144121,130203],{"class":85},[68,144123,89],{"class":78},[68,144125,63214],{"class":85},[68,144127,95],{"class":78},[68,144129,144130],{"class":70,"line":98},[68,144131,101],{"class":78},[14,144133,144135],{"id":144134},"_183-3d-转换","18.3 3D 转换",[170,144137,144138],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,144140,144142],{"id":144141},"_1831-坐标轴认识","18.3.1 坐标轴认识",[801,144144],{"style":803,"src":144145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,144147,144149],{"id":144148},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[801,144151],{"style":803,"src":144152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[170,144154,144155],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[170,144157,144158],{},"translate3d的效果需要搭配透视perspective来使用",[801,144160],{"style":803,"src":144161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,144163,144165],{"id":144164},"_1833-透视-perspective","18.3.3 透视 perspective",[801,144167],{"style":803,"src":144168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[170,144170,144171],{},"透视写在父盒子上，单位为像素",[19,144173,144175],{"id":144174},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[245,144177,144179],{"id":144178},"_18341-分开解释","18.3.4.1 分开解释",[801,144181],{"style":803,"src":144182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[801,144184],{"style":803,"src":144185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[801,144187],{"style":803,"src":144188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[170,144190,144191],{},"总结来说就是左手原则",[245,144193,144195],{"id":144194},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[801,144197],{"style":803,"src":144198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,144200,144202],{"id":144201},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[801,144204],{"style":803,"src":144205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[801,144207],{"style":803,"src":144208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[58,144210,144212],{"className":60,"code":144211,"language":62,"meta":63,"style":63},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[65,144213,144214,144220,144233,144250],{"__ignoreMap":63},[68,144215,144216,144218],{"class":70,"line":71},[68,144217,53093],{"class":52784},[68,144219,79],{"class":78},[68,144221,144222,144225,144227,144229,144231],{"class":70,"line":82},[68,144223,144224],{"class":85},"  perspective",[68,144226,89],{"class":78},[68,144228,66552],{"class":85},[68,144230,317],{"class":316},[68,144232,95],{"class":78},[68,144234,144235,144237,144239,144242,144244,144246,144248],{"class":70,"line":98},[68,144236,137759],{"class":85},[68,144238,89],{"class":78},[68,144240,144241],{"class":85},"rotateX",[68,144243,1640],{"class":78},[68,144245,2157],{"class":85},[68,144247,143602],{"class":316},[68,144249,4209],{"class":78},[68,144251,144252],{"class":70,"line":104},[68,144253,101],{"class":78},[19,144255,144257],{"id":144256},"_1836-案例","18.3.6 案例",[245,144259,144261],{"id":144260},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[801,144263],{"style":803,"src":144264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[801,144266],{"style":803,"src":144267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[801,144269],{"style":803,"src":144270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[58,144272,144274],{"className":60,"code":144273,"language":62,"meta":63,"style":63},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[65,144275,144276,144281,144287,144299],{"__ignoreMap":63},[68,144277,144278],{"class":70,"line":71},[68,144279,144280],{"class":302},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[68,144282,144283,144285],{"class":70,"line":82},[68,144284,1505],{"class":74},[68,144286,79],{"class":78},[68,144288,144289,144291,144293,144295,144297],{"class":70,"line":98},[68,144290,144224],{"class":85},[68,144292,89],{"class":78},[68,144294,66552],{"class":85},[68,144296,317],{"class":316},[68,144298,95],{"class":78},[68,144300,144301],{"class":70,"line":104},[68,144302,101],{"class":78},[245,144304,144306],{"id":144305},"_18362-3d导航栏","18.3.6.2 3D导航栏",[801,144308],{"style":803,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[58,144311,144312],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,144313,144314,144318,144332,144336],{"__ignoreMap":63},[68,144315,144316],{"class":70,"line":71},[68,144317,132130],{"class":302},[68,144319,144320,144322,144324,144326,144328,144330],{"class":70,"line":82},[68,144321,2537],{"class":78},[68,144323,53093],{"class":52784},[68,144325,54968],{"class":74},[68,144327,1685],{"class":78},[68,144329,132143],{"class":1742},[68,144331,52791],{"class":78},[68,144333,144334],{"class":70,"line":98},[68,144335,132150],{"class":78},[68,144337,144338,144340,144342],{"class":70,"line":104},[68,144339,53267],{"class":78},[68,144341,53093],{"class":52784},[68,144343,52791],{"class":78},[245,144345,144347],{"id":144346},"_18363-旋转木马","18.3.6.3 旋转木马",[801,144349],{"style":803,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[58,144352,144353],{"className":60,"code":143578,"language":62,"meta":63,"style":63},[65,144354,144355,144361,144377],{"__ignoreMap":63},[68,144356,144357,144359],{"class":70,"line":71},[68,144358,53093],{"class":52784},[68,144360,79],{"class":78},[68,144362,144363,144365,144367,144369,144371,144373,144375],{"class":70,"line":82},[68,144364,137759],{"class":85},[68,144366,89],{"class":78},[68,144368,143595],{"class":85},[68,144370,1640],{"class":78},[68,144372,2157],{"class":85},[68,144374,143602],{"class":316},[68,144376,4209],{"class":78},[68,144378,144379],{"class":70,"line":98},[68,144380,101],{"class":78},[1553,144382,144383],{},"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":63,"searchDepth":82,"depth":82,"links":144385},[144386,144393],{"id":143481,"depth":82,"text":143482,"children":144387},[144388,144389,144390,144391,144392],{"id":143505,"depth":98,"text":143506},{"id":143560,"depth":98,"text":143561},{"id":143685,"depth":98,"text":143686},{"id":143788,"depth":98,"text":143789},{"id":144106,"depth":98,"text":144107},{"id":144134,"depth":82,"text":144135,"children":144394},[144395,144396,144397,144398,144399,144400],{"id":144141,"depth":98,"text":144142},{"id":144148,"depth":98,"text":144149},{"id":144164,"depth":98,"text":144165},{"id":144174,"depth":98,"text":144175},{"id":144201,"depth":98,"text":144202},{"id":144256,"depth":98,"text":144257},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143473,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144407,"title":144408,"body":144409,"description":1564,"extension":1565,"meta":144612,"navigation":1567,"path":144613,"seo":144614,"stem":144615,"__hash__":144616},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144410,"toc":144601},[144411,144414,144418,144421,144424,144428,144431,144434,144437,144441,144444,144448,144451,144455,144458,144462,144476,144480,144505,144508,144511,144528,144532,144536,144539,144542,144546,144549,144552,144570,144574,144577,144591,144595,144598],[10,144412,144408],{"id":144413},"_19-移动端基础-前缀现状与视口",[14,144415,144417],{"id":144416},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[801,144419],{"style":803,"src":144420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[170,144422,144423],{},"意思就是加个前缀，增加兼容性",[14,144425,144427],{"id":144426},"_192-移动端现状认识","19.2 移动端现状认识",[801,144429],{"style":803,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[170,144432,144433],{},"调试方法：",[801,144435],{"style":803,"src":144436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144438,144440],{"id":144439},"_193-视口","19.3 视口",[170,144442,144443],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,144445,144447],{"id":144446},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[801,144449],{"style":803,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,144452,144454],{"id":144453},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[801,144456],{"style":803,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,144459,144461],{"id":144460},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[24,144463,144464,144467,144470,144473],{},[27,144465,144466],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[27,144468,144469],{},"理想视口，对设备来讲，是最理想的视口尺寸",[27,144471,144472],{},"需要手动添写meta视口标签通知浏览器操作",[27,144474,144475],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,144477,144479],{"id":144478},"_1934-meta视口标签","19.3.4 meta视口标签",[58,144481,144483],{"className":128769,"code":144482,"language":128771,"meta":63,"style":63},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[65,144484,144485],{"__ignoreMap":63},[68,144486,144487,144489,144491,144493,144495,144497,144499,144501,144503],{"class":70,"line":71},[68,144488,2537],{"class":78},[68,144490,52828],{"class":52784},[68,144492,16408],{"class":74},[68,144494,1685],{"class":78},[68,144496,52875],{"class":1742},[68,144498,52855],{"class":74},[68,144500,1685],{"class":78},[68,144502,52882],{"class":1742},[68,144504,52791],{"class":78},[801,144506],{"style":803,"src":144507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[170,144509,144510],{},"标准视口设置：",[263,144512,144513,144516,144519,144522,144525],{},[27,144514,144515],{},"视口宽度和设备保持一致",[27,144517,144518],{},"视口的默认缩放比例1.0",[27,144520,144521],{},"不允许用户自行缩放",[27,144523,144524],{},"最大允许的缩放比例1.0",[27,144526,144527],{},"最小允许的缩放比例1.0",[19,144529,144531],{"id":144530},"_1935-二倍图","19.3.5 二倍图",[245,144533,144535],{"id":144534},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[801,144537],{"style":803,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[801,144540],{"style":803,"src":144541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[245,144543,144545],{"id":144544},"_19352-多倍图","19.3.5.2 多倍图",[801,144547],{"style":803,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[170,144550,144551],{},"二倍图法，代码如下：",[58,144553,144555],{"className":60,"code":144554,"language":62,"meta":63,"style":63},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[65,144556,144557,144562],{"__ignoreMap":63},[68,144558,144559],{"class":70,"line":71},[68,144560,144561],{"class":302},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[68,144563,144564,144567],{"class":70,"line":82},[68,144565,144566],{"class":52784},"background-size",[68,144568,144569],{"class":78},": 50% 50%;\n",[245,144571,144573],{"id":144572},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[801,144575],{"style":803,"src":144576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[263,144578,144579,144582,144585,144588],{},[27,144580,144581],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[27,144583,144584],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[27,144586,144587],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[27,144589,144590],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[245,144592,144594],{"id":144593},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[801,144596],{"style":803,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1553,144599,144600],{},"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":63,"searchDepth":82,"depth":82,"links":144602},[144603,144604,144605],{"id":144416,"depth":82,"text":144417},{"id":144426,"depth":82,"text":144427},{"id":144439,"depth":82,"text":144440,"children":144606},[144607,144608,144609,144610,144611],{"id":144446,"depth":98,"text":144447},{"id":144453,"depth":98,"text":144454},{"id":144460,"depth":98,"text":144461},{"id":144478,"depth":98,"text":144479},{"id":144530,"depth":98,"text":144531},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144408,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144618,"title":144619,"body":144620,"description":1564,"extension":1565,"meta":145497,"navigation":1567,"path":145498,"seo":145499,"stem":145500,"__hash__":145501},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144621,"toc":145481},[144622,144625,144629,144636,144639,144646,144649,144654,144657,144661,144665,144672,144675,144678,144682,144685,144688,144691,144694,144697,144701,144704,144708,144710,144713,144716,144719,144722,144724,144727,144729,144759,144761,144791,144795,144798,144802,144805,144822,144825,144828,144904,144906,144909,144912,144915,144918,144920,144923,144926,144930,144952,144955,144958,144962,144965,144971,144974,144978,144981,144984,144988,144991,144994,144997,145001,145004,145007,145010,145013,145017,145020,145024,145031,145034,145037,145040,145043,145053,145056,145059,145066,145069,145073,145076,145079,145083,145086,145089,145092,145137,145140,145143,145146,145148,145277,145279,145317,145320,145323,145325,145443,145445,145479],[10,144623,144619],{"id":144624},"_20-移动端布局实战上篇",[14,144626,144628],{"id":144627},"_201-移动端主流方案","20.1 移动端主流方案",[263,144630,144631],{},[27,144632,144633],{},[268,144634,144635],{},"单独移动端页面（主流）",[801,144637],{"style":803,"src":144638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[263,144640,144641],{"start":82},[27,144642,144643],{},[268,144644,144645],{},"响应式兼容PC移动端",[801,144647],{"style":803,"src":144648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[263,144650,144651],{"start":98},[27,144652,144653],{},"两种页面选型布局方式",[801,144655],{"style":803,"src":144656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144658,144660],{"id":144659},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,144662,144664],{"id":144663},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[170,144666,144667,144668],{},"官网地址： ",[1867,144669,144670],{"href":144670,"rel":144671},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25350],[801,144673],{"style":803,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[801,144676],{"style":803,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,144679,144681],{"id":144680},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[801,144683],{"style":803,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[801,144686],{"style":803,"src":144687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[170,144689,144690],{},"去除高亮：",[170,144692,144693],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[170,144695,144696],{},"-webkit- tap-highlight-color: transparent;",[14,144698,144700],{"id":144699},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[801,144702],{"style":803,"src":144703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144705,144707],{"id":144706},"_204-流式布局案例","20.4 流式布局案例",[170,144709,1669],{},[170,144711,144712],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[170,144714,144715],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[170,144717,144718],{},"图片格式：",[801,144720],{"style":803,"src":144721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[170,144723,136818],{},[801,144725],{"style":803,"src":144726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[170,144728,141145],{},[58,144730,144731],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,144732,144733],{"__ignoreMap":63},[68,144734,144735,144737,144739,144741,144743,144745,144747,144749,144751,144753,144755,144757],{"class":70,"line":71},[68,144736,2537],{"class":78},[68,144738,801],{"class":52784},[68,144740,56717],{"class":74},[68,144742,1685],{"class":78},[68,144744,135292],{"class":1742},[68,144746,56725],{"class":74},[68,144748,1685],{"class":78},[68,144750,135299],{"class":1742},[68,144752,135302],{"class":74},[68,144754,1685],{"class":78},[68,144756,135307],{"class":1742},[68,144758,52791],{"class":78},[170,144760,141234],{},[58,144762,144763],{"className":128769,"code":135277,"language":128771,"meta":63,"style":63},[65,144764,144765],{"__ignoreMap":63},[68,144766,144767,144769,144771,144773,144775,144777,144779,144781,144783,144785,144787,144789],{"class":70,"line":71},[68,144768,2537],{"class":78},[68,144770,801],{"class":52784},[68,144772,56717],{"class":74},[68,144774,1685],{"class":78},[68,144776,135292],{"class":1742},[68,144778,56725],{"class":74},[68,144780,1685],{"class":78},[68,144782,135299],{"class":1742},[68,144784,135302],{"class":74},[68,144786,1685],{"class":78},[68,144788,135307],{"class":1742},[68,144790,52791],{"class":78},[14,144792,144794],{"id":144793},"_205-flex布局","20.5 flex布局",[801,144796],{"style":803,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,144799,144801],{"id":144800},"_2051-布局原理","20.5.1 布局原理",[170,144803,144804],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[24,144806,144807,144810,144813,144816,144819],{},[27,144808,144809],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[27,144811,144812],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[27,144814,144815],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[27,144817,144818],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[27,144820,144821],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[170,144823,144824],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[170,144826,144827],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[58,144829,144831],{"className":60,"code":144830,"language":62,"meta":63,"style":63},"\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",[65,144832,144833,144838,144845,144855,144867,144878,144889,144900],{"__ignoreMap":63},[68,144834,144835],{"class":70,"line":71},[68,144836,144837],{"class":302},"\u002F* Flex 弹性布局 *\u002F\n",[68,144839,144840,144843],{"class":70,"line":82},[68,144841,144842],{"class":74},".container",[68,144844,79],{"class":78},[68,144846,144847,144849,144851,144853],{"class":70,"line":98},[68,144848,129637],{"class":85},[68,144850,89],{"class":78},[68,144852,52960],{"class":85},[68,144854,95],{"class":78},[68,144856,144857,144860,144862,144865],{"class":70,"line":104},[68,144858,144859],{"class":85},"  flex-direction",[68,144861,89],{"class":78},[68,144863,144864],{"class":85},"row",[68,144866,95],{"class":78},[68,144868,144869,144872,144874,144876],{"class":70,"line":112},[68,144870,144871],{"class":85},"  justify-content",[68,144873,89],{"class":78},[68,144875,53150],{"class":85},[68,144877,95],{"class":78},[68,144879,144880,144883,144885,144887],{"class":70,"line":124},[68,144881,144882],{"class":85},"  align-items",[68,144884,89],{"class":78},[68,144886,53074],{"class":85},[68,144888,95],{"class":78},[68,144890,144891,144894,144896,144898],{"class":70,"line":1496},[68,144892,144893],{"class":85},"  flex-wrap",[68,144895,89],{"class":78},[68,144897,80087],{"class":85},[68,144899,95],{"class":78},[68,144901,144902],{"class":70,"line":1502},[68,144903,101],{"class":78},[170,144905,71931],{},[170,144907,144908],{},".form-item .male-label {",[170,144910,144911],{},"   margin-right: 20px;",[170,144913,144914],{},"   display: inline-flex;",[170,144916,144917],{},"   align-items: center;",[170,144919,2573],{},[801,144921],{"style":803,"src":144922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[801,144924],{"style":803,"src":144925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,144927,144929],{"id":144928},"_2052-常见父项属性","20.5.2 常见父项属性",[263,144931,144932,144935,144938,144941,144944,144947,144950],{},[27,144933,144934],{},"flex-direction：设置主轴的方向",[27,144936,144937],{},"justify-content：设置主轴上的子元素排列方式",[27,144939,144940],{},"flex-wrap：设置子元素是否换行",[27,144942,144943],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[27,144945,144946],{},"align-items：设置侧轴上的子元素排列方式（单行）",[27,144948,144949],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[27,144951,144934],{},[801,144953],{"style":803,"src":144954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[801,144956],{"style":803,"src":144957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[263,144959,144960],{"start":82},[27,144961,144937],{},[801,144963],{"style":803,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[170,144966,144967,144970],{},[65,144968,144969],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[170,144972,144973],{},"跟着主轴走",[263,144975,144976],{"start":98},[27,144977,144940],{},[801,144979],{"style":803,"src":144980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[170,144982,144983],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[263,144985,144986],{"start":104},[27,144987,144943],{},[801,144989],{"style":803,"src":144990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[170,144992,144993],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[170,144995,144996],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[263,144998,144999],{"start":112},[27,145000,144946],{},[801,145002],{"style":803,"src":145003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[170,145005,145006],{},"align-items与align-content之间的区别：",[170,145008,145009],{},"单找items，多找content",[801,145011],{"style":803,"src":145012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[263,145014,145015],{"start":124},[27,145016,144949],{},[801,145018],{"style":803,"src":145019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,145021,145023],{"id":145022},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[263,145025,145026],{},[27,145027,145028],{},[268,145029,145030],{},"flex 属性",[170,145032,145033],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[801,145035],{"style":803,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[170,145038,145039],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[170,145041,145042],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[263,145044,145045],{"start":82},[27,145046,145047,15283,145050],{},[268,145048,145049],{},"align-self",[268,145051,145052],{},"控制子项自己在侧轴上的排列方式",[801,145054],{"style":803,"src":145055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[170,145057,145058],{},"单个子盒子在父盒子侧轴上的排列方式",[263,145060,145061],{"start":98},[27,145062,145063,145065],{},[268,145064,96772],{}," 属性定义项目的排列顺序",[801,145067],{"style":803,"src":145068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,145070,145072],{"id":145071},"_2054-背景线性渐变","20.5.4 背景线性渐变",[801,145074],{"style":803,"src":145075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[170,145077,145078],{},"必须要添加浏览器的私有前缀",[19,145080,145082],{"id":145081},"_2055-携程网首页案例","20.5.5 携程网首页案例",[170,145084,145085],{},"学到最重要的知识：",[170,145087,145088],{},"flex处理这样的布局思路",[801,145090],{"style":803,"src":145091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[58,145093,145095],{"className":60,"code":145094,"language":62,"meta":63,"style":63},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[65,145096,145097,145103,145113,145123,145133],{"__ignoreMap":63},[68,145098,145099,145101],{"class":70,"line":71},[68,145100,144842],{"class":74},[68,145102,79],{"class":78},[68,145104,145105,145107,145109,145111],{"class":70,"line":82},[68,145106,129637],{"class":85},[68,145108,89],{"class":78},[68,145110,52960],{"class":85},[68,145112,95],{"class":78},[68,145114,145115,145117,145119,145121],{"class":70,"line":98},[68,145116,144871],{"class":85},[68,145118,89],{"class":78},[68,145120,53074],{"class":85},[68,145122,95],{"class":78},[68,145124,145125,145127,145129,145131],{"class":70,"line":104},[68,145126,144882],{"class":85},[68,145128,89],{"class":78},[68,145130,53074],{"class":85},[68,145132,95],{"class":78},[68,145134,145135],{"class":70,"line":112},[68,145136,101],{"class":78},[170,145138,145139],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[170,145141,145142],{},"使用属性选择器",[801,145144],{"style":803,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[170,145147,70367],{},[58,145149,145151],{"className":128769,"code":145150,"language":128771,"meta":63,"style":63},"\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",[65,145152,145153,145158,145172,145177,145197,145202,145221,145226,145245,145250,145269],{"__ignoreMap":63},[68,145154,145155],{"class":70,"line":71},[68,145156,145157],{"class":302},"\u003C!-- 携程网移动端案例结构 -->\n",[68,145159,145160,145162,145164,145166,145168,145170],{"class":70,"line":82},[68,145161,2537],{"class":78},[68,145163,53093],{"class":52784},[68,145165,54968],{"class":74},[68,145167,1685],{"class":78},[68,145169,93798],{"class":1742},[68,145171,52791],{"class":78},[68,145173,145174],{"class":70,"line":98},[68,145175,145176],{"class":302},"  \u003C!-- 搜索栏 -->\n",[68,145178,145179,145181,145183,145185,145187,145190,145193,145195],{"class":70,"line":104},[68,145180,53626],{"class":78},[68,145182,53093],{"class":52784},[68,145184,54968],{"class":74},[68,145186,1685],{"class":78},[68,145188,145189],{"class":1742},"\"search-index\"",[68,145191,145192],{"class":78},">...\u003C\u002F",[68,145194,53093],{"class":52784},[68,145196,52791],{"class":78},[68,145198,145199],{"class":70,"line":112},[68,145200,145201],{"class":302},"  \u003C!-- 焦点图 -->\n",[68,145203,145204,145206,145208,145210,145212,145215,145217,145219],{"class":70,"line":124},[68,145205,53626],{"class":78},[68,145207,53093],{"class":52784},[68,145209,54968],{"class":74},[68,145211,1685],{"class":78},[68,145213,145214],{"class":1742},"\"focus\"",[68,145216,145192],{"class":78},[68,145218,53093],{"class":52784},[68,145220,52791],{"class":78},[68,145222,145223],{"class":70,"line":1496},[68,145224,145225],{"class":302},"  \u003C!-- 主导航 -->\n",[68,145227,145228,145230,145232,145234,145236,145239,145241,145243],{"class":70,"line":1502},[68,145229,53626],{"class":78},[68,145231,53093],{"class":52784},[68,145233,54968],{"class":74},[68,145235,1685],{"class":78},[68,145237,145238],{"class":1742},"\"local-nav\"",[68,145240,145192],{"class":78},[68,145242,53093],{"class":52784},[68,145244,52791],{"class":78},[68,145246,145247],{"class":70,"line":1510},[68,145248,145249],{"class":302},"  \u003C!-- 子导航 -->\n",[68,145251,145252,145254,145256,145258,145260,145263,145265,145267],{"class":70,"line":1521},[68,145253,53626],{"class":78},[68,145255,53093],{"class":52784},[68,145257,54968],{"class":74},[68,145259,1685],{"class":78},[68,145261,145262],{"class":1742},"\"nav-common\"",[68,145264,145192],{"class":78},[68,145266,53093],{"class":52784},[68,145268,52791],{"class":78},[68,145270,145271,145273,145275],{"class":70,"line":3103},[68,145272,53267],{"class":78},[68,145274,53093],{"class":52784},[68,145276,52791],{"class":78},[170,145278,71931],{},[58,145280,145281],{"className":60,"code":138227,"language":62,"meta":63,"style":63},[65,145282,145283,145297,145313],{"__ignoreMap":63},[68,145284,145285,145287,145289,145291,145293,145295],{"class":70,"line":71},[68,145286,55302],{"class":52784},[68,145288,2517],{"class":78},[68,145290,104582],{"class":74},[68,145292,1685],{"class":316},[68,145294,64177],{"class":1742},[68,145296,138244],{"class":78},[68,145298,145299,145301,145303,145305,145307,145309,145311],{"class":70,"line":82},[68,145300,72374],{"class":85},[68,145302,89],{"class":78},[68,145304,1846],{"class":85},[68,145306,317],{"class":316},[68,145308,53003],{"class":85},[68,145310,131601],{"class":85},[68,145312,95],{"class":78},[68,145314,145315],{"class":70,"line":98},[68,145316,101],{"class":78},[170,145318,145319],{},"总代码和效果展示：",[801,145321],{"style":803,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[170,145324,70367],{},[58,145326,145327],{"className":128769,"code":145150,"language":128771,"meta":63,"style":63},[65,145328,145329,145333,145347,145351,145369,145373,145391,145395,145413,145417,145435],{"__ignoreMap":63},[68,145330,145331],{"class":70,"line":71},[68,145332,145157],{"class":302},[68,145334,145335,145337,145339,145341,145343,145345],{"class":70,"line":82},[68,145336,2537],{"class":78},[68,145338,53093],{"class":52784},[68,145340,54968],{"class":74},[68,145342,1685],{"class":78},[68,145344,93798],{"class":1742},[68,145346,52791],{"class":78},[68,145348,145349],{"class":70,"line":98},[68,145350,145176],{"class":302},[68,145352,145353,145355,145357,145359,145361,145363,145365,145367],{"class":70,"line":104},[68,145354,53626],{"class":78},[68,145356,53093],{"class":52784},[68,145358,54968],{"class":74},[68,145360,1685],{"class":78},[68,145362,145189],{"class":1742},[68,145364,145192],{"class":78},[68,145366,53093],{"class":52784},[68,145368,52791],{"class":78},[68,145370,145371],{"class":70,"line":112},[68,145372,145201],{"class":302},[68,145374,145375,145377,145379,145381,145383,145385,145387,145389],{"class":70,"line":124},[68,145376,53626],{"class":78},[68,145378,53093],{"class":52784},[68,145380,54968],{"class":74},[68,145382,1685],{"class":78},[68,145384,145214],{"class":1742},[68,145386,145192],{"class":78},[68,145388,53093],{"class":52784},[68,145390,52791],{"class":78},[68,145392,145393],{"class":70,"line":1496},[68,145394,145225],{"class":302},[68,145396,145397,145399,145401,145403,145405,145407,145409,145411],{"class":70,"line":1502},[68,145398,53626],{"class":78},[68,145400,53093],{"class":52784},[68,145402,54968],{"class":74},[68,145404,1685],{"class":78},[68,145406,145238],{"class":1742},[68,145408,145192],{"class":78},[68,145410,53093],{"class":52784},[68,145412,52791],{"class":78},[68,145414,145415],{"class":70,"line":1510},[68,145416,145249],{"class":302},[68,145418,145419,145421,145423,145425,145427,145429,145431,145433],{"class":70,"line":1521},[68,145420,53626],{"class":78},[68,145422,53093],{"class":52784},[68,145424,54968],{"class":74},[68,145426,1685],{"class":78},[68,145428,145262],{"class":1742},[68,145430,145192],{"class":78},[68,145432,53093],{"class":52784},[68,145434,52791],{"class":78},[68,145436,145437,145439,145441],{"class":70,"line":3103},[68,145438,53267],{"class":78},[68,145440,53093],{"class":52784},[68,145442,52791],{"class":78},[170,145444,71931],{},[58,145446,145447],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,145448,145449,145453,145467,145471],{"__ignoreMap":63},[68,145450,145451],{"class":70,"line":71},[68,145452,132130],{"class":302},[68,145454,145455,145457,145459,145461,145463,145465],{"class":70,"line":82},[68,145456,2537],{"class":78},[68,145458,53093],{"class":52784},[68,145460,54968],{"class":74},[68,145462,1685],{"class":78},[68,145464,132143],{"class":1742},[68,145466,52791],{"class":78},[68,145468,145469],{"class":70,"line":98},[68,145470,132150],{"class":78},[68,145472,145473,145475,145477],{"class":70,"line":104},[68,145474,53267],{"class":78},[68,145476,53093],{"class":52784},[68,145478,52791],{"class":78},[1553,145480,139176],{},{"title":63,"searchDepth":82,"depth":82,"links":145482},[145483,145484,145488,145489,145490],{"id":144627,"depth":82,"text":144628},{"id":144659,"depth":82,"text":144660,"children":145485},[145486,145487],{"id":144663,"depth":98,"text":144664},{"id":144680,"depth":98,"text":144681},{"id":144699,"depth":82,"text":144700},{"id":144706,"depth":82,"text":144707},{"id":144793,"depth":82,"text":144794,"children":145491},[145492,145493,145494,145495,145496],{"id":144800,"depth":98,"text":144801},{"id":144928,"depth":98,"text":144929},{"id":145022,"depth":98,"text":145023},{"id":145071,"depth":98,"text":145072},{"id":145081,"depth":98,"text":145082},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144619,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145503,"title":145504,"body":145505,"description":1564,"extension":1565,"meta":146732,"navigation":1567,"path":146733,"seo":146734,"stem":146735,"__hash__":146736},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145506,"toc":146710},[145507,145510,145514,145518,145521,145524,145528,145533,145536,145539,145542,145545,145548,145605,145608,145613,145616,145619,145623,145634,145638,145641,145644,145651,145656,145660,145663,145669,145672,145676,145679,145686,145689,145692,145699,145702,145709,145712,145715,145722,145725,145728,145730,145747,145751,145754,145757,145760,145764,145767,145770,145773,145776,145779,145782,145784,145787,145790,145852,145855,145965,145972,145978,145981,145984,145988,145991,145995,146000,146003,146010,146013,146019,146024,146027,146030,146033,146036,146039,146042,146045,146048,146104,146106,146132,146136,146139,146142,146145,146153,146156,146159,146163,146219,146222,146226,146232,146243,146246,146251,146254,146257,146263,146266,146269,146272,146275,146278,146281,146284,146287,146312,146318,146321,146324,146327,146330,146333,146336,146341,146344,146347,146350,146358,146361,146368,146371,146374,146376,146400,146402,146405,146408,146411,146414,146417,146420,146423,146457,146460,146463,146497,146504,146507,146510,146513,146516,146519,146522,146529,146532,146535,146538,146541,146548,146551,146554,146561,146564,146567,146571,146574,146577,146580,146583,146586,146589,146592,146595,146597,146621,146623,146647,146651,146662,146665,146668,146671,146674,146677,146680,146683,146686,146689,146692,146695,146698,146701,146704,146707],[10,145508,145504],{"id":145509},"_21-移动端布局实战下篇",[14,145511,145513],{"id":145512},"_211-rem适配布局","21.1 rem适配布局",[19,145515,145517],{"id":145516},"_2111-rem单位","21.1.1 rem单位",[801,145519],{"style":803,"src":145520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[170,145522,145523],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,145525,145527],{"id":145526},"_2112-媒体查询","21.1.2 媒体查询",[263,145529,145530],{},[27,145531,145532],{},"参数介绍",[801,145534],{"style":803,"src":145535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[801,145537],{"style":803,"src":145538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[801,145540],{"style":803,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[801,145543],{"style":803,"src":145544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[801,145546],{"style":803,"src":145547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[58,145549,145551],{"className":60,"code":145550,"language":62,"meta":63,"style":63},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[65,145552,145553,145558,145577,145584,145597,145601],{"__ignoreMap":63},[68,145554,145555],{"class":70,"line":71},[68,145556,145557],{"class":302},"\u002F* 媒体查询 *\u002F\n",[68,145559,145560,145563,145565,145568,145570,145573,145575],{"class":70,"line":82},[68,145561,145562],{"class":316},"@media",[68,145564,3149],{"class":78},[68,145566,145567],{"class":85},"max-width",[68,145569,89],{"class":78},[68,145571,145572],{"class":85},"768",[68,145574,317],{"class":316},[68,145576,13930],{"class":78},[68,145578,145579,145582],{"class":70,"line":98},[68,145580,145581],{"class":74},"  .container",[68,145583,79],{"class":78},[68,145585,145586,145589,145591,145593,145595],{"class":70,"line":104},[68,145587,145588],{"class":85},"    width",[68,145590,89],{"class":78},[68,145592,1940],{"class":85},[68,145594,1957],{"class":316},[68,145596,95],{"class":78},[68,145598,145599],{"class":70,"line":112},[68,145600,128818],{"class":78},[68,145602,145603],{"class":70,"line":124},[68,145604,101],{"class":78},[170,145606,145607],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[263,145609,145610],{"start":82},[27,145611,145612],{},"引入资源",[801,145614],{"style":803,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[170,145617,145618],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,145620,145622],{"id":145621},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[24,145624,145625,145628,145631],{},[27,145626,145627],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[27,145629,145630],{},"媒体查询可以根据不同设备宽度来修改样式",[27,145632,145633],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145635,145637],{"id":145636},"_212-less基础","21.2 Less基础",[170,145639,145640],{},"css冗余度较高，不利于复用，没有很好的计算能力",[170,145642,145643],{},"Less可以解决该问题，它是css的扩展语言",[170,145645,145646,145647],{},"Less中文网址： ",[1867,145648,145649],{"href":145649,"rel":145650},"http:\u002F\u002Flesscss.cn\u002F",[25350],[170,145652,145653],{},[268,145654,145655],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,145657,145659],{"id":145658},"_2121-less安装","21.2.1 less安装",[170,145661,145662],{},"如果使用vscode，则无需进行下方安装步骤",[170,145664,145665],{},[1867,145666,145667],{"href":145667,"rel":145668},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25350],[801,145670],{"style":803,"src":145671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,145673,145675],{"id":145674},"_2122-less使用","21.2.2 less使用",[170,145677,145678],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[263,145680,145681],{},[27,145682,145683],{},[268,145684,145685],{},"Less 变量",[801,145687],{"style":803,"src":145688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[801,145690],{"style":803,"src":145691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[263,145693,145694],{"start":82},[27,145695,145696],{},[268,145697,145698],{},"Less 编译",[801,145700],{"style":803,"src":145701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[263,145703,145704],{"start":98},[27,145705,145706],{},[268,145707,145708],{},"Less 嵌套",[801,145710],{"style":803,"src":145711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[801,145713],{"style":803,"src":145714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[263,145716,145717],{"start":104},[27,145718,145719],{},[268,145720,145721],{},"Less 运算",[801,145723],{"style":803,"src":145724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[170,145726,145727],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[170,145729,1669],{},[24,145731,145732,145735,145738,145741,145744],{},[27,145733,145734],{},"乘号（*）和除号（\u002F）的写法",[27,145736,145737],{},"运算符中间左右有个空格隔开 1px + 5",[27,145739,145740],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[27,145742,145743],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[27,145745,145746],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145748,145750],{"id":145749},"_213-rem-适配方案","21.3 rem 适配方案",[170,145752,145753],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[170,145755,145756],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[801,145758],{"style":803,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,145761,145763],{"id":145762},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[170,145765,145766],{},"rem + 媒体查询 + less 技术",[801,145768],{"style":803,"src":145769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[170,145771,145772],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[170,145774,145775],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[801,145777],{"style":803,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[170,145780,145781],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[170,145783,16121],{},[801,145785],{"style":803,"src":145786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[170,145788,145789],{},"index.html:",[58,145791,145793],{"className":60,"code":145792,"language":62,"meta":63,"style":63},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[65,145794,145795,145800,145806,145822,145826,145832,145848],{"__ignoreMap":63},[68,145796,145797],{"class":70,"line":71},[68,145798,145799],{"class":302},"\u002F* rem 适配方案 *\u002F\n",[68,145801,145802,145804],{"class":70,"line":82},[68,145803,52119],{"class":52784},[68,145805,79],{"class":78},[68,145807,145808,145810,145812,145815,145817,145819],{"class":70,"line":98},[68,145809,72104],{"class":85},[68,145811,89],{"class":78},[68,145813,145814],{"class":85},"62.5",[68,145816,1957],{"class":316},[68,145818,299],{"class":78},[68,145820,145821],{"class":302},"\u002F* 1rem = 10px *\u002F\n",[68,145823,145824],{"class":70,"line":104},[68,145825,101],{"class":78},[68,145827,145828,145830],{"class":70,"line":112},[68,145829,284],{"class":74},[68,145831,79],{"class":78},[68,145833,145834,145836,145838,145840,145843,145845],{"class":70,"line":124},[68,145835,72046],{"class":85},[68,145837,89],{"class":78},[68,145839,313],{"class":85},[68,145841,145842],{"class":316},"rem",[68,145844,299],{"class":78},[68,145846,145847],{"class":302},"\u002F* 100px *\u002F\n",[68,145849,145850],{"class":70,"line":1496},[68,145851,101],{"class":78},[170,145853,145854],{},"common.less",[58,145856,145858],{"className":60,"code":145857,"language":62,"meta":63,"style":63},"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",[65,145859,145860,145866,145881,145885,145891,145905,145909,145913,145917,145923,145937,145941,145947,145961],{"__ignoreMap":63},[68,145861,145862,145864],{"class":70,"line":71},[68,145863,52119],{"class":52784},[68,145865,79],{"class":78},[68,145867,145868,145870,145872,145874,145876,145878],{"class":70,"line":82},[68,145869,72104],{"class":85},[68,145871,89],{"class":78},[68,145873,145814],{"class":85},[68,145875,1957],{"class":316},[68,145877,27553],{"class":78},[68,145879,145880],{"class":302},"\u002F* 10px *\u002F\n",[68,145882,145883],{"class":70,"line":98},[68,145884,101],{"class":78},[68,145886,145887,145889],{"class":70,"line":104},[68,145888,53093],{"class":52784},[68,145890,79],{"class":78},[68,145892,145893,145895,145897,145899,145901,145903],{"class":70,"line":112},[68,145894,72046],{"class":85},[68,145896,89],{"class":78},[68,145898,313],{"class":85},[68,145900,145842],{"class":316},[68,145902,27553],{"class":78},[68,145904,145847],{"class":302},[68,145906,145907],{"class":70,"line":124},[68,145908,101],{"class":78},[68,145910,145911],{"class":70,"line":1496},[68,145912,137236],{"class":78},[68,145914,145915],{"class":70,"line":1502},[68,145916,145799],{"class":302},[68,145918,145919,145921],{"class":70,"line":1510},[68,145920,52119],{"class":52784},[68,145922,79],{"class":78},[68,145924,145925,145927,145929,145931,145933,145935],{"class":70,"line":1521},[68,145926,72104],{"class":85},[68,145928,89],{"class":78},[68,145930,145814],{"class":85},[68,145932,1957],{"class":316},[68,145934,299],{"class":78},[68,145936,145821],{"class":302},[68,145938,145939],{"class":70,"line":3103},[68,145940,101],{"class":78},[68,145942,145943,145945],{"class":70,"line":3108},[68,145944,284],{"class":74},[68,145946,79],{"class":78},[68,145948,145949,145951,145953,145955,145957,145959],{"class":70,"line":3114},[68,145950,72046],{"class":85},[68,145952,89],{"class":78},[68,145954,313],{"class":85},[68,145956,145842],{"class":316},[68,145958,299],{"class":78},[68,145960,145847],{"class":302},[68,145962,145963],{"class":70,"line":3119},[68,145964,101],{"class":78},[170,145966,145967,145968,145971],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25039,145969,145970],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[58,145973,145976],{"className":145974,"code":145975,"language":6676},[6674],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[65,145977,145975],{"__ignoreMap":63},[170,145979,145980],{},"less保存时会自动变成.css文件",[170,145982,145983],{},"好好搞懂上述代码写法",[19,145985,145987],{"id":145986},"_2132-样式导入样式","21.3.2 样式导入样式",[801,145989],{"style":803,"src":145990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,145992,145994],{"id":145993},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[263,145996,145997],{},[27,145998,145999],{},"准备工作",[801,146001],{"style":803,"src":146002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[170,146004,146005,146006],{},"github地址：",[1867,146007,146008],{"href":146008,"rel":146009},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25350],[170,146011,146012],{},"下载之后，将index.js文件拖到项目中就可以了",[170,146014,146015,146016],{},"js文件引入到index.html中使用的是",[65,146017,146018],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[263,146020,146021],{"start":82},[27,146022,146023],{},"vscode插件",[801,146025],{"style":803,"src":146026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[170,146028,146029],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[170,146031,146032],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[801,146034],{"style":803,"src":146035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[170,146037,146038],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[801,146040],{"style":803,"src":146041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[170,146043,146044],{},"修改成75就可以，alt+z为快捷键",[170,146046,146047],{},"index.css：",[58,146049,146050],{"className":60,"code":145792,"language":62,"meta":63,"style":63},[65,146051,146052,146056,146062,146076,146080,146086,146100],{"__ignoreMap":63},[68,146053,146054],{"class":70,"line":71},[68,146055,145799],{"class":302},[68,146057,146058,146060],{"class":70,"line":82},[68,146059,52119],{"class":52784},[68,146061,79],{"class":78},[68,146063,146064,146066,146068,146070,146072,146074],{"class":70,"line":98},[68,146065,72104],{"class":85},[68,146067,89],{"class":78},[68,146069,145814],{"class":85},[68,146071,1957],{"class":316},[68,146073,299],{"class":78},[68,146075,145821],{"class":302},[68,146077,146078],{"class":70,"line":104},[68,146079,101],{"class":78},[68,146081,146082,146084],{"class":70,"line":112},[68,146083,284],{"class":74},[68,146085,79],{"class":78},[68,146087,146088,146090,146092,146094,146096,146098],{"class":70,"line":124},[68,146089,72046],{"class":85},[68,146091,89],{"class":78},[68,146093,313],{"class":85},[68,146095,145842],{"class":316},[68,146097,299],{"class":78},[68,146099,145847],{"class":302},[68,146101,146102],{"class":70,"line":1496},[68,146103,101],{"class":78},[170,146105,145789],{},[58,146107,146108],{"className":60,"code":128427,"language":62,"meta":63,"style":63},[65,146109,146110,146116,146128],{"__ignoreMap":63},[68,146111,146112,146114],{"class":70,"line":71},[68,146113,53282],{"class":52784},[68,146115,79],{"class":78},[68,146117,146118,146120,146122,146124,146126],{"class":70,"line":82},[68,146119,72104],{"class":85},[68,146121,89],{"class":78},[68,146123,2229],{"class":85},[68,146125,317],{"class":316},[68,146127,95],{"class":78},[68,146129,146130],{"class":70,"line":98},[68,146131,101],{"class":78},[14,146133,146135],{"id":146134},"_214-响应式开发","21.4 响应式开发",[170,146137,146138],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[801,146140],{"style":803,"src":146141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[170,146143,146144],{},"做法：",[24,146146,146147,146150],{},[27,146148,146149],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[27,146151,146152],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[801,146154],{"style":803,"src":146155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[170,146157,146158],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,146160,146162],{"id":146161},"_2141-简单代码示范","21.4.1 简单代码示范",[58,146164,146165],{"className":60,"code":145792,"language":62,"meta":63,"style":63},[65,146166,146167,146171,146177,146191,146195,146201,146215],{"__ignoreMap":63},[68,146168,146169],{"class":70,"line":71},[68,146170,145799],{"class":302},[68,146172,146173,146175],{"class":70,"line":82},[68,146174,52119],{"class":52784},[68,146176,79],{"class":78},[68,146178,146179,146181,146183,146185,146187,146189],{"class":70,"line":98},[68,146180,72104],{"class":85},[68,146182,89],{"class":78},[68,146184,145814],{"class":85},[68,146186,1957],{"class":316},[68,146188,299],{"class":78},[68,146190,145821],{"class":302},[68,146192,146193],{"class":70,"line":104},[68,146194,101],{"class":78},[68,146196,146197,146199],{"class":70,"line":112},[68,146198,284],{"class":74},[68,146200,79],{"class":78},[68,146202,146203,146205,146207,146209,146211,146213],{"class":70,"line":124},[68,146204,72046],{"class":85},[68,146206,89],{"class":78},[68,146208,313],{"class":85},[68,146210,145842],{"class":316},[68,146212,299],{"class":78},[68,146214,145847],{"class":302},[68,146216,146217],{"class":70,"line":1496},[68,146218,101],{"class":78},[170,146220,146221],{},"父盒子一般命名为container",[19,146223,146225],{"id":146224},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[170,146227,146228,146229],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[268,146230,146231],{},"使得 Web 开发更加快捷",[24,146233,146234],{},[27,146235,146236,146237],{},"官网：",[268,146238,146239],{},[1867,146240,146241],{"href":146241,"rel":146242},"http:\u002F\u002Fgetbootstrap.com\u002F",[25350],[170,146244,146245],{},"可以直接去官网拿现成的东西",[263,146247,146248],{},[27,146249,146250],{},"Bootstrap的使用",[170,146252,146253],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[170,146255,146256],{},"Bootstrap 使用四步曲：",[170,146258,146259,146262],{},[268,146260,146261],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[801,146264],{"style":803,"src":146265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[170,146267,146268],{},"打开Bootstrap官网，然后下载",[801,146270],{"style":803,"src":146271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[801,146273],{"style":803,"src":146274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[170,146276,146277],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[170,146279,146280],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[170,146282,146283],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[801,146285],{"style":803,"src":146286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[58,146288,146290],{"className":60,"code":146289,"language":62,"meta":63,"style":63},".center {\n  color: red;\n}\n",[65,146291,146292,146298,146308],{"__ignoreMap":63},[68,146293,146294,146296],{"class":70,"line":71},[68,146295,128314],{"class":74},[68,146297,79],{"class":78},[68,146299,146300,146302,146304,146306],{"class":70,"line":82},[68,146301,72383],{"class":85},[68,146303,89],{"class":78},[68,146305,58899],{"class":85},[68,146307,95],{"class":78},[68,146309,146310],{"class":70,"line":98},[68,146311,101],{"class":78},[170,146313,146314,146317],{},[65,146315,146316],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[801,146319],{"style":803,"src":146320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[801,146322],{"style":803,"src":146323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[801,146325],{"style":803,"src":146326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[170,146328,146329],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[801,146331],{"style":803,"src":146332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[170,146334,146335],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[263,146337,146338],{"start":82},[27,146339,146340],{},"布局容器",[801,146342],{"style":803,"src":146343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[170,146345,146346],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[170,146348,146349],{},"container-fluid用于移动式布局比较方便",[263,146351,146352],{"start":98},[27,146353,146354,146355],{},"bootstrap ",[268,146356,146357],{},"栅格系统原理",[801,146359],{"style":803,"src":146360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[263,146362,146363],{"start":104},[27,146364,146365],{},[268,146366,146367],{},"栅格选项参数",[801,146369],{"style":803,"src":146370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[170,146372,146373],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[170,146375,16121],{},[58,146377,146378],{"className":60,"code":146289,"language":62,"meta":63,"style":63},[65,146379,146380,146386,146396],{"__ignoreMap":63},[68,146381,146382,146384],{"class":70,"line":71},[68,146383,128314],{"class":74},[68,146385,79],{"class":78},[68,146387,146388,146390,146392,146394],{"class":70,"line":82},[68,146389,72383],{"class":85},[68,146391,89],{"class":78},[68,146393,58899],{"class":85},[68,146395,95],{"class":78},[68,146397,146398],{"class":70,"line":98},[68,146399,101],{"class":78},[170,146401,136818],{},[801,146403],{"style":803,"src":146404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[170,146406,146407],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[170,146409,146410],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[170,146412,146413],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[170,146415,146416],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[170,146418,146419],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[170,146421,146422],{},"汇总展示说明：",[58,146424,146425],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,146426,146427,146431,146445,146449],{"__ignoreMap":63},[68,146428,146429],{"class":70,"line":71},[68,146430,132130],{"class":302},[68,146432,146433,146435,146437,146439,146441,146443],{"class":70,"line":82},[68,146434,2537],{"class":78},[68,146436,53093],{"class":52784},[68,146438,54968],{"class":74},[68,146440,1685],{"class":78},[68,146442,132143],{"class":1742},[68,146444,52791],{"class":78},[68,146446,146447],{"class":70,"line":98},[68,146448,132150],{"class":78},[68,146450,146451,146453,146455],{"class":70,"line":104},[68,146452,53267],{"class":78},[68,146454,53093],{"class":52784},[68,146456,52791],{"class":78},[801,146458],{"style":803,"src":146459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[170,146461,146462],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[58,146464,146465],{"className":128769,"code":132123,"language":128771,"meta":63,"style":63},[65,146466,146467,146471,146485,146489],{"__ignoreMap":63},[68,146468,146469],{"class":70,"line":71},[68,146470,132130],{"class":302},[68,146472,146473,146475,146477,146479,146481,146483],{"class":70,"line":82},[68,146474,2537],{"class":78},[68,146476,53093],{"class":52784},[68,146478,54968],{"class":74},[68,146480,1685],{"class":78},[68,146482,132143],{"class":1742},[68,146484,52791],{"class":78},[68,146486,146487],{"class":70,"line":98},[68,146488,132150],{"class":78},[68,146490,146491,146493,146495],{"class":70,"line":104},[68,146492,53267],{"class":78},[68,146494,53093],{"class":52784},[68,146496,52791],{"class":78},[263,146498,146499],{"start":112},[27,146500,146501],{},[268,146502,146503],{},"列嵌套",[801,146505],{"style":803,"src":146506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[170,146508,146509],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[170,146511,146512],{},"没加row内部这样：",[801,146514],{"style":803,"src":146515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[170,146517,146518],{},"加上row之后内部为：",[801,146520],{"style":803,"src":146521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[263,146523,146524],{"start":124},[27,146525,146526],{},[268,146527,146528],{},"列偏移",[801,146530],{"style":803,"src":146531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[170,146533,146534],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[170,146536,146537],{},"要加偏移量，即偏移份数",[170,146539,146540],{},"偏移的份数=12-两个盒子的份数",[263,146542,146543],{"start":1496},[27,146544,146545],{},[268,146546,146547],{},"列排序",[801,146549],{"style":803,"src":146550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[170,146552,146553],{},"pull拉左；push推右",[263,146555,146556],{"start":1502},[27,146557,146558],{},[268,146559,146560],{},"响应式工具",[801,146562],{"style":803,"src":146563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[170,146565,146566],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,146568,146570],{"id":146569},"_2143-响应式小项目","21.4.3 响应式小项目",[170,146572,146573],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[170,146575,146576],{},"ul {",[170,146578,146579],{},"list-style: none;",[170,146581,146582],{},"margin:0;",[170,146584,146585],{},"padding:0; }",[801,146587],{"style":803,"src":146588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[801,146590],{"style":803,"src":146591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[170,146593,146594],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[170,146596,70367],{},[58,146598,146599],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,146600,146601,146607,146617],{"__ignoreMap":63},[68,146602,146603,146605],{"class":70,"line":71},[68,146604,284],{"class":74},[68,146606,79],{"class":78},[68,146608,146609,146611,146613,146615],{"class":70,"line":82},[68,146610,86],{"class":85},[68,146612,89],{"class":78},[68,146614,92],{"class":85},[68,146616,95],{"class":78},[68,146618,146619],{"class":70,"line":98},[68,146620,101],{"class":78},[170,146622,71931],{},[58,146624,146625],{"className":60,"code":140445,"language":62,"meta":63,"style":63},[65,146626,146627,146633,146643],{"__ignoreMap":63},[68,146628,146629,146631],{"class":70,"line":71},[68,146630,284],{"class":74},[68,146632,79],{"class":78},[68,146634,146635,146637,146639,146641],{"class":70,"line":82},[68,146636,86],{"class":85},[68,146638,89],{"class":78},[68,146640,92],{"class":85},[68,146642,95],{"class":78},[68,146644,146645],{"class":70,"line":98},[68,146646,101],{"class":78},[14,146648,146650],{"id":146649},"_215-swiper-插件使用","21.5 swiper 插件使用",[24,146652,146653,146656,146659],{},[27,146654,146655],{},"下载需要的css和js文件html页面中 引入相关文件",[27,146657,146658],{},"官网找到类似案例，复制html结构，css样式 js 语法",[27,146660,146661],{},"根据需求定制修改模块",[801,146663],{"style":803,"src":146664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[170,146666,146667],{},"解压后将这两部分放到项目中",[801,146669],{"style":803,"src":146670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[170,146672,146673],{},"这个插件可以帮助我们实现轮播图效果",[170,146675,146676],{},"用法：",[801,146678],{"style":803,"src":146679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[170,146681,146682],{},"找到自己喜欢的",[801,146684],{"style":803,"src":146685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[170,146687,146688],{},"右键，查看网页源代码",[801,146690],{"style":803,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[170,146693,146694],{},"复制人家的结构内容",[170,146696,146697],{},"然后去看API文档：",[801,146699],{"style":803,"src":146700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[170,146702,146703],{},"可以看看如何修改样式",[170,146705,146706],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1553,146708,146709],{},"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":63,"searchDepth":82,"depth":82,"links":146711},[146712,146717,146721,146726,146731],{"id":145512,"depth":82,"text":145513,"children":146713},[146714,146715,146716],{"id":145516,"depth":98,"text":145517},{"id":145526,"depth":98,"text":145527},{"id":145621,"depth":98,"text":145622},{"id":145636,"depth":82,"text":145637,"children":146718},[146719,146720],{"id":145658,"depth":98,"text":145659},{"id":145674,"depth":98,"text":145675},{"id":145749,"depth":82,"text":145750,"children":146722},[146723,146724,146725],{"id":145762,"depth":98,"text":145763},{"id":145986,"depth":98,"text":145987},{"id":145993,"depth":98,"text":145994},{"id":146134,"depth":82,"text":146135,"children":146727},[146728,146729,146730],{"id":146161,"depth":98,"text":146162},{"id":146224,"depth":98,"text":146225},{"id":146569,"depth":98,"text":146570},{"id":146649,"depth":82,"text":146650},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145504,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146738,"title":146739,"body":146740,"description":1564,"extension":1565,"meta":146960,"navigation":1567,"path":146961,"seo":146962,"stem":146963,"__hash__":146964},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146741,"toc":146956},[146742,146745,146749,146752,146767,146772,146775,146780,146815,146820,146832,146837,146850,146855,146872,146877,146897,146902,146920,146923,146926,146929,146932,146936,146939,146942,146945,146948,146951,146954],[10,146743,146739],{"id":146744},"_22-代码提交与新型相对单位",[14,146746,146748],{"id":146747},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[170,146750,146751],{},"法1：",[263,146753,146754,146761,146764],{},[27,146755,146756,146757],{},"登录网站注册：",[1867,146758,146759],{"href":146759,"rel":146760},"https:\u002F\u002Fgitee.com\u002F",[25350],[27,146762,146763],{},"码云创建新的仓库",[27,146765,146766],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[24,146768,146769],{},[27,146770,146771],{},"在网站根目录右键-- Git Bash Here",[801,146773],{"style":803,"src":146774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[24,146776,146777],{},[27,146778,146779],{},"如果是第一次利用git提交，请配置好全局选项",[58,146781,146783],{"className":118770,"code":146782,"language":118772,"meta":63,"style":63},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[65,146784,146785,146801],{"__ignoreMap":63},[68,146786,146787,146790,146792,146795,146798],{"class":70,"line":71},[68,146788,146789],{"class":74},"git",[68,146791,121193],{"class":1742},[68,146793,146794],{"class":85}," --global",[68,146796,146797],{"class":1742}," user.name",[68,146799,146800],{"class":1742}," \"你的名字\"\n",[68,146802,146803,146805,146807,146809,146812],{"class":70,"line":82},[68,146804,146789],{"class":74},[68,146806,121193],{"class":1742},[68,146808,146794],{"class":85},[68,146810,146811],{"class":1742}," user.email",[68,146813,146814],{"class":1742}," \"你的邮箱\"\n",[24,146816,146817],{},[27,146818,146819],{},"初始化仓库",[58,146821,146823],{"className":118770,"code":146822,"language":118772,"meta":63,"style":63},"git init\n",[65,146824,146825],{"__ignoreMap":63},[68,146826,146827,146829],{"class":70,"line":71},[68,146828,146789],{"class":74},[68,146830,146831],{"class":1742}," init\n",[24,146833,146834],{},[27,146835,146836],{},"把本地文件放到暂存区",[58,146838,146840],{"className":118770,"code":146839,"language":118772,"meta":63,"style":63},"git add .\n",[65,146841,146842],{"__ignoreMap":63},[68,146843,146844,146846,146848],{"class":70,"line":71},[68,146845,146789],{"class":74},[68,146847,6698],{"class":1742},[68,146849,30225],{"class":1742},[24,146851,146852],{},[27,146853,146854],{},"把本地文件放到本地仓库里面",[58,146856,146858],{"className":118770,"code":146857,"language":118772,"meta":63,"style":63},"git commit -m \"first commit\"\n",[65,146859,146860],{"__ignoreMap":63},[68,146861,146862,146864,146867,146869],{"class":70,"line":71},[68,146863,146789],{"class":74},[68,146865,146866],{"class":1742}," commit",[68,146868,102357],{"class":85},[68,146870,146871],{"class":1742}," \"first commit\"\n",[24,146873,146874],{},[27,146875,146876],{},"链接远程仓库",[58,146878,146880],{"className":118770,"code":146879,"language":118772,"meta":63,"style":63},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[65,146881,146882],{"__ignoreMap":63},[68,146883,146884,146886,146889,146891,146894],{"class":70,"line":71},[68,146885,146789],{"class":74},[68,146887,146888],{"class":1742}," remote",[68,146890,6698],{"class":1742},[68,146892,146893],{"class":1742}," origin",[68,146895,146896],{"class":1742}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[24,146898,146899],{},[27,146900,146901],{},"把本地仓库的文件推送到远程仓库 push",[58,146903,146905],{"className":118770,"code":146904,"language":118772,"meta":63,"style":63},"git push -u origin master\n",[65,146906,146907],{"__ignoreMap":63},[68,146908,146909,146911,146913,146915,146917],{"class":70,"line":71},[68,146910,146789],{"class":74},[68,146912,30500],{"class":1742},[68,146914,29774],{"class":85},[68,146916,146893],{"class":1742},[68,146918,146919],{"class":1742}," master\n",[801,146921],{"style":803,"src":146922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[170,146924,146925],{},"上方方法暂未实现，后边学完git后在整",[170,146927,146928],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[801,146930],{"style":803,"src":146931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146933,146935],{"id":146934},"_222-新型相对单位","22.2 新型相对单位",[801,146937],{"style":803,"src":146938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[801,146940],{"style":803,"src":146941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[170,146943,146944],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[170,146946,146947],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[801,146949],{"style":803,"src":146950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[170,146952,146953],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1553,146955,25443],{},{"title":63,"searchDepth":82,"depth":82,"links":146957},[146958,146959],{"id":146747,"depth":82,"text":146748},{"id":146934,"depth":82,"text":146935},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146739,"description":1564},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146966,"title":146967,"body":146968,"description":146972,"extension":1565,"meta":146973,"navigation":1567,"path":146974,"seo":146975,"stem":146976,"__hash__":146977},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146969,"toc":146970},[],{"title":63,"searchDepth":82,"depth":82,"links":146971},[],"自己正经开始学编程的第一门语言！",{"category":94314},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146967,"description":146972},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146979,"title":146980,"body":146981,"description":1564,"extension":1565,"meta":148128,"navigation":1567,"path":148129,"seo":148130,"stem":148131,"__hash__":148132},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146982,"toc":148104},[146983,146986,146990,146993,146996,147021,147024,147030,147034,147037,147064,147067,147107,147110,147122,147125,147131,147135,147139,147166,147183,147190,147194,147197,147223,147226,147230,147233,147273,147276,147293,147299,147303,147308,147352,147355,147373,147376,147444,147448,147455,147458,147473,147476,147485,147488,147499,147502,147511,147514,147531,147534,147549,147553,147557,147560,147562,147582,147586,147589,147592,147603,147606,147612,147616,147622,147649,147652,147664,147667,147678,147681,147687,147691,147697,147747,147750,147792,147795,147828,147831,147865,147869,147872,147892,147895,147931,147934,147947,147951,147955,147961,147964,147977,147981,147984,147990,147993,147997,148000,148003,148052,148056,148072,148078,148085,148091,148101],[10,146984,146980],{"id":146985},"_1-python环境与第一个程序",[14,146987,146989],{"id":146988},"_11-什么是python","1.1 什么是Python",[170,146991,146992],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[170,146994,146995],{},"理解 Python 时抓住三个关键词：",[263,146997,146998,147001,147004],{},[27,146999,147000],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[27,147002,147003],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[27,147005,147006,147007,1841,147010,1841,147013,1841,147016,1841,147018,29869],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[65,147008,147009],{},"os",[65,147011,147012],{},"sys",[65,147014,147015],{},"json",[65,147017,59338],{},[65,147019,147020],{},"datetime",[170,147022,147023],{},"Python 程序的运行链路：",[58,147025,147028],{"className":147026,"code":147027,"language":6676,"meta":63},[6674],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[65,147029,147027],{"__ignoreMap":63},[14,147031,147033],{"id":147032},"_12-python解释器","1.2 Python解释器",[170,147035,147036],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[58,147038,147040],{"className":25307,"code":147039,"language":25309,"meta":63,"style":63},"python --version\npython3 --version\npython\npython3\n",[65,147041,147042,147048,147054,147059],{"__ignoreMap":63},[68,147043,147044,147046],{"class":70,"line":71},[68,147045,31864],{"class":74},[68,147047,27779],{"class":85},[68,147049,147050,147052],{"class":70,"line":82},[68,147051,102354],{"class":74},[68,147053,27779],{"class":85},[68,147055,147056],{"class":70,"line":98},[68,147057,147058],{"class":74},"python\n",[68,147060,147061],{"class":70,"line":104},[68,147062,147063],{"class":74},"python3\n",[170,147065,147066],{},"进入交互模式后，可以直接输入表达式：",[58,147068,147070],{"className":31862,"code":147069,"language":31864,"meta":63,"style":63},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[65,147071,147072,147083,147088,147102],{"__ignoreMap":63},[68,147073,147074,147077,147079,147081],{"class":70,"line":71},[68,147075,147076],{"class":316},">>>",[68,147078,26604],{"class":85},[68,147080,47050],{"class":316},[68,147082,49207],{"class":85},[68,147084,147085],{"class":70,"line":82},[68,147086,147087],{"class":85},"3\n",[68,147089,147090,147092,147095,147097,147100],{"class":70,"line":98},[68,147091,147076],{"class":316},[68,147093,147094],{"class":85}," print",[68,147096,1640],{"class":78},[68,147098,147099],{"class":1742},"\"hello python\"",[68,147101,1646],{"class":78},[68,147103,147104],{"class":70,"line":104},[68,147105,147106],{"class":78},"hello python\n",[170,147108,147109],{},"退出交互模式：",[58,147111,147113],{"className":31862,"code":147112,"language":31864,"meta":63,"style":63},"exit()\n",[65,147114,147115],{"__ignoreMap":63},[68,147116,147117,147120],{"class":70,"line":71},[68,147118,147119],{"class":85},"exit",[68,147121,3466],{"class":78},[170,147123,147124],{},"或使用快捷键：",[58,147126,147129],{"className":147127,"code":147128,"language":6676,"meta":63},[6674],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[65,147130,147128],{"__ignoreMap":63},[14,147132,147134],{"id":147133},"_13-安装python","1.3 安装Python",[19,147136,147138],{"id":147137},"_131-windows安装","1.3.1 Windows安装",[263,147140,147141,147148,147151,147157,147163],{},[27,147142,147143,147144],{},"打开 Python 官网：",[1867,147145,147146],{"href":147146,"rel":147147},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25350],[27,147149,147150],{},"下载 Windows Installer。",[27,147152,147153,147154,29869],{},"安装时勾选 ",[65,147155,147156],{},"Add Python to PATH",[27,147158,147159,147160,29869],{},"点击 ",[65,147161,147162],{},"Install Now",[27,147164,147165],{},"安装完成后打开命令提示符验证：",[58,147167,147169],{"className":25307,"code":147168,"language":25309,"meta":63,"style":63},"python --version\npip --version\n",[65,147170,147171,147177],{"__ignoreMap":63},[68,147172,147173,147175],{"class":70,"line":71},[68,147174,31864],{"class":74},[68,147176,27779],{"class":85},[68,147178,147179,147181],{"class":70,"line":82},[68,147180,25316],{"class":74},[68,147182,27779],{"class":85},[170,147184,147185,147186,147189],{},"如果提示 ",[65,147187,147188],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,147191,147193],{"id":147192},"_132-macos安装","1.3.2 macOS安装",[170,147195,147196],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[58,147198,147200],{"className":25307,"code":147199,"language":25309,"meta":63,"style":63},"brew install python\npython3 --version\npip3 --version\n",[65,147201,147202,147211,147217],{"__ignoreMap":63},[68,147203,147204,147207,147209],{"class":70,"line":71},[68,147205,147206],{"class":74},"brew",[68,147208,25319],{"class":1742},[68,147210,125792],{"class":1742},[68,147212,147213,147215],{"class":70,"line":82},[68,147214,102354],{"class":74},[68,147216,27779],{"class":85},[68,147218,147219,147221],{"class":70,"line":98},[68,147220,121174],{"class":74},[68,147222,27779],{"class":85},[170,147224,147225],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,147227,147229],{"id":147228},"_133-linux安装","1.3.3 Linux安装",[170,147231,147232],{},"Ubuntu\u002FDebian：",[58,147234,147236],{"className":25307,"code":147235,"language":25309,"meta":63,"style":63},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[65,147237,147238,147246,147261,147267],{"__ignoreMap":63},[68,147239,147240,147242,147244],{"class":70,"line":71},[68,147241,26062],{"class":74},[68,147243,118791],{"class":1742},[68,147245,27728],{"class":1742},[68,147247,147248,147250,147252,147254,147256,147258],{"class":70,"line":82},[68,147249,26062],{"class":74},[68,147251,118791],{"class":1742},[68,147253,25319],{"class":1742},[68,147255,105878],{"class":1742},[68,147257,102273],{"class":1742},[68,147259,147260],{"class":1742}," python3-venv\n",[68,147262,147263,147265],{"class":70,"line":98},[68,147264,102354],{"class":74},[68,147266,27779],{"class":85},[68,147268,147269,147271],{"class":70,"line":104},[68,147270,121174],{"class":74},[68,147272,27779],{"class":85},[170,147274,147275],{},"Fedora：",[58,147277,147279],{"className":25307,"code":147278,"language":25309,"meta":63,"style":63},"sudo dnf install python3 python3-pip\n",[65,147280,147281],{"__ignoreMap":63},[68,147282,147283,147285,147287,147289,147291],{"class":70,"line":71},[68,147284,26062],{"class":74},[68,147286,27801],{"class":1742},[68,147288,25319],{"class":1742},[68,147290,105878],{"class":1742},[68,147292,121239],{"class":1742},[170,147294,147295,147296,147298],{},"Linux 上通常使用 ",[65,147297,102354],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147300,147302],{"id":147301},"_14-pip包管理器","1.4 pip包管理器",[170,147304,147305,147307],{},[65,147306,25316],{}," 用来安装第三方库。",[58,147309,147311],{"className":25307,"code":147310,"language":25309,"meta":63,"style":63},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[65,147312,147313,147322,147331,147339,147345],{"__ignoreMap":63},[68,147314,147315,147317,147319],{"class":70,"line":71},[68,147316,25316],{"class":74},[68,147318,25319],{"class":1742},[68,147320,147321],{"class":1742}," requests\n",[68,147323,147324,147326,147329],{"class":70,"line":82},[68,147325,25316],{"class":74},[68,147327,147328],{"class":1742}," uninstall",[68,147330,147321],{"class":1742},[68,147332,147333,147335,147337],{"class":70,"line":98},[68,147334,25316],{"class":74},[68,147336,119048],{"class":1742},[68,147338,147321],{"class":1742},[68,147340,147341,147343],{"class":70,"line":104},[68,147342,25316],{"class":74},[68,147344,120429],{"class":1742},[68,147346,147347,147349],{"class":70,"line":112},[68,147348,25316],{"class":74},[68,147350,147351],{"class":1742}," freeze\n",[170,147353,147354],{},"国内网络较慢时可以临时使用镜像：",[58,147356,147358],{"className":25307,"code":147357,"language":25309,"meta":63,"style":63},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,147359,147360],{"__ignoreMap":63},[68,147361,147362,147364,147366,147369,147371],{"class":70,"line":71},[68,147363,25316],{"class":74},[68,147365,25319],{"class":1742},[68,147367,147368],{"class":1742}," requests",[68,147370,27916],{"class":85},[68,147372,121202],{"class":1742},[170,147374,147375],{},"常见第三方库：",[128,147377,147378,147387],{},[131,147379,147380],{},[134,147381,147382,147385],{},[137,147383,147384],{},"库",[137,147386,104171],{},[144,147388,147389,147397,147404,147412,147420,147428,147436],{},[134,147390,147391,147394],{},[149,147392,147393],{},"requests",[149,147395,147396],{},"网络请求",[134,147398,147399,147401],{},[149,147400,102101],{},[149,147402,147403],{},"数值计算",[134,147405,147406,147409],{},[149,147407,147408],{},"pandas",[149,147410,147411],{},"表格数据处理",[134,147413,147414,147417],{},[149,147415,147416],{},"matplotlib",[149,147418,147419],{},"绘图",[134,147421,147422,147425],{},[149,147423,147424],{},"pyecharts",[149,147426,147427],{},"ECharts 图表",[134,147429,147430,147433],{},[149,147431,147432],{},"flask",[149,147434,147435],{},"Web 后端",[134,147437,147438,147441],{},[149,147439,147440],{},"pytest",[149,147442,147443],{},"自动化测试",[14,147445,147447],{"id":147446},"_15-虚拟环境","1.5 虚拟环境",[170,147449,147450,147451,147454],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[65,147452,147453],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[170,147456,147457],{},"创建虚拟环境：",[58,147459,147461],{"className":25307,"code":147460,"language":25309,"meta":63,"style":63},"python -m venv .venv\n",[65,147462,147463],{"__ignoreMap":63},[68,147464,147465,147467,147469,147471],{"class":70,"line":71},[68,147466,31864],{"class":74},[68,147468,102357],{"class":85},[68,147470,102360],{"class":1742},[68,147472,102363],{"class":1742},[170,147474,147475],{},"Windows 激活：",[58,147477,147479],{"className":25307,"code":147478,"language":25309,"meta":63,"style":63},".venv\\Scripts\\activate\n",[65,147480,147481],{"__ignoreMap":63},[68,147482,147483],{"class":70,"line":71},[68,147484,147478],{"class":74},[170,147486,147487],{},"macOS\u002FLinux 激活：",[58,147489,147491],{"className":25307,"code":147490,"language":25309,"meta":63,"style":63},"source .venv\u002Fbin\u002Factivate\n",[65,147492,147493],{"__ignoreMap":63},[68,147494,147495,147497],{"class":70,"line":71},[68,147496,102368],{"class":85},[68,147498,102371],{"class":1742},[170,147500,147501],{},"退出虚拟环境：",[58,147503,147505],{"className":25307,"code":147504,"language":25309,"meta":63,"style":63},"deactivate\n",[65,147506,147507],{"__ignoreMap":63},[68,147508,147509],{"class":70,"line":71},[68,147510,147504],{"class":74},[170,147512,147513],{},"保存依赖：",[58,147515,147517],{"className":25307,"code":147516,"language":25309,"meta":63,"style":63},"pip freeze > requirements.txt\n",[65,147518,147519],{"__ignoreMap":63},[68,147520,147521,147523,147526,147528],{"class":70,"line":71},[68,147522,25316],{"class":74},[68,147524,147525],{"class":1742}," freeze",[68,147527,27708],{"class":316},[68,147529,147530],{"class":1742}," requirements.txt\n",[170,147532,147533],{},"安装依赖：",[58,147535,147537],{"className":25307,"code":147536,"language":25309,"meta":63,"style":63},"pip install -r requirements.txt\n",[65,147538,147539],{"__ignoreMap":63},[68,147540,147541,147543,147545,147547],{"class":70,"line":71},[68,147542,25316],{"class":74},[68,147544,25319],{"class":1742},[68,147546,121113],{"class":85},[68,147548,147530],{"class":1742},[14,147550,147552],{"id":147551},"_16-开发工具","1.6 开发工具",[19,147554,147556],{"id":147555},"_161-pycharm","1.6.1 PyCharm",[170,147558,147559],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[170,147561,123536],{},[263,147563,147564,147567,147570,147576,147579],{},[27,147565,147566],{},"New Project：创建项目。",[27,147568,147569],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[27,147571,147572,147573,127457],{},"New Python File：创建 ",[65,147574,147575],{},".py",[27,147577,147578],{},"Run：运行当前文件。",[27,147580,147581],{},"Debug：断点调试。",[19,147583,147585],{"id":147584},"_162-vs-code","1.6.2 VS Code",[170,147587,147588],{},"VS Code 轻量，适合后续多语言开发。",[170,147590,147591],{},"建议安装插件：",[263,147593,147594,147597,147600],{},[27,147595,147596],{},"Python。",[27,147598,147599],{},"Pylance。",[27,147601,147602],{},"Jupyter。",[170,147604,147605],{},"选择解释器：",[58,147607,147610],{"className":147608,"code":147609,"language":6676,"meta":63},[6674],"Ctrl + Shift + P -> Python: Select Interpreter\n",[65,147611,147609],{"__ignoreMap":63},[14,147613,147615],{"id":147614},"_17-第一个python程序","1.7 第一个Python程序",[170,147617,147618,147619,26104],{},"创建文件 ",[65,147620,147621],{},"hello.py",[58,147623,147625],{"className":31862,"code":147624,"language":31864,"meta":63,"style":63},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[65,147626,147627,147638],{"__ignoreMap":63},[68,147628,147629,147631,147633,147636],{"class":70,"line":71},[68,147630,31899],{"class":85},[68,147632,1640],{"class":78},[68,147634,147635],{"class":1742},"\"Hello World\"",[68,147637,1646],{"class":78},[68,147639,147640,147642,147644,147647],{"class":70,"line":82},[68,147641,31899],{"class":85},[68,147643,1640],{"class":78},[68,147645,147646],{"class":1742},"\"你好，Python\"",[68,147648,1646],{"class":78},[170,147650,147651],{},"在终端运行：",[58,147653,147655],{"className":25307,"code":147654,"language":25309,"meta":63,"style":63},"python hello.py\n",[65,147656,147657],{"__ignoreMap":63},[68,147658,147659,147661],{"class":70,"line":71},[68,147660,31864],{"class":74},[68,147662,147663],{"class":1742}," hello.py\n",[170,147665,147666],{},"或：",[58,147668,147670],{"className":25307,"code":147669,"language":25309,"meta":63,"style":63},"python3 hello.py\n",[65,147671,147672],{"__ignoreMap":63},[68,147673,147674,147676],{"class":70,"line":71},[68,147675,102354],{"class":74},[68,147677,147663],{"class":1742},[170,147679,147680],{},"输出：",[58,147682,147685],{"className":147683,"code":147684,"language":6676,"meta":63},[6674],"Hello World\n你好，Python\n",[65,147686,147684],{"__ignoreMap":63},[14,147688,147690],{"id":147689},"_18-print函数","1.8 print函数",[170,147692,147693,147696],{},[65,147694,147695],{},"print()"," 用来输出内容。",[58,147698,147700],{"className":31862,"code":147699,"language":31864,"meta":63,"style":63},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[65,147701,147702,147712,147722,147732],{"__ignoreMap":63},[68,147703,147704,147706,147708,147710],{"class":70,"line":71},[68,147705,31899],{"class":85},[68,147707,1640],{"class":78},[68,147709,7333],{"class":1742},[68,147711,1646],{"class":78},[68,147713,147714,147716,147718,147720],{"class":70,"line":82},[68,147715,31899],{"class":85},[68,147717,1640],{"class":78},[68,147719,1940],{"class":85},[68,147721,1646],{"class":78},[68,147723,147724,147726,147728,147730],{"class":70,"line":98},[68,147725,31899],{"class":85},[68,147727,1640],{"class":78},[68,147729,1688],{"class":85},[68,147731,1646],{"class":78},[68,147733,147734,147736,147738,147741,147743,147745],{"class":70,"line":104},[68,147735,31899],{"class":85},[68,147737,1640],{"class":78},[68,147739,147740],{"class":1742},"\"年龄:\"",[68,147742,13923],{"class":78},[68,147744,2278],{"class":85},[68,147746,1646],{"class":78},[170,147748,147749],{},"多个内容用逗号隔开，默认中间加空格：",[58,147751,147753],{"className":31862,"code":147752,"language":31864,"meta":63,"style":63},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[65,147754,147755,147765,147775],{"__ignoreMap":63},[68,147756,147757,147760,147762],{"class":70,"line":71},[68,147758,147759],{"class":78},"name ",[68,147761,1685],{"class":316},[68,147763,147764],{"class":1742}," \"张三\"\n",[68,147766,147767,147770,147772],{"class":70,"line":82},[68,147768,147769],{"class":78},"age ",[68,147771,1685],{"class":316},[68,147773,147774],{"class":85}," 18\n",[68,147776,147777,147779,147781,147784,147787,147789],{"class":70,"line":98},[68,147778,31899],{"class":85},[68,147780,1640],{"class":78},[68,147782,147783],{"class":1742},"\"姓名:\"",[68,147785,147786],{"class":78},", name, ",[68,147788,147740],{"class":1742},[68,147790,147791],{"class":78},", age)\n",[170,147793,147794],{},"修改分隔符：",[58,147796,147798],{"className":31862,"code":147797,"language":31864,"meta":63,"style":63},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[65,147799,147800],{"__ignoreMap":63},[68,147801,147802,147804,147806,147809,147811,147813,147815,147817,147819,147822,147824,147826],{"class":70,"line":71},[68,147803,31899],{"class":85},[68,147805,1640],{"class":78},[68,147807,147808],{"class":1742},"\"2024\"",[68,147810,13923],{"class":78},[68,147812,55797],{"class":1742},[68,147814,13923],{"class":78},[68,147816,55797],{"class":1742},[68,147818,13923],{"class":78},[68,147820,147821],{"class":6705},"sep",[68,147823,1685],{"class":316},[68,147825,33967],{"class":1742},[68,147827,1646],{"class":78},[170,147829,147830],{},"修改结尾符：",[58,147832,147834],{"className":31862,"code":147833,"language":31864,"meta":63,"style":63},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[65,147835,147836,147854],{"__ignoreMap":63},[68,147837,147838,147840,147842,147844,147846,147848,147850,147852],{"class":70,"line":71},[68,147839,31899],{"class":85},[68,147841,1640],{"class":78},[68,147843,7333],{"class":1742},[68,147845,13923],{"class":78},[68,147847,47285],{"class":6705},[68,147849,1685],{"class":316},[68,147851,5849],{"class":1742},[68,147853,1646],{"class":78},[68,147855,147856,147858,147860,147863],{"class":70,"line":82},[68,147857,31899],{"class":85},[68,147859,1640],{"class":78},[68,147861,147862],{"class":1742},"\"python\"",[68,147864,1646],{"class":78},[14,147866,147868],{"id":147867},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[170,147870,147871],{},"交互运行适合临时验证：",[58,147873,147875],{"className":31862,"code":147874,"language":31864,"meta":63,"style":63},">>> 10 * 3\n30\n",[65,147876,147877,147887],{"__ignoreMap":63},[68,147878,147879,147881,147883,147885],{"class":70,"line":71},[68,147880,147076],{"class":316},[68,147882,3528],{"class":85},[68,147884,8007],{"class":316},[68,147886,121510],{"class":85},[68,147888,147889],{"class":70,"line":82},[68,147890,147891],{"class":85},"30\n",[170,147893,147894],{},"脚本运行适合保存程序：",[58,147896,147898],{"className":31862,"code":147897,"language":31864,"meta":63,"style":63},"price = 8\ncount = 5\nprint(price * count)\n",[65,147899,147900,147910,147919],{"__ignoreMap":63},[68,147901,147902,147905,147907],{"class":70,"line":71},[68,147903,147904],{"class":78},"price ",[68,147906,1685],{"class":316},[68,147908,147909],{"class":85}," 8\n",[68,147911,147912,147915,147917],{"class":70,"line":82},[68,147913,147914],{"class":78},"count ",[68,147916,1685],{"class":316},[68,147918,55908],{"class":85},[68,147920,147921,147923,147926,147928],{"class":70,"line":98},[68,147922,31899],{"class":85},[68,147924,147925],{"class":78},"(price ",[68,147927,2083],{"class":316},[68,147929,147930],{"class":78}," count)\n",[170,147932,147933],{},"实际学习中推荐：",[263,147935,147936,147939,147944],{},[27,147937,147938],{},"临时试一个语法，用交互模式。",[27,147940,147941,147942,127457],{},"写完整练习，用 ",[65,147943,147575],{},[27,147945,147946],{},"写项目，用独立目录和虚拟环境。",[14,147948,147950],{"id":147949},"_110-常见错误","1.10 常见错误",[19,147952,147954],{"id":147953},"_1101-命令找不到","1.10.1 命令找不到",[58,147956,147959],{"className":147957,"code":147958,"language":6676,"meta":63},[6674],"python: command not found\n",[65,147960,147958],{"__ignoreMap":63},[170,147962,147963],{},"原因：",[263,147965,147966,147969,147972],{},[27,147967,147968],{},"没安装 Python。",[27,147970,147971],{},"PATH 没配置。",[27,147973,147974,147975,29869],{},"Linux\u002FmacOS 应该使用 ",[65,147976,102354],{},[19,147978,147980],{"id":147979},"_1102-文件名冲突","1.10.2 文件名冲突",[170,147982,147983],{},"不要把文件命名为：",[58,147985,147988],{"className":147986,"code":147987,"language":6676,"meta":63},[6674],"random.py\njson.py\ntime.py\nrequests.py\n",[65,147989,147987],{"__ignoreMap":63},[170,147991,147992],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,147994,147996],{"id":147995},"_1103-中文乱码","1.10.3 中文乱码",[170,147998,147999],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[170,148001,148002],{},"如果读写文件出现乱码，要明确指定编码：",[58,148004,148006],{"className":31862,"code":148005,"language":31864,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[65,148007,148008,148042],{"__ignoreMap":63},[68,148009,148010,148012,148015,148017,148020,148022,148025,148027,148030,148032,148035,148037,148039],{"class":70,"line":71},[68,148011,109307],{"class":316},[68,148013,148014],{"class":85}," open",[68,148016,1640],{"class":78},[68,148018,148019],{"class":1742},"\"data.txt\"",[68,148021,13923],{"class":78},[68,148023,148024],{"class":1742},"\"r\"",[68,148026,13923],{"class":78},[68,148028,148029],{"class":6705},"encoding",[68,148031,1685],{"class":316},[68,148033,148034],{"class":1742},"\"utf-8\"",[68,148036,15202],{"class":78},[68,148038,32867],{"class":316},[68,148040,148041],{"class":78}," f:\n",[68,148043,148044,148047,148049],{"class":70,"line":82},[68,148045,148046],{"class":78},"    content ",[68,148048,1685],{"class":316},[68,148050,148051],{"class":78}," f.read()\n",[14,148053,148055],{"id":148054},"_111-本章练习","1.11 本章练习",[263,148057,148058,148061,148067],{},[27,148059,148060],{},"安装 Python，并在终端输出版本号。",[27,148062,148063,148064,148066],{},"新建 ",[65,148065,147621],{},"，输出自己的姓名、年龄、学习目标。",[27,148068,105841,148069,148071],{},[65,148070,147695],{}," 输出下面格式：",[58,148073,148076],{"className":148074,"code":148075,"language":6676,"meta":63},[6674],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[65,148077,148075],{"__ignoreMap":63},[263,148079,148080],{"start":104},[27,148081,105841,148082,148084],{},[65,148083,147821],{}," 输出日期：",[58,148086,148089],{"className":148087,"code":148088,"language":6676,"meta":63},[6674],"2024-10-10\n",[65,148090,148088],{"__ignoreMap":63},[263,148092,148093],{"start":112},[27,148094,105841,148095,148097,148098,148100],{},[65,148096,47285],{}," 让两次 ",[65,148099,147695],{}," 输出在同一行。",[1553,148102,148103],{},"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":63,"searchDepth":82,"depth":82,"links":148105},[148106,148107,148108,148113,148114,148115,148119,148120,148121,148122,148127],{"id":146988,"depth":82,"text":146989},{"id":147032,"depth":82,"text":147033},{"id":147133,"depth":82,"text":147134,"children":148109},[148110,148111,148112],{"id":147137,"depth":98,"text":147138},{"id":147192,"depth":98,"text":147193},{"id":147228,"depth":98,"text":147229},{"id":147301,"depth":82,"text":147302},{"id":147446,"depth":82,"text":147447},{"id":147551,"depth":82,"text":147552,"children":148116},[148117,148118],{"id":147555,"depth":98,"text":147556},{"id":147584,"depth":98,"text":147585},{"id":147614,"depth":82,"text":147615},{"id":147689,"depth":82,"text":147690},{"id":147867,"depth":82,"text":147868},{"id":147949,"depth":82,"text":147950,"children":148123},[148124,148125,148126],{"id":147953,"depth":98,"text":147954},{"id":147979,"depth":98,"text":147980},{"id":147995,"depth":98,"text":147996},{"id":148054,"depth":82,"text":148055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146980,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148134,"title":148135,"body":148136,"description":1564,"extension":1565,"meta":150540,"navigation":1567,"path":150541,"seo":150542,"stem":150543,"__hash__":150544},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148137,"toc":150525},[148138,148141,148145,148148,148151,148168,148171,148213,148216,148220,148223,148226,148263,148266,148300,148303,148395,148399,148413,148416,148443,148446,148450,148553,148560,148563,148580,148584,148591,148780,148783,148856,148860,148863,148947,148950,148982,148986,149190,149193,149197,149203,149305,149308,149564,149568,149571,149574,149588,149590,149776,149780,150142,150148,150152,150155,150279,150282,150461,150464,150468,150501,150505,150522],[10,148139,148135],{"id":148140},"_10-json与pyecharts折线图",[14,148142,148144],{"id":148143},"_101-数据可视化","10.1 数据可视化",[170,148146,148147],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[170,148149,148150],{},"常见图表：",[263,148152,148153,148156,148159,148162,148165],{},[27,148154,148155],{},"折线图：看趋势。",[27,148157,148158],{},"柱状图：看分类对比。",[27,148160,148161],{},"饼图：看占比。",[27,148163,148164],{},"地图：看地域分布。",[27,148166,148167],{},"散点图：看两个变量之间的关系。",[170,148169,148170],{},"Python 可视化常用库：",[128,148172,148173,148181],{},[131,148174,148175],{},[134,148176,148177,148179],{},[137,148178,147384],{},[137,148180,25225],{},[144,148182,148183,148190,148198,148205],{},[134,148184,148185,148187],{},[149,148186,147416],{},[149,148188,148189],{},"基础、经典、可定制",[134,148191,148192,148195],{},[149,148193,148194],{},"seaborn",[149,148196,148197],{},"统计图表更美观",[134,148199,148200,148202],{},[149,148201,147424],{},[149,148203,148204],{},"生成交互式网页图表",[134,148206,148207,148210],{},[149,148208,148209],{},"plotly",[149,148211,148212],{},"交互图表能力强",[170,148214,148215],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148217,148219],{"id":148218},"_102-json回顾","10.2 JSON回顾",[170,148221,148222],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[170,148224,148225],{},"Python 字典：",[58,148227,148229],{"className":31862,"code":148228,"language":31864,"meta":63,"style":63},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[65,148230,148231,148239,148250,148259],{"__ignoreMap":63},[68,148232,148233,148235,148237],{"class":70,"line":71},[68,148234,103133],{"class":78},[68,148236,1685],{"class":316},[68,148238,79],{"class":78},[68,148240,148241,148244,148246,148248],{"class":70,"line":82},[68,148242,148243],{"class":1742},"    \"name\"",[68,148245,89],{"class":78},[68,148247,70747],{"class":1742},[68,148249,32950],{"class":78},[68,148251,148252,148255,148257],{"class":70,"line":98},[68,148253,148254],{"class":1742},"    \"value\"",[68,148256,89],{"class":78},[68,148258,98933],{"class":85},[68,148260,148261],{"class":70,"line":104},[68,148262,101],{"class":78},[170,148264,148265],{},"JSON 字符串：",[58,148267,148270],{"className":148268,"code":148269,"language":147015,"meta":63,"style":63},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[65,148271,148272,148276,148287,148296],{"__ignoreMap":63},[68,148273,148274],{"class":70,"line":71},[68,148275,3038],{"class":78},[68,148277,148278,148281,148283,148285],{"class":70,"line":82},[68,148279,148280],{"class":85},"  \"name\"",[68,148282,89],{"class":78},[68,148284,70747],{"class":1742},[68,148286,32950],{"class":78},[68,148288,148289,148292,148294],{"class":70,"line":98},[68,148290,148291],{"class":85},"  \"value\"",[68,148293,89],{"class":78},[68,148295,98933],{"class":85},[68,148297,148298],{"class":70,"line":104},[68,148299,101],{"class":78},[170,148301,148302],{},"Python 与 JSON 的转换：",[58,148304,148306],{"className":31862,"code":148305,"language":31864,"meta":63,"style":63},"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",[65,148307,148308,148315,148319,148344,148348,148367,148374,148378,148388],{"__ignoreMap":63},[68,148309,148310,148312],{"class":70,"line":71},[68,148311,31876],{"class":316},[68,148313,148314],{"class":78}," json\n",[68,148316,148317],{"class":70,"line":82},[68,148318,3890],{"emptyLinePlaceholder":1567},[68,148320,148321,148323,148325,148327,148329,148331,148333,148335,148338,148340,148342],{"class":70,"line":98},[68,148322,103133],{"class":78},[68,148324,1685],{"class":316},[68,148326,5938],{"class":78},[68,148328,64157],{"class":1742},[68,148330,89],{"class":78},[68,148332,70747],{"class":1742},[68,148334,13923],{"class":78},[68,148336,148337],{"class":1742},"\"value\"",[68,148339,89],{"class":78},[68,148341,1940],{"class":85},[68,148343,101],{"class":78},[68,148345,148346],{"class":70,"line":104},[68,148347,3890],{"emptyLinePlaceholder":1567},[68,148349,148350,148353,148355,148358,148361,148363,148365],{"class":70,"line":112},[68,148351,148352],{"class":78},"json_text ",[68,148354,1685],{"class":316},[68,148356,148357],{"class":78}," json.dumps(data, ",[68,148359,148360],{"class":6705},"ensure_ascii",[68,148362,1685],{"class":316},[68,148364,35471],{"class":85},[68,148366,1646],{"class":78},[68,148368,148369,148371],{"class":70,"line":124},[68,148370,31899],{"class":85},[68,148372,148373],{"class":78},"(json_text)\n",[68,148375,148376],{"class":70,"line":1496},[68,148377,3890],{"emptyLinePlaceholder":1567},[68,148379,148380,148383,148385],{"class":70,"line":1502},[68,148381,148382],{"class":78},"new_data ",[68,148384,1685],{"class":316},[68,148386,148387],{"class":78}," json.loads(json_text)\n",[68,148389,148390,148392],{"class":70,"line":1510},[68,148391,31899],{"class":85},[68,148393,148394],{"class":78},"(new_data)\n",[14,148396,148398],{"id":148397},"_103-安装pyecharts","10.3 安装pyecharts",[58,148400,148402],{"className":25307,"code":148401,"language":25309,"meta":63,"style":63},"pip install pyecharts\n",[65,148403,148404],{"__ignoreMap":63},[68,148405,148406,148408,148410],{"class":70,"line":71},[68,148407,25316],{"class":74},[68,148409,25319],{"class":1742},[68,148411,148412],{"class":1742}," pyecharts\n",[170,148414,148415],{},"验证：",[58,148417,148419],{"className":31862,"code":148418,"language":31864,"meta":63,"style":63},"import pyecharts\n\nprint(pyecharts.__version__)\n",[65,148420,148421,148427,148431],{"__ignoreMap":63},[68,148422,148423,148425],{"class":70,"line":71},[68,148424,31876],{"class":316},[68,148426,148412],{"class":78},[68,148428,148429],{"class":70,"line":82},[68,148430,3890],{"emptyLinePlaceholder":1567},[68,148432,148433,148435,148438,148441],{"class":70,"line":98},[68,148434,31899],{"class":85},[68,148436,148437],{"class":78},"(pyecharts.",[68,148439,148440],{"class":85},"__version__",[68,148442,1646],{"class":78},[170,148444,148445],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148447,148449],{"id":148448},"_104-第一个折线图","10.4 第一个折线图",[58,148451,148453],{"className":31862,"code":148452,"language":31864,"meta":63,"style":63},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[65,148454,148455,148467,148471,148481,148511,148543],{"__ignoreMap":63},[68,148456,148457,148459,148462,148464],{"class":70,"line":71},[68,148458,32221],{"class":316},[68,148460,148461],{"class":78}," pyecharts.charts ",[68,148463,31876],{"class":316},[68,148465,148466],{"class":78}," Line\n",[68,148468,148469],{"class":70,"line":82},[68,148470,3890],{"emptyLinePlaceholder":1567},[68,148472,148473,148476,148478],{"class":70,"line":98},[68,148474,148475],{"class":78},"line ",[68,148477,1685],{"class":316},[68,148479,148480],{"class":78}," Line()\n",[68,148482,148483,148486,148489,148491,148494,148496,148499,148501,148504,148506,148509],{"class":70,"line":104},[68,148484,148485],{"class":78},"line.add_xaxis([",[68,148487,148488],{"class":1742},"\"周一\"",[68,148490,13923],{"class":78},[68,148492,148493],{"class":1742},"\"周二\"",[68,148495,13923],{"class":78},[68,148497,148498],{"class":1742},"\"周三\"",[68,148500,13923],{"class":78},[68,148502,148503],{"class":1742},"\"周四\"",[68,148505,13923],{"class":78},[68,148507,148508],{"class":1742},"\"周五\"",[68,148510,6147],{"class":78},[68,148512,148513,148516,148519,148521,148523,148525,148527,148529,148531,148533,148536,148538,148541],{"class":70,"line":112},[68,148514,148515],{"class":78},"line.add_yaxis(",[68,148517,148518],{"class":1742},"\"销售额\"",[68,148520,78995],{"class":78},[68,148522,1940],{"class":85},[68,148524,13923],{"class":78},[68,148526,2444],{"class":85},[68,148528,13923],{"class":78},[68,148530,2489],{"class":85},[68,148532,13923],{"class":78},[68,148534,148535],{"class":85},"150",[68,148537,13923],{"class":78},[68,148539,148540],{"class":85},"180",[68,148542,6147],{"class":78},[68,148544,148545,148548,148551],{"class":70,"line":124},[68,148546,148547],{"class":78},"line.render(",[68,148549,148550],{"class":1742},"\"line.html\"",[68,148552,1646],{"class":78},[170,148554,148555,148556,148559],{},"运行后会生成 ",[65,148557,148558],{},"line.html","，用浏览器打开即可看到图表。",[170,148561,148562],{},"核心步骤：",[263,148564,148565,148568,148571,148574,148577],{},[27,148566,148567],{},"导入图表类。",[27,148569,148570],{},"创建图表对象。",[27,148572,148573],{},"添加 x 轴数据。",[27,148575,148576],{},"添加 y 轴数据。",[27,148578,148579],{},"渲染为 HTML。",[14,148581,148583],{"id":148582},"_105-全局配置","10.5 全局配置",[170,148585,148586,148587,148590],{},"常用配置在 ",[65,148588,148589],{},"pyecharts.options"," 中。",[58,148592,148594],{"className":31862,"code":148593,"language":31864,"meta":63,"style":63},"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",[65,148595,148596,148613,148623,148627,148635,148659,148687,148692,148711,148730,148748,148768,148772],{"__ignoreMap":63},[68,148597,148598,148600,148603,148605,148608,148610],{"class":70,"line":71},[68,148599,32221],{"class":316},[68,148601,148602],{"class":78}," pyecharts ",[68,148604,31876],{"class":316},[68,148606,148607],{"class":78}," options ",[68,148609,32867],{"class":316},[68,148611,148612],{"class":78}," opts\n",[68,148614,148615,148617,148619,148621],{"class":70,"line":82},[68,148616,32221],{"class":316},[68,148618,148461],{"class":78},[68,148620,31876],{"class":316},[68,148622,148466],{"class":78},[68,148624,148625],{"class":70,"line":98},[68,148626,3890],{"emptyLinePlaceholder":1567},[68,148628,148629,148631,148633],{"class":70,"line":104},[68,148630,148475],{"class":78},[68,148632,1685],{"class":316},[68,148634,148480],{"class":78},[68,148636,148637,148639,148641,148643,148645,148647,148649,148651,148653,148655,148657],{"class":70,"line":112},[68,148638,148485],{"class":78},[68,148640,148488],{"class":1742},[68,148642,13923],{"class":78},[68,148644,148493],{"class":1742},[68,148646,13923],{"class":78},[68,148648,148498],{"class":1742},[68,148650,13923],{"class":78},[68,148652,148503],{"class":1742},[68,148654,13923],{"class":78},[68,148656,148508],{"class":1742},[68,148658,6147],{"class":78},[68,148660,148661,148663,148665,148667,148669,148671,148673,148675,148677,148679,148681,148683,148685],{"class":70,"line":124},[68,148662,148515],{"class":78},[68,148664,148518],{"class":1742},[68,148666,78995],{"class":78},[68,148668,1940],{"class":85},[68,148670,13923],{"class":78},[68,148672,2444],{"class":85},[68,148674,13923],{"class":78},[68,148676,2489],{"class":85},[68,148678,13923],{"class":78},[68,148680,148535],{"class":85},[68,148682,13923],{"class":78},[68,148684,148540],{"class":85},[68,148686,6147],{"class":78},[68,148688,148689],{"class":70,"line":1496},[68,148690,148691],{"class":78},"line.set_global_opts(\n",[68,148693,148694,148697,148699,148702,148704,148706,148709],{"class":70,"line":1502},[68,148695,148696],{"class":6705},"    title_opts",[68,148698,1685],{"class":316},[68,148700,148701],{"class":78},"opts.TitleOpts(",[68,148703,52891],{"class":6705},[68,148705,1685],{"class":316},[68,148707,148708],{"class":1742},"\"一周销售额\"",[68,148710,39531],{"class":78},[68,148712,148713,148716,148718,148721,148723,148725,148728],{"class":70,"line":1510},[68,148714,148715],{"class":6705},"    xaxis_opts",[68,148717,1685],{"class":316},[68,148719,148720],{"class":78},"opts.AxisOpts(",[68,148722,81287],{"class":6705},[68,148724,1685],{"class":316},[68,148726,148727],{"class":1742},"\"日期\"",[68,148729,39531],{"class":78},[68,148731,148732,148735,148737,148739,148741,148743,148746],{"class":70,"line":1521},[68,148733,148734],{"class":6705},"    yaxis_opts",[68,148736,1685],{"class":316},[68,148738,148720],{"class":78},[68,148740,81287],{"class":6705},[68,148742,1685],{"class":316},[68,148744,148745],{"class":1742},"\"金额\"",[68,148747,39531],{"class":78},[68,148749,148750,148753,148755,148758,148761,148763,148766],{"class":70,"line":3103},[68,148751,148752],{"class":6705},"    tooltip_opts",[68,148754,1685],{"class":316},[68,148756,148757],{"class":78},"opts.TooltipOpts(",[68,148759,148760],{"class":6705},"trigger",[68,148762,1685],{"class":316},[68,148764,148765],{"class":1742},"\"axis\"",[68,148767,39531],{"class":78},[68,148769,148770],{"class":70,"line":3108},[68,148771,1646],{"class":78},[68,148773,148774,148776,148778],{"class":70,"line":3114},[68,148775,148547],{"class":78},[68,148777,148550],{"class":1742},[68,148779,1646],{"class":78},[170,148781,148782],{},"常见全局配置：",[128,148784,148785,148794],{},[131,148786,148787],{},[134,148788,148789,148792],{},[137,148790,148791],{},"配置",[137,148793,104171],{},[144,148795,148796,148806,148816,148826,148836,148846],{},[134,148797,148798,148803],{},[149,148799,148800],{},[65,148801,148802],{},"TitleOpts",[149,148804,148805],{},"标题",[134,148807,148808,148813],{},[149,148809,148810],{},[65,148811,148812],{},"LegendOpts",[149,148814,148815],{},"图例",[134,148817,148818,148823],{},[149,148819,148820],{},[65,148821,148822],{},"TooltipOpts",[149,148824,148825],{},"提示框",[134,148827,148828,148833],{},[149,148829,148830],{},[65,148831,148832],{},"AxisOpts",[149,148834,148835],{},"坐标轴",[134,148837,148838,148843],{},[149,148839,148840],{},[65,148841,148842],{},"VisualMapOpts",[149,148844,148845],{},"视觉映射",[134,148847,148848,148853],{},[149,148849,148850],{},[65,148851,148852],{},"DataZoomOpts",[149,148854,148855],{},"区域缩放",[14,148857,148859],{"id":148858},"_106-系列配置","10.6 系列配置",[170,148861,148862],{},"系列配置作用于某一组数据。",[58,148864,148866],{"className":31862,"code":148865,"language":31864,"meta":63,"style":63},"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",[65,148867,148868,148873,148884,148913,148924,148943],{"__ignoreMap":63},[68,148869,148870],{"class":70,"line":71},[68,148871,148872],{"class":78},"line.add_yaxis(\n",[68,148874,148875,148878,148880,148882],{"class":70,"line":82},[68,148876,148877],{"class":6705},"    series_name",[68,148879,1685],{"class":316},[68,148881,148518],{"class":1742},[68,148883,32950],{"class":78},[68,148885,148886,148889,148891,148893,148895,148897,148899,148901,148903,148905,148907,148909,148911],{"class":70,"line":98},[68,148887,148888],{"class":6705},"    y_axis",[68,148890,1685],{"class":316},[68,148892,2517],{"class":78},[68,148894,1940],{"class":85},[68,148896,13923],{"class":78},[68,148898,2444],{"class":85},[68,148900,13923],{"class":78},[68,148902,2489],{"class":85},[68,148904,13923],{"class":78},[68,148906,148535],{"class":85},[68,148908,13923],{"class":78},[68,148910,148540],{"class":85},[68,148912,89311],{"class":78},[68,148914,148915,148918,148920,148922],{"class":70,"line":104},[68,148916,148917],{"class":6705},"    is_smooth",[68,148919,1685],{"class":316},[68,148921,32960],{"class":85},[68,148923,32950],{"class":78},[68,148925,148926,148929,148931,148934,148937,148939,148941],{"class":70,"line":112},[68,148927,148928],{"class":6705},"    label_opts",[68,148930,1685],{"class":316},[68,148932,148933],{"class":78},"opts.LabelOpts(",[68,148935,148936],{"class":6705},"is_show",[68,148938,1685],{"class":316},[68,148940,32960],{"class":85},[68,148942,39531],{"class":78},[68,148944,148945],{"class":70,"line":124},[68,148946,1646],{"class":78},[170,148948,148949],{},"常用参数：",[263,148951,148952,148958,148964,148970,148976],{},[27,148953,148954,148957],{},[65,148955,148956],{},"series_name","：系列名称。",[27,148959,148960,148963],{},[65,148961,148962],{},"y_axis","：y 轴数据。",[27,148965,148966,148969],{},[65,148967,148968],{},"is_smooth","：是否平滑曲线。",[27,148971,148972,148975],{},[65,148973,148974],{},"label_opts","：标签配置。",[27,148977,148978,148981],{},[65,148979,148980],{},"symbol_size","：标记点大小。",[14,148983,148985],{"id":148984},"_107-多条折线","10.7 多条折线",[58,148987,148989],{"className":31862,"code":148988,"language":31864,"meta":63,"style":63},"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",[65,148990,148991,149005,149015,149019,149048,149052,149060,149065,149103,149140,149144,149161,149177,149181],{"__ignoreMap":63},[68,148992,148993,148995,148997,148999,149001,149003],{"class":70,"line":71},[68,148994,32221],{"class":316},[68,148996,148602],{"class":78},[68,148998,31876],{"class":316},[68,149000,148607],{"class":78},[68,149002,32867],{"class":316},[68,149004,148612],{"class":78},[68,149006,149007,149009,149011,149013],{"class":70,"line":82},[68,149008,32221],{"class":316},[68,149010,148461],{"class":78},[68,149012,31876],{"class":316},[68,149014,148466],{"class":78},[68,149016,149017],{"class":70,"line":98},[68,149018,3890],{"emptyLinePlaceholder":1567},[68,149020,149021,149024,149026,149028,149030,149032,149034,149036,149038,149040,149042,149044,149046],{"class":70,"line":104},[68,149022,149023],{"class":78},"dates ",[68,149025,1685],{"class":316},[68,149027,53708],{"class":78},[68,149029,148488],{"class":1742},[68,149031,13923],{"class":78},[68,149033,148493],{"class":1742},[68,149035,13923],{"class":78},[68,149037,148498],{"class":1742},[68,149039,13923],{"class":78},[68,149041,148503],{"class":1742},[68,149043,13923],{"class":78},[68,149045,148508],{"class":1742},[68,149047,34730],{"class":78},[68,149049,149050],{"class":70,"line":112},[68,149051,3890],{"emptyLinePlaceholder":1567},[68,149053,149054,149056,149058],{"class":70,"line":124},[68,149055,148475],{"class":78},[68,149057,1685],{"class":316},[68,149059,148480],{"class":78},[68,149061,149062],{"class":70,"line":1496},[68,149063,149064],{"class":78},"line.add_xaxis(dates)\n",[68,149066,149067,149069,149072,149074,149076,149078,149081,149083,149085,149087,149089,149091,149093,149095,149097,149099,149101],{"class":70,"line":1502},[68,149068,148515],{"class":78},[68,149070,149071],{"class":1742},"\"线上销售\"",[68,149073,78995],{"class":78},[68,149075,1940],{"class":85},[68,149077,13923],{"class":78},[68,149079,149080],{"class":85},"130",[68,149082,13923],{"class":78},[68,149084,2444],{"class":85},[68,149086,13923],{"class":78},[68,149088,22535],{"class":85},[68,149090,13923],{"class":78},[68,149092,3213],{"class":85},[68,149094,113676],{"class":78},[68,149096,148968],{"class":6705},[68,149098,1685],{"class":316},[68,149100,32960],{"class":85},[68,149102,1646],{"class":78},[68,149104,149105,149107,149110,149112,149114,149116,149118,149120,149122,149124,149126,149128,149130,149132,149134,149136,149138],{"class":70,"line":1510},[68,149106,148515],{"class":78},[68,149108,149109],{"class":1742},"\"线下销售\"",[68,149111,78995],{"class":78},[68,149113,2240],{"class":85},[68,149115,13923],{"class":78},[68,149117,2489],{"class":85},[68,149119,13923],{"class":78},[68,149121,1940],{"class":85},[68,149123,13923],{"class":78},[68,149125,2444],{"class":85},[68,149127,13923],{"class":78},[68,149129,148535],{"class":85},[68,149131,113676],{"class":78},[68,149133,148968],{"class":6705},[68,149135,1685],{"class":316},[68,149137,32960],{"class":85},[68,149139,1646],{"class":78},[68,149141,149142],{"class":70,"line":1521},[68,149143,148691],{"class":78},[68,149145,149146,149148,149150,149152,149154,149156,149159],{"class":70,"line":3103},[68,149147,148696],{"class":6705},[68,149149,1685],{"class":316},[68,149151,148701],{"class":78},[68,149153,52891],{"class":6705},[68,149155,1685],{"class":316},[68,149157,149158],{"class":1742},"\"线上线下销售趋势\"",[68,149160,39531],{"class":78},[68,149162,149163,149165,149167,149169,149171,149173,149175],{"class":70,"line":3108},[68,149164,148752],{"class":6705},[68,149166,1685],{"class":316},[68,149168,148757],{"class":78},[68,149170,148760],{"class":6705},[68,149172,1685],{"class":316},[68,149174,148765],{"class":1742},[68,149176,39531],{"class":78},[68,149178,149179],{"class":70,"line":3114},[68,149180,1646],{"class":78},[68,149182,149183,149185,149188],{"class":70,"line":3119},[68,149184,148547],{"class":78},[68,149186,149187],{"class":1742},"\"sales.html\"",[68,149189,1646],{"class":78},[170,149191,149192],{},"多条折线适合比较不同指标或不同地区。",[14,149194,149196],{"id":149195},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[170,149198,149199,149200,26104],{},"假设 ",[65,149201,149202],{},"sales.json",[58,149204,149206],{"className":148268,"code":149205,"language":147015,"meta":63,"style":63},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[65,149207,149208,149213,149245,149273,149301],{"__ignoreMap":63},[68,149209,149210],{"class":70,"line":71},[68,149211,149212],{"class":78},"[\n",[68,149214,149215,149218,149221,149223,149225,149227,149230,149232,149234,149236,149239,149241,149243],{"class":70,"line":82},[68,149216,149217],{"class":78},"  {",[68,149219,149220],{"class":85},"\"date\"",[68,149222,89],{"class":78},[68,149224,148488],{"class":1742},[68,149226,13923],{"class":78},[68,149228,149229],{"class":85},"\"online\"",[68,149231,89],{"class":78},[68,149233,1940],{"class":85},[68,149235,13923],{"class":78},[68,149237,149238],{"class":85},"\"offline\"",[68,149240,89],{"class":78},[68,149242,2240],{"class":85},[68,149244,6420],{"class":78},[68,149246,149247,149249,149251,149253,149255,149257,149259,149261,149263,149265,149267,149269,149271],{"class":70,"line":98},[68,149248,149217],{"class":78},[68,149250,149220],{"class":85},[68,149252,89],{"class":78},[68,149254,148493],{"class":1742},[68,149256,13923],{"class":78},[68,149258,149229],{"class":85},[68,149260,89],{"class":78},[68,149262,149080],{"class":85},[68,149264,13923],{"class":78},[68,149266,149238],{"class":85},[68,149268,89],{"class":78},[68,149270,2489],{"class":85},[68,149272,6420],{"class":78},[68,149274,149275,149277,149279,149281,149283,149285,149287,149289,149291,149293,149295,149297,149299],{"class":70,"line":104},[68,149276,149217],{"class":78},[68,149278,149220],{"class":85},[68,149280,89],{"class":78},[68,149282,148498],{"class":1742},[68,149284,13923],{"class":78},[68,149286,149229],{"class":85},[68,149288,89],{"class":78},[68,149290,2444],{"class":85},[68,149292,13923],{"class":78},[68,149294,149238],{"class":85},[68,149296,89],{"class":78},[68,149298,1940],{"class":85},[68,149300,101],{"class":78},[68,149302,149303],{"class":70,"line":112},[68,149304,34730],{"class":78},[170,149306,149307],{},"读取并绘图：",[58,149309,149311],{"className":31862,"code":149310,"language":31864,"meta":63,"style":63},"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",[65,149312,149313,149319,149333,149343,149347,149379,149392,149396,149404,149413,149422,149426,149438,149447,149456,149465,149469,149477,149481,149498,149515,149519,149536,149552,149556],{"__ignoreMap":63},[68,149314,149315,149317],{"class":70,"line":71},[68,149316,31876],{"class":316},[68,149318,148314],{"class":78},[68,149320,149321,149323,149325,149327,149329,149331],{"class":70,"line":82},[68,149322,32221],{"class":316},[68,149324,148602],{"class":78},[68,149326,31876],{"class":316},[68,149328,148607],{"class":78},[68,149330,32867],{"class":316},[68,149332,148612],{"class":78},[68,149334,149335,149337,149339,149341],{"class":70,"line":98},[68,149336,32221],{"class":316},[68,149338,148461],{"class":78},[68,149340,31876],{"class":316},[68,149342,148466],{"class":78},[68,149344,149345],{"class":70,"line":104},[68,149346,3890],{"emptyLinePlaceholder":1567},[68,149348,149349,149351,149353,149355,149358,149360,149362,149364,149366,149368,149370,149372,149374,149377],{"class":70,"line":112},[68,149350,109307],{"class":316},[68,149352,148014],{"class":85},[68,149354,1640],{"class":78},[68,149356,149357],{"class":1742},"\"sales.json\"",[68,149359,13923],{"class":78},[68,149361,148024],{"class":1742},[68,149363,13923],{"class":78},[68,149365,148029],{"class":6705},[68,149367,1685],{"class":316},[68,149369,148034],{"class":1742},[68,149371,15202],{"class":78},[68,149373,32867],{"class":316},[68,149375,149376],{"class":6705}," file",[68,149378,5229],{"class":78},[68,149380,149381,149383,149385,149388,149390],{"class":70,"line":124},[68,149382,102896],{"class":78},[68,149384,1685],{"class":316},[68,149386,149387],{"class":78}," json.load(",[68,149389,46838],{"class":6705},[68,149391,1646],{"class":78},[68,149393,149394],{"class":70,"line":1496},[68,149395,3890],{"emptyLinePlaceholder":1567},[68,149397,149398,149400,149402],{"class":70,"line":1502},[68,149399,149023],{"class":78},[68,149401,1685],{"class":316},[68,149403,53320],{"class":78},[68,149405,149406,149409,149411],{"class":70,"line":1510},[68,149407,149408],{"class":78},"online_sales ",[68,149410,1685],{"class":316},[68,149412,53320],{"class":78},[68,149414,149415,149418,149420],{"class":70,"line":1521},[68,149416,149417],{"class":78},"offline_sales ",[68,149419,1685],{"class":316},[68,149421,53320],{"class":78},[68,149423,149424],{"class":70,"line":3103},[68,149425,3890],{"emptyLinePlaceholder":1567},[68,149427,149428,149430,149433,149435],{"class":70,"line":3108},[68,149429,4515],{"class":316},[68,149431,149432],{"class":78}," item ",[68,149434,27529],{"class":316},[68,149436,149437],{"class":78}," data:\n",[68,149439,149440,149443,149445],{"class":70,"line":3114},[68,149441,149442],{"class":78},"    dates.append(item[",[68,149444,149220],{"class":1742},[68,149446,6147],{"class":78},[68,149448,149449,149452,149454],{"class":70,"line":3119},[68,149450,149451],{"class":78},"    online_sales.append(item[",[68,149453,149229],{"class":1742},[68,149455,6147],{"class":78},[68,149457,149458,149461,149463],{"class":70,"line":3133},[68,149459,149460],{"class":78},"    offline_sales.append(item[",[68,149462,149238],{"class":1742},[68,149464,6147],{"class":78},[68,149466,149467],{"class":70,"line":3138},[68,149468,3890],{"emptyLinePlaceholder":1567},[68,149470,149471,149473,149475],{"class":70,"line":3144},[68,149472,148475],{"class":78},[68,149474,1685],{"class":316},[68,149476,148480],{"class":78},[68,149478,149479],{"class":70,"line":3165},[68,149480,149064],{"class":78},[68,149482,149483,149485,149487,149490,149492,149494,149496],{"class":70,"line":3170},[68,149484,148515],{"class":78},[68,149486,149071],{"class":1742},[68,149488,149489],{"class":78},", online_sales, ",[68,149491,148968],{"class":6705},[68,149493,1685],{"class":316},[68,149495,32960],{"class":85},[68,149497,1646],{"class":78},[68,149499,149500,149502,149504,149507,149509,149511,149513],{"class":70,"line":3184},[68,149501,148515],{"class":78},[68,149503,149109],{"class":1742},[68,149505,149506],{"class":78},", offline_sales, ",[68,149508,148968],{"class":6705},[68,149510,1685],{"class":316},[68,149512,32960],{"class":85},[68,149514,1646],{"class":78},[68,149516,149517],{"class":70,"line":3189},[68,149518,148691],{"class":78},[68,149520,149521,149523,149525,149527,149529,149531,149534],{"class":70,"line":3218},[68,149522,148696],{"class":6705},[68,149524,1685],{"class":316},[68,149526,148701],{"class":78},[68,149528,52891],{"class":6705},[68,149530,1685],{"class":316},[68,149532,149533],{"class":1742},"\"销售趋势\"",[68,149535,39531],{"class":78},[68,149537,149538,149540,149542,149544,149546,149548,149550],{"class":70,"line":3223},[68,149539,148752],{"class":6705},[68,149541,1685],{"class":316},[68,149543,148757],{"class":78},[68,149545,148760],{"class":6705},[68,149547,1685],{"class":316},[68,149549,148765],{"class":1742},[68,149551,39531],{"class":78},[68,149553,149554],{"class":70,"line":3240},[68,149555,1646],{"class":78},[68,149557,149558,149560,149562],{"class":70,"line":3245},[68,149559,148547],{"class":78},[68,149561,149187],{"class":1742},[68,149563,1646],{"class":78},[14,149565,149567],{"id":149566},"_109-数据清洗","10.9 数据清洗",[170,149569,149570],{},"真实数据经常不整齐，需要清洗。",[170,149572,149573],{},"常见问题：",[263,149575,149576,149579,149582,149585],{},[27,149577,149578],{},"数字是字符串。",[27,149580,149581],{},"字段缺失。",[27,149583,149584],{},"空值。",[27,149586,149587],{},"日期格式不统一。",[170,149589,16623],{},[58,149591,149593],{"className":31862,"code":149592,"language":31864,"meta":63,"style":63},"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",[65,149594,149595,149604,149627,149647,149668,149672,149676,149684,149693,149697,149708,149722,149731,149736,149740,149748,149758,149762,149769],{"__ignoreMap":63},[68,149596,149597,149600,149602],{"class":70,"line":71},[68,149598,149599],{"class":78},"raw_data ",[68,149601,1685],{"class":316},[68,149603,56925],{"class":78},[68,149605,149606,149609,149611,149613,149615,149617,149620,149622,149625],{"class":70,"line":82},[68,149607,149608],{"class":78},"    {",[68,149610,149220],{"class":1742},[68,149612,89],{"class":78},[68,149614,148488],{"class":1742},[68,149616,13923],{"class":78},[68,149618,149619],{"class":1742},"\"sales\"",[68,149621,89],{"class":78},[68,149623,149624],{"class":1742},"\"100\"",[68,149626,6420],{"class":78},[68,149628,149629,149631,149633,149635,149637,149639,149641,149643,149645],{"class":70,"line":98},[68,149630,149608],{"class":78},[68,149632,149220],{"class":1742},[68,149634,89],{"class":78},[68,149636,148493],{"class":1742},[68,149638,13923],{"class":78},[68,149640,149619],{"class":1742},[68,149642,89],{"class":78},[68,149644,9141],{"class":1742},[68,149646,6420],{"class":78},[68,149648,149649,149651,149653,149655,149657,149659,149661,149663,149666],{"class":70,"line":104},[68,149650,149608],{"class":78},[68,149652,149220],{"class":1742},[68,149654,89],{"class":78},[68,149656,148498],{"class":1742},[68,149658,13923],{"class":78},[68,149660,149619],{"class":1742},[68,149662,89],{"class":78},[68,149664,149665],{"class":1742},"\"120\"",[68,149667,6420],{"class":78},[68,149669,149670],{"class":70,"line":112},[68,149671,34730],{"class":78},[68,149673,149674],{"class":70,"line":124},[68,149675,3890],{"emptyLinePlaceholder":1567},[68,149677,149678,149680,149682],{"class":70,"line":1496},[68,149679,149023],{"class":78},[68,149681,1685],{"class":316},[68,149683,53320],{"class":78},[68,149685,149686,149689,149691],{"class":70,"line":1502},[68,149687,149688],{"class":78},"sales ",[68,149690,1685],{"class":316},[68,149692,53320],{"class":78},[68,149694,149695],{"class":70,"line":1510},[68,149696,3890],{"emptyLinePlaceholder":1567},[68,149698,149699,149701,149703,149705],{"class":70,"line":1521},[68,149700,4515],{"class":316},[68,149702,149432],{"class":78},[68,149704,27529],{"class":316},[68,149706,149707],{"class":78}," raw_data:\n",[68,149709,149710,149713,149715,149718,149720],{"class":70,"line":3103},[68,149711,149712],{"class":78},"    value ",[68,149714,1685],{"class":316},[68,149716,149717],{"class":78}," item.get(",[68,149719,149619],{"class":1742},[68,149721,1646],{"class":78},[68,149723,149724,149726,149728],{"class":70,"line":3108},[68,149725,4591],{"class":316},[68,149727,40414],{"class":316},[68,149729,149730],{"class":78}," value:\n",[68,149732,149733],{"class":70,"line":3114},[68,149734,149735],{"class":316},"        continue\n",[68,149737,149738],{"class":70,"line":3119},[68,149739,3890],{"emptyLinePlaceholder":1567},[68,149741,149742,149744,149746],{"class":70,"line":3133},[68,149743,149442],{"class":78},[68,149745,149220],{"class":1742},[68,149747,6147],{"class":78},[68,149749,149750,149753,149755],{"class":70,"line":3138},[68,149751,149752],{"class":78},"    sales.append(",[68,149754,1643],{"class":85},[68,149756,149757],{"class":78},"(value))\n",[68,149759,149760],{"class":70,"line":3144},[68,149761,3890],{"emptyLinePlaceholder":1567},[68,149763,149764,149766],{"class":70,"line":3165},[68,149765,31899],{"class":85},[68,149767,149768],{"class":78},"(dates)\n",[68,149770,149771,149773],{"class":70,"line":3170},[68,149772,31899],{"class":85},[68,149774,149775],{"class":78},"(sales)\n",[14,149777,149779],{"id":149778},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[58,149781,149783],{"className":31862,"code":149782,"language":31864,"meta":63,"style":63},"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",[65,149784,149785,149799,149809,149813,149821,149842,149864,149886,149908,149930,149934,149938,149960,149981,149985,149993,149997,150001,150011,150020,150030,150046,150050,150054,150071,150087,150103,150119,150129,150133],{"__ignoreMap":63},[68,149786,149787,149789,149791,149793,149795,149797],{"class":70,"line":71},[68,149788,32221],{"class":316},[68,149790,148602],{"class":78},[68,149792,31876],{"class":316},[68,149794,148607],{"class":78},[68,149796,32867],{"class":316},[68,149798,148612],{"class":78},[68,149800,149801,149803,149805,149807],{"class":70,"line":82},[68,149802,32221],{"class":316},[68,149804,148461],{"class":78},[68,149806,31876],{"class":316},[68,149808,148466],{"class":78},[68,149810,149811],{"class":70,"line":98},[68,149812,3890],{"emptyLinePlaceholder":1567},[68,149814,149815,149817,149819],{"class":70,"line":104},[68,149816,149688],{"class":78},[68,149818,1685],{"class":316},[68,149820,56925],{"class":78},[68,149822,149823,149825,149827,149829,149832,149834,149836,149838,149840],{"class":70,"line":112},[68,149824,149608],{"class":78},[68,149826,149220],{"class":1742},[68,149828,89],{"class":78},[68,149830,149831],{"class":1742},"\"2024-10-01\"",[68,149833,13923],{"class":78},[68,149835,85560],{"class":1742},[68,149837,89],{"class":78},[68,149839,93498],{"class":85},[68,149841,6420],{"class":78},[68,149843,149844,149846,149848,149850,149853,149855,149857,149859,149862],{"class":70,"line":124},[68,149845,149608],{"class":78},[68,149847,149220],{"class":1742},[68,149849,89],{"class":78},[68,149851,149852],{"class":1742},"\"2024-10-02\"",[68,149854,13923],{"class":78},[68,149856,85560],{"class":1742},[68,149858,89],{"class":78},[68,149860,149861],{"class":85},"1800",[68,149863,6420],{"class":78},[68,149865,149866,149868,149870,149872,149875,149877,149879,149881,149884],{"class":70,"line":1496},[68,149867,149608],{"class":78},[68,149869,149220],{"class":1742},[68,149871,89],{"class":78},[68,149873,149874],{"class":1742},"\"2024-10-03\"",[68,149876,13923],{"class":78},[68,149878,85560],{"class":1742},[68,149880,89],{"class":78},[68,149882,149883],{"class":85},"1500",[68,149885,6420],{"class":78},[68,149887,149888,149890,149892,149894,149897,149899,149901,149903,149906],{"class":70,"line":1502},[68,149889,149608],{"class":78},[68,149891,149220],{"class":1742},[68,149893,89],{"class":78},[68,149895,149896],{"class":1742},"\"2024-10-04\"",[68,149898,13923],{"class":78},[68,149900,85560],{"class":1742},[68,149902,89],{"class":78},[68,149904,149905],{"class":85},"2100",[68,149907,6420],{"class":78},[68,149909,149910,149912,149914,149916,149919,149921,149923,149925,149928],{"class":70,"line":1510},[68,149911,149608],{"class":78},[68,149913,149220],{"class":1742},[68,149915,89],{"class":78},[68,149917,149918],{"class":1742},"\"2024-10-05\"",[68,149920,13923],{"class":78},[68,149922,85560],{"class":1742},[68,149924,89],{"class":78},[68,149926,149927],{"class":85},"2600",[68,149929,6420],{"class":78},[68,149931,149932],{"class":70,"line":1521},[68,149933,34730],{"class":78},[68,149935,149936],{"class":70,"line":3103},[68,149937,3890],{"emptyLinePlaceholder":1567},[68,149939,149940,149942,149944,149947,149949,149951,149953,149955,149957],{"class":70,"line":3108},[68,149941,149023],{"class":78},[68,149943,1685],{"class":316},[68,149945,149946],{"class":78}," [item[",[68,149948,149220],{"class":1742},[68,149950,5933],{"class":78},[68,149952,4515],{"class":316},[68,149954,149432],{"class":78},[68,149956,27529],{"class":316},[68,149958,149959],{"class":78}," sales]\n",[68,149961,149962,149965,149967,149969,149971,149973,149975,149977,149979],{"class":70,"line":3114},[68,149963,149964],{"class":78},"amounts ",[68,149966,1685],{"class":316},[68,149968,149946],{"class":78},[68,149970,85560],{"class":1742},[68,149972,5933],{"class":78},[68,149974,4515],{"class":316},[68,149976,149432],{"class":78},[68,149978,27529],{"class":316},[68,149980,149959],{"class":78},[68,149982,149983],{"class":70,"line":3119},[68,149984,3890],{"emptyLinePlaceholder":1567},[68,149986,149987,149989,149991],{"class":70,"line":3133},[68,149988,148475],{"class":78},[68,149990,1685],{"class":316},[68,149992,148480],{"class":78},[68,149994,149995],{"class":70,"line":3138},[68,149996,149064],{"class":78},[68,149998,149999],{"class":70,"line":3144},[68,150000,148872],{"class":78},[68,150002,150003,150005,150007,150009],{"class":70,"line":3165},[68,150004,148877],{"class":6705},[68,150006,1685],{"class":316},[68,150008,148518],{"class":1742},[68,150010,32950],{"class":78},[68,150012,150013,150015,150017],{"class":70,"line":3170},[68,150014,148888],{"class":6705},[68,150016,1685],{"class":316},[68,150018,150019],{"class":78},"amounts,\n",[68,150021,150022,150024,150026,150028],{"class":70,"line":3184},[68,150023,148917],{"class":6705},[68,150025,1685],{"class":316},[68,150027,32960],{"class":85},[68,150029,32950],{"class":78},[68,150031,150032,150034,150036,150038,150040,150042,150044],{"class":70,"line":3189},[68,150033,148928],{"class":6705},[68,150035,1685],{"class":316},[68,150037,148933],{"class":78},[68,150039,148936],{"class":6705},[68,150041,1685],{"class":316},[68,150043,32960],{"class":85},[68,150045,39531],{"class":78},[68,150047,150048],{"class":70,"line":3218},[68,150049,1646],{"class":78},[68,150051,150052],{"class":70,"line":3223},[68,150053,148691],{"class":78},[68,150055,150056,150058,150060,150062,150064,150066,150069],{"class":70,"line":3240},[68,150057,148696],{"class":6705},[68,150059,1685],{"class":316},[68,150061,148701],{"class":78},[68,150063,52891],{"class":6705},[68,150065,1685],{"class":316},[68,150067,150068],{"class":1742},"\"每日销售额\"",[68,150070,39531],{"class":78},[68,150072,150073,150075,150077,150079,150081,150083,150085],{"class":70,"line":3245},[68,150074,148715],{"class":6705},[68,150076,1685],{"class":316},[68,150078,148720],{"class":78},[68,150080,81287],{"class":6705},[68,150082,1685],{"class":316},[68,150084,148727],{"class":1742},[68,150086,39531],{"class":78},[68,150088,150089,150091,150093,150095,150097,150099,150101],{"class":70,"line":3250},[68,150090,148734],{"class":6705},[68,150092,1685],{"class":316},[68,150094,148720],{"class":78},[68,150096,81287],{"class":6705},[68,150098,1685],{"class":316},[68,150100,148745],{"class":1742},[68,150102,39531],{"class":78},[68,150104,150105,150107,150109,150111,150113,150115,150117],{"class":70,"line":3255},[68,150106,148752],{"class":6705},[68,150108,1685],{"class":316},[68,150110,148757],{"class":78},[68,150112,148760],{"class":6705},[68,150114,1685],{"class":316},[68,150116,148765],{"class":1742},[68,150118,39531],{"class":78},[68,150120,150121,150124,150126],{"class":70,"line":3269},[68,150122,150123],{"class":6705},"    datazoom_opts",[68,150125,1685],{"class":316},[68,150127,150128],{"class":78},"[opts.DataZoomOpts()],\n",[68,150130,150131],{"class":70,"line":3274},[68,150132,1646],{"class":78},[68,150134,150135,150137,150140],{"class":70,"line":4067},[68,150136,148547],{"class":78},[68,150138,150139],{"class":1742},"\"daily_sales.html\"",[68,150141,1646],{"class":78},[170,150143,150144,150147],{},[65,150145,150146],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150149,150151],{"id":150150},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[170,150153,150154],{},"如果数据结构如下：",[58,150156,150158],{"className":31862,"code":150157,"language":31864,"meta":63,"style":63},"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",[65,150159,150160,150168,150176,150198,150219,150224,150231,150251,150271,150275],{"__ignoreMap":63},[68,150161,150162,150164,150166],{"class":70,"line":71},[68,150163,103133],{"class":78},[68,150165,1685],{"class":316},[68,150167,79],{"class":78},[68,150169,150170,150173],{"class":70,"line":82},[68,150171,150172],{"class":1742},"    \"北京\"",[68,150174,150175],{"class":78},": [\n",[68,150177,150178,150180,150182,150184,150187,150189,150192,150194,150196],{"class":70,"line":98},[68,150179,6407],{"class":78},[68,150181,149220],{"class":1742},[68,150183,89],{"class":78},[68,150185,150186],{"class":1742},"\"2024-01-01\"",[68,150188,13923],{"class":78},[68,150190,150191],{"class":1742},"\"confirm\"",[68,150193,89],{"class":78},[68,150195,313],{"class":85},[68,150197,6420],{"class":78},[68,150199,150200,150202,150204,150206,150209,150211,150213,150215,150217],{"class":70,"line":104},[68,150201,6407],{"class":78},[68,150203,149220],{"class":1742},[68,150205,89],{"class":78},[68,150207,150208],{"class":1742},"\"2024-01-02\"",[68,150210,13923],{"class":78},[68,150212,150191],{"class":1742},[68,150214,89],{"class":78},[68,150216,2126],{"class":85},[68,150218,6420],{"class":78},[68,150220,150221],{"class":70,"line":112},[68,150222,150223],{"class":78},"    ],\n",[68,150225,150226,150229],{"class":70,"line":124},[68,150227,150228],{"class":1742},"    \"上海\"",[68,150230,150175],{"class":78},[68,150232,150233,150235,150237,150239,150241,150243,150245,150247,150249],{"class":70,"line":1496},[68,150234,6407],{"class":78},[68,150236,149220],{"class":1742},[68,150238,89],{"class":78},[68,150240,150186],{"class":1742},[68,150242,13923],{"class":78},[68,150244,150191],{"class":1742},[68,150246,89],{"class":78},[68,150248,2024],{"class":85},[68,150250,6420],{"class":78},[68,150252,150253,150255,150257,150259,150261,150263,150265,150267,150269],{"class":70,"line":1502},[68,150254,6407],{"class":78},[68,150256,149220],{"class":1742},[68,150258,89],{"class":78},[68,150260,150208],{"class":1742},[68,150262,13923],{"class":78},[68,150264,150191],{"class":1742},[68,150266,89],{"class":78},[68,150268,2151],{"class":85},[68,150270,6420],{"class":78},[68,150272,150273],{"class":70,"line":1510},[68,150274,150223],{"class":78},[68,150276,150277],{"class":70,"line":1521},[68,150278,101],{"class":78},[170,150280,150281],{},"绘制多地区趋势：",[58,150283,150285],{"className":31862,"code":150284,"language":31864,"meta":63,"style":63},"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",[65,150286,150287,150301,150311,150315,150340,150344,150352,150356,150360,150372,150394,150407,150411,150415,150432,150448,150452],{"__ignoreMap":63},[68,150288,150289,150291,150293,150295,150297,150299],{"class":70,"line":71},[68,150290,32221],{"class":316},[68,150292,148602],{"class":78},[68,150294,31876],{"class":316},[68,150296,148607],{"class":78},[68,150298,32867],{"class":316},[68,150300,148612],{"class":78},[68,150302,150303,150305,150307,150309],{"class":70,"line":82},[68,150304,32221],{"class":316},[68,150306,148461],{"class":78},[68,150308,31876],{"class":316},[68,150310,148466],{"class":78},[68,150312,150313],{"class":70,"line":98},[68,150314,3890],{"emptyLinePlaceholder":1567},[68,150316,150317,150319,150321,150323,150325,150327,150329,150331,150333,150336,150338],{"class":70,"line":104},[68,150318,149023],{"class":78},[68,150320,1685],{"class":316},[68,150322,149946],{"class":78},[68,150324,149220],{"class":1742},[68,150326,5933],{"class":78},[68,150328,4515],{"class":316},[68,150330,149432],{"class":78},[68,150332,27529],{"class":316},[68,150334,150335],{"class":78}," data[",[68,150337,70747],{"class":1742},[68,150339,79004],{"class":78},[68,150341,150342],{"class":70,"line":112},[68,150343,3890],{"emptyLinePlaceholder":1567},[68,150345,150346,150348,150350],{"class":70,"line":124},[68,150347,148475],{"class":78},[68,150349,1685],{"class":316},[68,150351,148480],{"class":78},[68,150353,150354],{"class":70,"line":1496},[68,150355,149064],{"class":78},[68,150357,150358],{"class":70,"line":1502},[68,150359,3890],{"emptyLinePlaceholder":1567},[68,150361,150362,150364,150367,150369],{"class":70,"line":1510},[68,150363,4515],{"class":316},[68,150365,150366],{"class":78}," city, records ",[68,150368,27529],{"class":316},[68,150370,150371],{"class":78}," data.items():\n",[68,150373,150374,150377,150379,150381,150383,150385,150387,150389,150391],{"class":70,"line":1521},[68,150375,150376],{"class":78},"    values ",[68,150378,1685],{"class":316},[68,150380,149946],{"class":78},[68,150382,150191],{"class":1742},[68,150384,5933],{"class":78},[68,150386,4515],{"class":316},[68,150388,149432],{"class":78},[68,150390,27529],{"class":316},[68,150392,150393],{"class":78}," records]\n",[68,150395,150396,150399,150401,150403,150405],{"class":70,"line":3103},[68,150397,150398],{"class":78},"    line.add_yaxis(city, values, ",[68,150400,148968],{"class":6705},[68,150402,1685],{"class":316},[68,150404,32960],{"class":85},[68,150406,1646],{"class":78},[68,150408,150409],{"class":70,"line":3108},[68,150410,3890],{"emptyLinePlaceholder":1567},[68,150412,150413],{"class":70,"line":3114},[68,150414,148691],{"class":78},[68,150416,150417,150419,150421,150423,150425,150427,150430],{"class":70,"line":3119},[68,150418,148696],{"class":6705},[68,150420,1685],{"class":316},[68,150422,148701],{"class":78},[68,150424,52891],{"class":6705},[68,150426,1685],{"class":316},[68,150428,150429],{"class":1742},"\"多地区趋势图\"",[68,150431,39531],{"class":78},[68,150433,150434,150436,150438,150440,150442,150444,150446],{"class":70,"line":3133},[68,150435,148752],{"class":6705},[68,150437,1685],{"class":316},[68,150439,148757],{"class":78},[68,150441,148760],{"class":6705},[68,150443,1685],{"class":316},[68,150445,148765],{"class":1742},[68,150447,39531],{"class":78},[68,150449,150450],{"class":70,"line":3138},[68,150451,1646],{"class":78},[68,150453,150454,150456,150459],{"class":70,"line":3144},[68,150455,148547],{"class":78},[68,150457,150458],{"class":1742},"\"trend.html\"",[68,150460,1646],{"class":78},[170,150462,150463],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150465,150467],{"id":150466},"_1012-易错点","10.12 易错点",[263,150469,150470,150476,150482,150492,150498],{},[27,150471,150472,150475],{},[65,150473,150474],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[27,150477,150478,150481],{},[65,150479,150480],{},"render()"," 生成的是 HTML，不是图片。",[27,150483,150484,150485,150488,150489,29869],{},"JSON 字符串用 ",[65,150486,150487],{},"json.loads()","，JSON 文件用 ",[65,150490,150491],{},"json.load()",[27,150493,150494,150495,29869],{},"中文 JSON 保存时加 ",[65,150496,150497],{},"ensure_ascii=False",[27,150499,150500],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150502,150504],{"id":150503},"_1013-本章练习","10.13 本章练习",[263,150506,150507,150510,150513,150516,150519],{},[27,150508,150509],{},"安装 pyecharts 并生成第一个折线图。",[27,150511,150512],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[27,150514,150515],{},"绘制两条折线，对比线上和线下销售额。",[27,150517,150518],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[27,150520,150521],{},"对含有空值的销售数据进行清洗后再绘图。",[1553,150523,150524],{},"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":63,"searchDepth":82,"depth":82,"links":150526},[150527,150528,150529,150530,150531,150532,150533,150534,150535,150536,150537,150538,150539],{"id":148143,"depth":82,"text":148144},{"id":148218,"depth":82,"text":148219},{"id":148397,"depth":82,"text":148398},{"id":148448,"depth":82,"text":148449},{"id":148582,"depth":82,"text":148583},{"id":148858,"depth":82,"text":148859},{"id":148984,"depth":82,"text":148985},{"id":149195,"depth":82,"text":149196},{"id":149566,"depth":82,"text":149567},{"id":149778,"depth":82,"text":149779},{"id":150150,"depth":82,"text":150151},{"id":150466,"depth":82,"text":150467},{"id":150503,"depth":82,"text":150504},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148135,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150546,"title":150547,"body":150548,"description":1564,"extension":1565,"meta":152908,"navigation":1567,"path":152909,"seo":152910,"stem":152911,"__hash__":152912},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150549,"toc":152885},[150550,150553,150557,150560,150563,150639,150642,150733,150736,150740,150743,150787,150800,150804,150807,150874,150877,150881,150884,150968,150976,150980,150985,151126,151129,151140,151146,151152,151266,151270,151273,151276,151529,151532,151536,151539,151643,151646,151650,151801,151805,151812,151925,151929,151932,152038,152041,152045,152048,152079,152082,152187,152190,152194,152198,152208,152276,152280,152287,152351,152354,152358,152364,152460,152469,152473,152797,152806,152810,152838,152842,152882],[10,150551,150547],{"id":150552},"_11-面向对象基础",[14,150554,150556],{"id":150555},"_111-什么是面向对象","11.1 什么是面向对象",[170,150558,150559],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[170,150561,150562],{},"面向过程：",[58,150564,150566],{"className":31862,"code":150565,"language":31864,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[65,150567,150568,150577,150585,150589,150599,150630,150634],{"__ignoreMap":63},[68,150569,150570,150572,150574],{"class":70,"line":71},[68,150571,147759],{"class":78},[68,150573,1685],{"class":316},[68,150575,150576],{"class":1742}," \"小明\"\n",[68,150578,150579,150581,150583],{"class":70,"line":82},[68,150580,147769],{"class":78},[68,150582,1685],{"class":316},[68,150584,147774],{"class":85},[68,150586,150587],{"class":70,"line":98},[68,150588,3890],{"emptyLinePlaceholder":1567},[68,150590,150591,150593,150596],{"class":70,"line":104},[68,150592,33431],{"class":316},[68,150594,150595],{"class":74}," introduce",[68,150597,150598],{"class":78},"(name, age):\n",[68,150600,150601,150603,150605,150607,150610,150612,150614,150616,150619,150621,150623,150625,150628],{"class":70,"line":112},[68,150602,32783],{"class":85},[68,150604,1640],{"class":78},[68,150606,1691],{"class":316},[68,150608,150609],{"class":1742},"\"我叫",[68,150611,2523],{"class":85},[68,150613,81287],{"class":78},[68,150615,2573],{"class":85},[68,150617,150618],{"class":1742},"，今年",[68,150620,2523],{"class":85},[68,150622,71699],{"class":78},[68,150624,2573],{"class":85},[68,150626,150627],{"class":1742},"岁\"",[68,150629,1646],{"class":78},[68,150631,150632],{"class":70,"line":124},[68,150633,3890],{"emptyLinePlaceholder":1567},[68,150635,150636],{"class":70,"line":1496},[68,150637,150638],{"class":78},"introduce(name, age)\n",[170,150640,150641],{},"面向对象：",[58,150643,150645],{"className":31862,"code":150644,"language":31864,"meta":63,"style":63},"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",[65,150646,150647,150655,150663,150692,150696,150700,150710,150719,150728],{"__ignoreMap":63},[68,150648,150649,150651,150653],{"class":70,"line":71},[68,150650,16182],{"class":316},[68,150652,9387],{"class":74},[68,150654,5229],{"class":78},[68,150656,150657,150659,150661],{"class":70,"line":82},[68,150658,32285],{"class":316},[68,150660,150595],{"class":74},[68,150662,32291],{"class":78},[68,150664,150665,150667,150669,150671,150673,150676,150678,150680,150682,150684,150686,150688,150690],{"class":70,"line":98},[68,150666,33935],{"class":85},[68,150668,1640],{"class":78},[68,150670,1691],{"class":316},[68,150672,150609],{"class":1742},[68,150674,150675],{"class":85},"{self",[68,150677,81778],{"class":78},[68,150679,2573],{"class":85},[68,150681,150618],{"class":1742},[68,150683,150675],{"class":85},[68,150685,81790],{"class":78},[68,150687,2573],{"class":85},[68,150689,150627],{"class":1742},[68,150691,1646],{"class":78},[68,150693,150694],{"class":70,"line":104},[68,150695,3890],{"emptyLinePlaceholder":1567},[68,150697,150698],{"class":70,"line":112},[68,150699,3890],{"emptyLinePlaceholder":1567},[68,150701,150702,150705,150707],{"class":70,"line":124},[68,150703,150704],{"class":78},"student ",[68,150706,1685],{"class":316},[68,150708,150709],{"class":78}," Student()\n",[68,150711,150712,150715,150717],{"class":70,"line":1496},[68,150713,150714],{"class":78},"student.name ",[68,150716,1685],{"class":316},[68,150718,150576],{"class":1742},[68,150720,150721,150724,150726],{"class":70,"line":1502},[68,150722,150723],{"class":78},"student.age ",[68,150725,1685],{"class":316},[68,150727,147774],{"class":85},[68,150729,150730],{"class":70,"line":1510},[68,150731,150732],{"class":78},"student.introduce()\n",[170,150734,150735],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150737,150739],{"id":150738},"_112-类和对象","11.2 类和对象",[170,150741,150742],{},"类是模板，对象是根据模板创建出来的具体实例。",[58,150744,150746],{"className":31862,"code":150745,"language":31864,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[65,150747,150748,150756,150761,150765,150769,150778],{"__ignoreMap":63},[68,150749,150750,150752,150754],{"class":70,"line":71},[68,150751,16182],{"class":316},[68,150753,9387],{"class":74},[68,150755,5229],{"class":78},[68,150757,150758],{"class":70,"line":82},[68,150759,150760],{"class":316},"    pass\n",[68,150762,150763],{"class":70,"line":98},[68,150764,3890],{"emptyLinePlaceholder":1567},[68,150766,150767],{"class":70,"line":104},[68,150768,3890],{"emptyLinePlaceholder":1567},[68,150770,150771,150774,150776],{"class":70,"line":112},[68,150772,150773],{"class":78},"student1 ",[68,150775,1685],{"class":316},[68,150777,150709],{"class":78},[68,150779,150780,150783,150785],{"class":70,"line":124},[68,150781,150782],{"class":78},"student2 ",[68,150784,1685],{"class":316},[68,150786,150709],{"class":78},[170,150788,150789,150792,150793,102493,150796,150799],{},[65,150790,150791],{},"Student"," 是类，",[65,150794,150795],{},"student1",[65,150797,150798],{},"student2"," 是对象。",[14,150801,150803],{"id":150802},"_113-属性","11.3 属性",[170,150805,150806],{},"属性是对象保存的数据。",[58,150808,150810],{"className":31862,"code":150809,"language":31864,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[65,150811,150812,150820,150824,150828,150832,150840,150848,150856,150860,150867],{"__ignoreMap":63},[68,150813,150814,150816,150818],{"class":70,"line":71},[68,150815,16182],{"class":316},[68,150817,9387],{"class":74},[68,150819,5229],{"class":78},[68,150821,150822],{"class":70,"line":82},[68,150823,150760],{"class":316},[68,150825,150826],{"class":70,"line":98},[68,150827,3890],{"emptyLinePlaceholder":1567},[68,150829,150830],{"class":70,"line":104},[68,150831,3890],{"emptyLinePlaceholder":1567},[68,150833,150834,150836,150838],{"class":70,"line":112},[68,150835,150704],{"class":78},[68,150837,1685],{"class":316},[68,150839,150709],{"class":78},[68,150841,150842,150844,150846],{"class":70,"line":124},[68,150843,150714],{"class":78},[68,150845,1685],{"class":316},[68,150847,150576],{"class":1742},[68,150849,150850,150852,150854],{"class":70,"line":1496},[68,150851,150723],{"class":78},[68,150853,1685],{"class":316},[68,150855,147774],{"class":85},[68,150857,150858],{"class":70,"line":1502},[68,150859,3890],{"emptyLinePlaceholder":1567},[68,150861,150862,150864],{"class":70,"line":1510},[68,150863,31899],{"class":85},[68,150865,150866],{"class":78},"(student.name)\n",[68,150868,150869,150871],{"class":70,"line":1521},[68,150870,31899],{"class":85},[68,150872,150873],{"class":78},"(student.age)\n",[170,150875,150876],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150878,150880],{"id":150879},"_114-方法","11.4 方法",[170,150882,150883],{},"类中的函数叫方法。",[58,150885,150886],{"className":31862,"code":150644,"language":31864,"meta":63,"style":63},[65,150887,150888,150896,150904,150932,150936,150940,150948,150956,150964],{"__ignoreMap":63},[68,150889,150890,150892,150894],{"class":70,"line":71},[68,150891,16182],{"class":316},[68,150893,9387],{"class":74},[68,150895,5229],{"class":78},[68,150897,150898,150900,150902],{"class":70,"line":82},[68,150899,32285],{"class":316},[68,150901,150595],{"class":74},[68,150903,32291],{"class":78},[68,150905,150906,150908,150910,150912,150914,150916,150918,150920,150922,150924,150926,150928,150930],{"class":70,"line":98},[68,150907,33935],{"class":85},[68,150909,1640],{"class":78},[68,150911,1691],{"class":316},[68,150913,150609],{"class":1742},[68,150915,150675],{"class":85},[68,150917,81778],{"class":78},[68,150919,2573],{"class":85},[68,150921,150618],{"class":1742},[68,150923,150675],{"class":85},[68,150925,81790],{"class":78},[68,150927,2573],{"class":85},[68,150929,150627],{"class":1742},[68,150931,1646],{"class":78},[68,150933,150934],{"class":70,"line":104},[68,150935,3890],{"emptyLinePlaceholder":1567},[68,150937,150938],{"class":70,"line":112},[68,150939,3890],{"emptyLinePlaceholder":1567},[68,150941,150942,150944,150946],{"class":70,"line":124},[68,150943,150704],{"class":78},[68,150945,1685],{"class":316},[68,150947,150709],{"class":78},[68,150949,150950,150952,150954],{"class":70,"line":1496},[68,150951,150714],{"class":78},[68,150953,1685],{"class":316},[68,150955,150576],{"class":1742},[68,150957,150958,150960,150962],{"class":70,"line":1502},[68,150959,150723],{"class":78},[68,150961,1685],{"class":316},[68,150963,147774],{"class":85},[68,150965,150966],{"class":70,"line":1510},[68,150967,150732],{"class":78},[170,150969,150970,150972,150973,150975],{},[65,150971,32307],{}," 表示当前对象。调用方法时不需要手动传入 ",[65,150974,32307],{},"，Python 会自动传。",[14,150977,150979],{"id":150978},"_115-构造方法__init__","11.5 构造方法__init__",[170,150981,150982,150984],{},[65,150983,32313],{}," 在对象创建时自动执行，用于初始化属性。",[58,150986,150988],{"className":31862,"code":150987,"language":31864,"meta":63,"style":63},"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",[65,150989,150990,150998,151007,151019,151031,151042,151046,151054,151092,151096,151100,151122],{"__ignoreMap":63},[68,150991,150992,150994,150996],{"class":70,"line":71},[68,150993,16182],{"class":316},[68,150995,9387],{"class":74},[68,150997,5229],{"class":78},[68,150999,151000,151002,151004],{"class":70,"line":82},[68,151001,32285],{"class":316},[68,151003,32288],{"class":85},[68,151005,151006],{"class":78},"(self, name, age, score):\n",[68,151008,151009,151011,151014,151016],{"class":70,"line":98},[68,151010,32329],{"class":85},[68,151012,151013],{"class":78},".name ",[68,151015,1685],{"class":316},[68,151017,151018],{"class":78}," name\n",[68,151020,151021,151023,151026,151028],{"class":70,"line":104},[68,151022,32329],{"class":85},[68,151024,151025],{"class":78},".age ",[68,151027,1685],{"class":316},[68,151029,151030],{"class":78}," age\n",[68,151032,151033,151035,151038,151040],{"class":70,"line":112},[68,151034,32329],{"class":85},[68,151036,151037],{"class":78},".score ",[68,151039,1685],{"class":316},[68,151041,3070],{"class":78},[68,151043,151044],{"class":70,"line":124},[68,151045,3890],{"emptyLinePlaceholder":1567},[68,151047,151048,151050,151052],{"class":70,"line":1496},[68,151049,32285],{"class":316},[68,151051,150595],{"class":74},[68,151053,32291],{"class":78},[68,151055,151056,151058,151060,151062,151064,151066,151068,151070,151072,151074,151076,151078,151081,151083,151086,151088,151090],{"class":70,"line":1502},[68,151057,33935],{"class":85},[68,151059,1640],{"class":78},[68,151061,1691],{"class":316},[68,151063,150609],{"class":1742},[68,151065,150675],{"class":85},[68,151067,81778],{"class":78},[68,151069,2573],{"class":85},[68,151071,150618],{"class":1742},[68,151073,150675],{"class":85},[68,151075,81790],{"class":78},[68,151077,2573],{"class":85},[68,151079,151080],{"class":1742},"岁，成绩",[68,151082,150675],{"class":85},[68,151084,151085],{"class":78},".score",[68,151087,2573],{"class":85},[68,151089,1880],{"class":1742},[68,151091,1646],{"class":78},[68,151093,151094],{"class":70,"line":1510},[68,151095,3890],{"emptyLinePlaceholder":1567},[68,151097,151098],{"class":70,"line":1521},[68,151099,3890],{"emptyLinePlaceholder":1567},[68,151101,151102,151104,151106,151109,151112,151114,151116,151118,151120],{"class":70,"line":3103},[68,151103,150704],{"class":78},[68,151105,1685],{"class":316},[68,151107,151108],{"class":78}," Student(",[68,151110,151111],{"class":1742},"\"小明\"",[68,151113,13923],{"class":78},[68,151115,2278],{"class":85},[68,151117,13923],{"class":78},[68,151119,2616],{"class":85},[68,151121,1646],{"class":78},[68,151123,151124],{"class":70,"line":3108},[68,151125,150732],{"class":78},[170,151127,151128],{},"构造方法的好处：",[263,151130,151131,151134,151137],{},[27,151132,151133],{},"创建对象时必须提供必要数据。",[27,151135,151136],{},"属性初始化集中，不容易漏。",[27,151138,151139],{},"对象状态更完整。",[14,151141,151143,151144],{"id":151142},"_116-str","11.6 ",[268,151145,2795],{},[170,151147,151148,151149,29869],{},"直接打印对象时，默认输出不直观。可以定义 ",[65,151150,151151],{},"__str__",[58,151153,151155],{"className":31862,"code":151154,"language":31864,"meta":63,"style":63},"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",[65,151156,151157,151165,151174,151184,151194,151198,151207,151235,151239,151243,151259],{"__ignoreMap":63},[68,151158,151159,151161,151163],{"class":70,"line":71},[68,151160,16182],{"class":316},[68,151162,9387],{"class":74},[68,151164,5229],{"class":78},[68,151166,151167,151169,151171],{"class":70,"line":82},[68,151168,32285],{"class":316},[68,151170,32288],{"class":85},[68,151172,151173],{"class":78},"(self, name, age):\n",[68,151175,151176,151178,151180,151182],{"class":70,"line":98},[68,151177,32329],{"class":85},[68,151179,151013],{"class":78},[68,151181,1685],{"class":316},[68,151183,151018],{"class":78},[68,151185,151186,151188,151190,151192],{"class":70,"line":104},[68,151187,32329],{"class":85},[68,151189,151025],{"class":78},[68,151191,1685],{"class":316},[68,151193,151030],{"class":78},[68,151195,151196],{"class":70,"line":112},[68,151197,3890],{"emptyLinePlaceholder":1567},[68,151199,151200,151202,151205],{"class":70,"line":124},[68,151201,32285],{"class":316},[68,151203,151204],{"class":85}," __str__",[68,151206,32291],{"class":78},[68,151208,151209,151211,151214,151217,151219,151221,151223,151226,151228,151230,151232],{"class":70,"line":1496},[68,151210,16240],{"class":316},[68,151212,151213],{"class":316}," f",[68,151215,151216],{"class":1742},"\"Student(name=",[68,151218,150675],{"class":85},[68,151220,81778],{"class":78},[68,151222,2573],{"class":85},[68,151224,151225],{"class":1742},", age=",[68,151227,150675],{"class":85},[68,151229,81790],{"class":78},[68,151231,2573],{"class":85},[68,151233,151234],{"class":1742},")\"\n",[68,151236,151237],{"class":70,"line":1502},[68,151238,3890],{"emptyLinePlaceholder":1567},[68,151240,151241],{"class":70,"line":1510},[68,151242,3890],{"emptyLinePlaceholder":1567},[68,151244,151245,151247,151249,151251,151253,151255,151257],{"class":70,"line":1521},[68,151246,150704],{"class":78},[68,151248,1685],{"class":316},[68,151250,151108],{"class":78},[68,151252,151111],{"class":1742},[68,151254,13923],{"class":78},[68,151256,2278],{"class":85},[68,151258,1646],{"class":78},[68,151260,151261,151263],{"class":70,"line":3103},[68,151262,31899],{"class":85},[68,151264,151265],{"class":78},"(student)\n",[14,151267,151269],{"id":151268},"_117-封装","11.7 封装",[170,151271,151272],{},"封装就是把数据和方法放到类中，并控制访问方式。",[170,151274,151275],{},"Python 中以双下划线开头的属性通常视为私有属性。",[58,151277,151279],{"className":31862,"code":151278,"language":31864,"meta":63,"style":63},"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",[65,151280,151281,151290,151299,151311,151323,151327,151336,151345,151349,151359,151372,151383,151388,151399,151403,151412,151424,151435,151439,151452,151463,151467,151478,151482,151486,151504,151513,151522],{"__ignoreMap":63},[68,151282,151283,151285,151288],{"class":70,"line":71},[68,151284,16182],{"class":316},[68,151286,151287],{"class":74}," Account",[68,151289,5229],{"class":78},[68,151291,151292,151294,151296],{"class":70,"line":82},[68,151293,32285],{"class":316},[68,151295,32288],{"class":85},[68,151297,151298],{"class":78},"(self, owner, balance):\n",[68,151300,151301,151303,151306,151308],{"class":70,"line":98},[68,151302,32329],{"class":85},[68,151304,151305],{"class":78},".owner ",[68,151307,1685],{"class":316},[68,151309,151310],{"class":78}," owner\n",[68,151312,151313,151315,151318,151320],{"class":70,"line":104},[68,151314,32329],{"class":85},[68,151316,151317],{"class":78},".__balance ",[68,151319,1685],{"class":316},[68,151321,151322],{"class":78}," balance\n",[68,151324,151325],{"class":70,"line":112},[68,151326,3890],{"emptyLinePlaceholder":1567},[68,151328,151329,151331,151334],{"class":70,"line":124},[68,151330,32285],{"class":316},[68,151332,151333],{"class":74}," get_balance",[68,151335,32291],{"class":78},[68,151337,151338,151340,151342],{"class":70,"line":1496},[68,151339,16240],{"class":316},[68,151341,40357],{"class":85},[68,151343,151344],{"class":78},".__balance\n",[68,151346,151347],{"class":70,"line":1502},[68,151348,3890],{"emptyLinePlaceholder":1567},[68,151350,151351,151353,151356],{"class":70,"line":1510},[68,151352,32285],{"class":316},[68,151354,151355],{"class":74}," deposit",[68,151357,151358],{"class":78},"(self, money):\n",[68,151360,151361,151363,151366,151368,151370],{"class":70,"line":1521},[68,151362,3987],{"class":316},[68,151364,151365],{"class":78}," money ",[68,151367,3079],{"class":316},[68,151369,5583],{"class":85},[68,151371,5229],{"class":78},[68,151373,151374,151376,151378,151381],{"class":70,"line":3103},[68,151375,36134],{"class":85},[68,151377,1640],{"class":78},[68,151379,151380],{"class":1742},"\"存款金额必须大于0\"",[68,151382,1646],{"class":78},[68,151384,151385],{"class":70,"line":3108},[68,151386,151387],{"class":316},"            return\n",[68,151389,151390,151392,151394,151396],{"class":70,"line":3114},[68,151391,32329],{"class":85},[68,151393,151317],{"class":78},[68,151395,10965],{"class":316},[68,151397,151398],{"class":78}," money\n",[68,151400,151401],{"class":70,"line":3119},[68,151402,3890],{"emptyLinePlaceholder":1567},[68,151404,151405,151407,151410],{"class":70,"line":3133},[68,151406,32285],{"class":316},[68,151408,151409],{"class":74}," withdraw",[68,151411,151358],{"class":78},[68,151413,151414,151416,151418,151420,151422],{"class":70,"line":3138},[68,151415,3987],{"class":316},[68,151417,151365],{"class":78},[68,151419,3079],{"class":316},[68,151421,5583],{"class":85},[68,151423,5229],{"class":78},[68,151425,151426,151428,151430,151433],{"class":70,"line":3144},[68,151427,36134],{"class":85},[68,151429,1640],{"class":78},[68,151431,151432],{"class":1742},"\"取款金额必须大于0\"",[68,151434,1646],{"class":78},[68,151436,151437],{"class":70,"line":3165},[68,151438,151387],{"class":316},[68,151440,151441,151443,151445,151447,151449],{"class":70,"line":3170},[68,151442,3987],{"class":316},[68,151444,151365],{"class":78},[68,151446,2587],{"class":316},[68,151448,40357],{"class":85},[68,151450,151451],{"class":78},".__balance:\n",[68,151453,151454,151456,151458,151461],{"class":70,"line":3184},[68,151455,36134],{"class":85},[68,151457,1640],{"class":78},[68,151459,151460],{"class":1742},"\"余额不足\"",[68,151462,1646],{"class":78},[68,151464,151465],{"class":70,"line":3189},[68,151466,151387],{"class":316},[68,151468,151469,151471,151473,151476],{"class":70,"line":3218},[68,151470,32329],{"class":85},[68,151472,151317],{"class":78},[68,151474,151475],{"class":316},"-=",[68,151477,151398],{"class":78},[68,151479,151480],{"class":70,"line":3223},[68,151481,3890],{"emptyLinePlaceholder":1567},[68,151483,151484],{"class":70,"line":3240},[68,151485,3890],{"emptyLinePlaceholder":1567},[68,151487,151488,151491,151493,151496,151498,151500,151502],{"class":70,"line":3245},[68,151489,151490],{"class":78},"account ",[68,151492,1685],{"class":316},[68,151494,151495],{"class":78}," Account(",[68,151497,151111],{"class":1742},[68,151499,13923],{"class":78},[68,151501,7899],{"class":85},[68,151503,1646],{"class":78},[68,151505,151506,151509,151511],{"class":70,"line":3250},[68,151507,151508],{"class":78},"account.deposit(",[68,151510,3213],{"class":85},[68,151512,1646],{"class":78},[68,151514,151515,151518,151520],{"class":70,"line":3255},[68,151516,151517],{"class":78},"account.withdraw(",[68,151519,1940],{"class":85},[68,151521,1646],{"class":78},[68,151523,151524,151526],{"class":70,"line":3269},[68,151525,31899],{"class":85},[68,151527,151528],{"class":78},"(account.get_balance())\n",[170,151530,151531],{},"封装的意义是避免外部随意修改内部状态。",[14,151533,151535],{"id":151534},"_118-继承","11.8 继承",[170,151537,151538],{},"继承可以让子类复用父类的属性和方法。",[58,151540,151542],{"className":31862,"code":151541,"language":31864,"meta":63,"style":63},"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",[65,151543,151544,151553,151562,151573,151577,151581,151595,151604,151615,151619,151623,151633,151638],{"__ignoreMap":63},[68,151545,151546,151548,151551],{"class":70,"line":71},[68,151547,16182],{"class":316},[68,151549,151550],{"class":74}," Animal",[68,151552,5229],{"class":78},[68,151554,151555,151557,151560],{"class":70,"line":82},[68,151556,32285],{"class":316},[68,151558,151559],{"class":74}," eat",[68,151561,32291],{"class":78},[68,151563,151564,151566,151568,151571],{"class":70,"line":98},[68,151565,33935],{"class":85},[68,151567,1640],{"class":78},[68,151569,151570],{"class":1742},"\"吃东西\"",[68,151572,1646],{"class":78},[68,151574,151575],{"class":70,"line":104},[68,151576,3890],{"emptyLinePlaceholder":1567},[68,151578,151579],{"class":70,"line":112},[68,151580,3890],{"emptyLinePlaceholder":1567},[68,151582,151583,151585,151588,151590,151593],{"class":70,"line":124},[68,151584,16182],{"class":316},[68,151586,151587],{"class":74}," Dog",[68,151589,1640],{"class":78},[68,151591,151592],{"class":74},"Animal",[68,151594,32270],{"class":78},[68,151596,151597,151599,151602],{"class":70,"line":1496},[68,151598,32285],{"class":316},[68,151600,151601],{"class":74}," bark",[68,151603,32291],{"class":78},[68,151605,151606,151608,151610,151613],{"class":70,"line":1502},[68,151607,33935],{"class":85},[68,151609,1640],{"class":78},[68,151611,151612],{"class":1742},"\"汪汪\"",[68,151614,1646],{"class":78},[68,151616,151617],{"class":70,"line":1510},[68,151618,3890],{"emptyLinePlaceholder":1567},[68,151620,151621],{"class":70,"line":1521},[68,151622,3890],{"emptyLinePlaceholder":1567},[68,151624,151625,151628,151630],{"class":70,"line":3103},[68,151626,151627],{"class":78},"dog ",[68,151629,1685],{"class":316},[68,151631,151632],{"class":78}," Dog()\n",[68,151634,151635],{"class":70,"line":3108},[68,151636,151637],{"class":78},"dog.eat()\n",[68,151639,151640],{"class":70,"line":3114},[68,151641,151642],{"class":78},"dog.bark()\n",[170,151644,151645],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151647,151649],{"id":151648},"_119-方法重写","11.9 方法重写",[58,151651,151653],{"className":31862,"code":151652,"language":31864,"meta":63,"style":63},"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",[65,151654,151655,151663,151672,151683,151687,151691,151703,151711,151721,151725,151729,151742,151750,151761,151765,151769,151777,151787,151791,151796],{"__ignoreMap":63},[68,151656,151657,151659,151661],{"class":70,"line":71},[68,151658,16182],{"class":316},[68,151660,151550],{"class":74},[68,151662,5229],{"class":78},[68,151664,151665,151667,151670],{"class":70,"line":82},[68,151666,32285],{"class":316},[68,151668,151669],{"class":74}," speak",[68,151671,32291],{"class":78},[68,151673,151674,151676,151678,151681],{"class":70,"line":98},[68,151675,33935],{"class":85},[68,151677,1640],{"class":78},[68,151679,151680],{"class":1742},"\"动物叫\"",[68,151682,1646],{"class":78},[68,151684,151685],{"class":70,"line":104},[68,151686,3890],{"emptyLinePlaceholder":1567},[68,151688,151689],{"class":70,"line":112},[68,151690,3890],{"emptyLinePlaceholder":1567},[68,151692,151693,151695,151697,151699,151701],{"class":70,"line":124},[68,151694,16182],{"class":316},[68,151696,151587],{"class":74},[68,151698,1640],{"class":78},[68,151700,151592],{"class":74},[68,151702,32270],{"class":78},[68,151704,151705,151707,151709],{"class":70,"line":1496},[68,151706,32285],{"class":316},[68,151708,151669],{"class":74},[68,151710,32291],{"class":78},[68,151712,151713,151715,151717,151719],{"class":70,"line":1502},[68,151714,33935],{"class":85},[68,151716,1640],{"class":78},[68,151718,151612],{"class":1742},[68,151720,1646],{"class":78},[68,151722,151723],{"class":70,"line":1510},[68,151724,3890],{"emptyLinePlaceholder":1567},[68,151726,151727],{"class":70,"line":1521},[68,151728,3890],{"emptyLinePlaceholder":1567},[68,151730,151731,151733,151736,151738,151740],{"class":70,"line":3103},[68,151732,16182],{"class":316},[68,151734,151735],{"class":74}," Cat",[68,151737,1640],{"class":78},[68,151739,151592],{"class":74},[68,151741,32270],{"class":78},[68,151743,151744,151746,151748],{"class":70,"line":3108},[68,151745,32285],{"class":316},[68,151747,151669],{"class":74},[68,151749,32291],{"class":78},[68,151751,151752,151754,151756,151759],{"class":70,"line":3114},[68,151753,33935],{"class":85},[68,151755,1640],{"class":78},[68,151757,151758],{"class":1742},"\"喵喵\"",[68,151760,1646],{"class":78},[68,151762,151763],{"class":70,"line":3119},[68,151764,3890],{"emptyLinePlaceholder":1567},[68,151766,151767],{"class":70,"line":3133},[68,151768,3890],{"emptyLinePlaceholder":1567},[68,151770,151771,151773,151775],{"class":70,"line":3138},[68,151772,151627],{"class":78},[68,151774,1685],{"class":316},[68,151776,151632],{"class":78},[68,151778,151779,151782,151784],{"class":70,"line":3144},[68,151780,151781],{"class":78},"cat ",[68,151783,1685],{"class":316},[68,151785,151786],{"class":78}," Cat()\n",[68,151788,151789],{"class":70,"line":3165},[68,151790,3890],{"emptyLinePlaceholder":1567},[68,151792,151793],{"class":70,"line":3170},[68,151794,151795],{"class":78},"dog.speak()\n",[68,151797,151798],{"class":70,"line":3184},[68,151799,151800],{"class":78},"cat.speak()\n",[14,151802,151804],{"id":151803},"_1110-super","11.10 super",[170,151806,151807,151808,151811],{},"子类可以通过 ",[65,151809,151810],{},"super()"," 调用父类方法。",[58,151813,151815],{"className":31862,"code":151814,"language":31864,"meta":63,"style":63},"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",[65,151816,151817,151825,151834,151844,151848,151852,151864,151873,151884,151894,151898,151902,151918],{"__ignoreMap":63},[68,151818,151819,151821,151823],{"class":70,"line":71},[68,151820,16182],{"class":316},[68,151822,17057],{"class":74},[68,151824,5229],{"class":78},[68,151826,151827,151829,151831],{"class":70,"line":82},[68,151828,32285],{"class":316},[68,151830,32288],{"class":85},[68,151832,151833],{"class":78},"(self, name):\n",[68,151835,151836,151838,151840,151842],{"class":70,"line":98},[68,151837,32329],{"class":85},[68,151839,151013],{"class":78},[68,151841,1685],{"class":316},[68,151843,151018],{"class":78},[68,151845,151846],{"class":70,"line":104},[68,151847,3890],{"emptyLinePlaceholder":1567},[68,151849,151850],{"class":70,"line":112},[68,151851,3890],{"emptyLinePlaceholder":1567},[68,151853,151854,151856,151858,151860,151862],{"class":70,"line":124},[68,151855,16182],{"class":316},[68,151857,9387],{"class":74},[68,151859,1640],{"class":78},[68,151861,20533],{"class":74},[68,151863,32270],{"class":78},[68,151865,151866,151868,151870],{"class":70,"line":1496},[68,151867,32285],{"class":316},[68,151869,32288],{"class":85},[68,151871,151872],{"class":78},"(self, name, score):\n",[68,151874,151875,151877,151879,151881],{"class":70,"line":1502},[68,151876,32301],{"class":85},[68,151878,18748],{"class":78},[68,151880,32313],{"class":85},[68,151882,151883],{"class":78},"(name)\n",[68,151885,151886,151888,151890,151892],{"class":70,"line":1510},[68,151887,32329],{"class":85},[68,151889,151037],{"class":78},[68,151891,1685],{"class":316},[68,151893,3070],{"class":78},[68,151895,151896],{"class":70,"line":1521},[68,151897,3890],{"emptyLinePlaceholder":1567},[68,151899,151900],{"class":70,"line":3103},[68,151901,3890],{"emptyLinePlaceholder":1567},[68,151903,151904,151906,151908,151910,151912,151914,151916],{"class":70,"line":3108},[68,151905,150704],{"class":78},[68,151907,1685],{"class":316},[68,151909,151108],{"class":78},[68,151911,151111],{"class":1742},[68,151913,13923],{"class":78},[68,151915,2616],{"class":85},[68,151917,1646],{"class":78},[68,151919,151920,151922],{"class":70,"line":3114},[68,151921,31899],{"class":85},[68,151923,151924],{"class":78},"(student.name, student.score)\n",[14,151926,151928],{"id":151927},"_1111-多态","11.11 多态",[170,151930,151931],{},"多态指不同对象响应同一个方法，表现出不同结果。",[58,151933,151935],{"className":31862,"code":151934,"language":31864,"meta":63,"style":63},"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",[65,151936,151937,151945,151953,151963,151967,151971,151979,151987,151997,152001,152005,152015,152020,152024,152028,152033],{"__ignoreMap":63},[68,151938,151939,151941,151943],{"class":70,"line":71},[68,151940,16182],{"class":316},[68,151942,151587],{"class":74},[68,151944,5229],{"class":78},[68,151946,151947,151949,151951],{"class":70,"line":82},[68,151948,32285],{"class":316},[68,151950,151669],{"class":74},[68,151952,32291],{"class":78},[68,151954,151955,151957,151959,151961],{"class":70,"line":98},[68,151956,33935],{"class":85},[68,151958,1640],{"class":78},[68,151960,151612],{"class":1742},[68,151962,1646],{"class":78},[68,151964,151965],{"class":70,"line":104},[68,151966,3890],{"emptyLinePlaceholder":1567},[68,151968,151969],{"class":70,"line":112},[68,151970,3890],{"emptyLinePlaceholder":1567},[68,151972,151973,151975,151977],{"class":70,"line":124},[68,151974,16182],{"class":316},[68,151976,151735],{"class":74},[68,151978,5229],{"class":78},[68,151980,151981,151983,151985],{"class":70,"line":1496},[68,151982,32285],{"class":316},[68,151984,151669],{"class":74},[68,151986,32291],{"class":78},[68,151988,151989,151991,151993,151995],{"class":70,"line":1502},[68,151990,33935],{"class":85},[68,151992,1640],{"class":78},[68,151994,151758],{"class":1742},[68,151996,1646],{"class":78},[68,151998,151999],{"class":70,"line":1510},[68,152000,3890],{"emptyLinePlaceholder":1567},[68,152002,152003],{"class":70,"line":1521},[68,152004,3890],{"emptyLinePlaceholder":1567},[68,152006,152007,152009,152012],{"class":70,"line":3103},[68,152008,33431],{"class":316},[68,152010,152011],{"class":74}," make_sound",[68,152013,152014],{"class":78},"(animal):\n",[68,152016,152017],{"class":70,"line":3108},[68,152018,152019],{"class":78},"    animal.speak()\n",[68,152021,152022],{"class":70,"line":3114},[68,152023,3890],{"emptyLinePlaceholder":1567},[68,152025,152026],{"class":70,"line":3119},[68,152027,3890],{"emptyLinePlaceholder":1567},[68,152029,152030],{"class":70,"line":3133},[68,152031,152032],{"class":78},"make_sound(Dog())\n",[68,152034,152035],{"class":70,"line":3138},[68,152036,152037],{"class":78},"make_sound(Cat())\n",[170,152039,152040],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152042,152044],{"id":152043},"_1112-类属性和实例属性","11.12 类属性和实例属性",[170,152046,152047],{},"实例属性属于对象：",[58,152049,152051],{"className":31862,"code":152050,"language":31864,"meta":63,"style":63},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[65,152052,152053,152061,152069],{"__ignoreMap":63},[68,152054,152055,152057,152059],{"class":70,"line":71},[68,152056,16182],{"class":316},[68,152058,9387],{"class":74},[68,152060,5229],{"class":78},[68,152062,152063,152065,152067],{"class":70,"line":82},[68,152064,32285],{"class":316},[68,152066,32288],{"class":85},[68,152068,151833],{"class":78},[68,152070,152071,152073,152075,152077],{"class":70,"line":98},[68,152072,32329],{"class":85},[68,152074,151013],{"class":78},[68,152076,1685],{"class":316},[68,152078,151018],{"class":78},[170,152080,152081],{},"类属性属于类，所有对象共享：",[58,152083,152085],{"className":31862,"code":152084,"language":31864,"meta":63,"style":63},"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",[65,152086,152087,152095,152105,152109,152117,152127,152131,152135,152148,152162,152166,152173,152180],{"__ignoreMap":63},[68,152088,152089,152091,152093],{"class":70,"line":71},[68,152090,16182],{"class":316},[68,152092,9387],{"class":74},[68,152094,5229],{"class":78},[68,152096,152097,152100,152102],{"class":70,"line":82},[68,152098,152099],{"class":78},"    school ",[68,152101,1685],{"class":316},[68,152103,152104],{"class":1742}," \"黑马学校\"\n",[68,152106,152107],{"class":70,"line":98},[68,152108,3890],{"emptyLinePlaceholder":1567},[68,152110,152111,152113,152115],{"class":70,"line":104},[68,152112,32285],{"class":316},[68,152114,32288],{"class":85},[68,152116,151833],{"class":78},[68,152118,152119,152121,152123,152125],{"class":70,"line":112},[68,152120,32329],{"class":85},[68,152122,151013],{"class":78},[68,152124,1685],{"class":316},[68,152126,151018],{"class":78},[68,152128,152129],{"class":70,"line":124},[68,152130,3890],{"emptyLinePlaceholder":1567},[68,152132,152133],{"class":70,"line":1496},[68,152134,3890],{"emptyLinePlaceholder":1567},[68,152136,152137,152140,152142,152144,152146],{"class":70,"line":1502},[68,152138,152139],{"class":78},"s1 ",[68,152141,1685],{"class":316},[68,152143,151108],{"class":78},[68,152145,151111],{"class":1742},[68,152147,1646],{"class":78},[68,152149,152150,152153,152155,152157,152160],{"class":70,"line":1510},[68,152151,152152],{"class":78},"s2 ",[68,152154,1685],{"class":316},[68,152156,151108],{"class":78},[68,152158,152159],{"class":1742},"\"小红\"",[68,152161,1646],{"class":78},[68,152163,152164],{"class":70,"line":1521},[68,152165,3890],{"emptyLinePlaceholder":1567},[68,152167,152168,152170],{"class":70,"line":3103},[68,152169,31899],{"class":85},[68,152171,152172],{"class":78},"(s1.school)\n",[68,152174,152175,152177],{"class":70,"line":3108},[68,152176,31899],{"class":85},[68,152178,152179],{"class":78},"(s2.school)\n",[68,152181,152182,152184],{"class":70,"line":3114},[68,152183,31899],{"class":85},[68,152185,152186],{"class":78},"(Student.school)\n",[170,152188,152189],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152191,152193],{"id":152192},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,152195,152197],{"id":152196},"_11131-类方法","11.13.1 类方法",[170,152199,152200,152201,152204,152205,29869],{},"类方法使用 ",[65,152202,152203],{},"@classmethod","，第一个参数通常是 ",[65,152206,152207],{},"cls",[58,152209,152211],{"className":31862,"code":152210,"language":31864,"meta":63,"style":63},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[65,152212,152213,152221,152229,152233,152241,152251,152261,152265,152269],{"__ignoreMap":63},[68,152214,152215,152217,152219],{"class":70,"line":71},[68,152216,16182],{"class":316},[68,152218,9387],{"class":74},[68,152220,5229],{"class":78},[68,152222,152223,152225,152227],{"class":70,"line":82},[68,152224,152099],{"class":78},[68,152226,1685],{"class":316},[68,152228,152104],{"class":1742},[68,152230,152231],{"class":70,"line":98},[68,152232,3890],{"emptyLinePlaceholder":1567},[68,152234,152235,152238],{"class":70,"line":104},[68,152236,152237],{"class":74},"    @",[68,152239,152240],{"class":85},"classmethod\n",[68,152242,152243,152245,152248],{"class":70,"line":112},[68,152244,32285],{"class":316},[68,152246,152247],{"class":74}," get_school",[68,152249,152250],{"class":78},"(cls):\n",[68,152252,152253,152255,152258],{"class":70,"line":124},[68,152254,16240],{"class":316},[68,152256,152257],{"class":85}," cls",[68,152259,152260],{"class":78},".school\n",[68,152262,152263],{"class":70,"line":1496},[68,152264,3890],{"emptyLinePlaceholder":1567},[68,152266,152267],{"class":70,"line":1502},[68,152268,3890],{"emptyLinePlaceholder":1567},[68,152270,152271,152273],{"class":70,"line":1510},[68,152272,31899],{"class":85},[68,152274,152275],{"class":78},"(Student.get_school())\n",[19,152277,152279],{"id":152278},"_11132-静态方法","11.13.2 静态方法",[170,152281,152282,152283,152286],{},"静态方法使用 ",[65,152284,152285],{},"@staticmethod","，不需要访问实例和类。",[58,152288,152290],{"className":31862,"code":152289,"language":31864,"meta":63,"style":63},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[65,152291,152292,152301,152308,152317,152328,152332,152336],{"__ignoreMap":63},[68,152293,152294,152296,152299],{"class":70,"line":71},[68,152295,16182],{"class":316},[68,152297,152298],{"class":74}," MathUtils",[68,152300,5229],{"class":78},[68,152302,152303,152305],{"class":70,"line":82},[68,152304,152237],{"class":74},[68,152306,152307],{"class":85},"staticmethod\n",[68,152309,152310,152312,152314],{"class":70,"line":98},[68,152311,32285],{"class":316},[68,152313,6698],{"class":74},[68,152315,152316],{"class":78},"(a, b):\n",[68,152318,152319,152321,152323,152325],{"class":70,"line":104},[68,152320,16240],{"class":316},[68,152322,12357],{"class":78},[68,152324,2109],{"class":316},[68,152326,152327],{"class":78}," b\n",[68,152329,152330],{"class":70,"line":112},[68,152331,3890],{"emptyLinePlaceholder":1567},[68,152333,152334],{"class":70,"line":124},[68,152335,3890],{"emptyLinePlaceholder":1567},[68,152337,152338,152340,152343,152345,152347,152349],{"class":70,"line":1496},[68,152339,31899],{"class":85},[68,152341,152342],{"class":78},"(MathUtils.add(",[68,152344,1846],{"class":85},[68,152346,13923],{"class":78},[68,152348,1715],{"class":85},[68,152350,31981],{"class":78},[170,152352,152353],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152355,152357],{"id":152356},"_1114-dataclass","11.14 dataclass",[170,152359,152360,152363],{},[65,152361,152362],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[58,152365,152367],{"className":31862,"code":152366,"language":31864,"meta":63,"style":63},"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",[65,152368,152369,152381,152385,152389,152394,152402,152410,152418,152426,152430,152434,152454],{"__ignoreMap":63},[68,152370,152371,152373,152376,152378],{"class":70,"line":71},[68,152372,32221],{"class":316},[68,152374,152375],{"class":78}," dataclasses ",[68,152377,31876],{"class":316},[68,152379,152380],{"class":78}," dataclass\n",[68,152382,152383],{"class":70,"line":82},[68,152384,3890],{"emptyLinePlaceholder":1567},[68,152386,152387],{"class":70,"line":98},[68,152388,3890],{"emptyLinePlaceholder":1567},[68,152390,152391],{"class":70,"line":104},[68,152392,152393],{"class":74},"@dataclass\n",[68,152395,152396,152398,152400],{"class":70,"line":112},[68,152397,16182],{"class":316},[68,152399,9387],{"class":74},[68,152401,5229],{"class":78},[68,152403,152404,152407],{"class":70,"line":124},[68,152405,152406],{"class":78},"    name: ",[68,152408,152409],{"class":85},"str\n",[68,152411,152412,152415],{"class":70,"line":1496},[68,152413,152414],{"class":78},"    age: ",[68,152416,152417],{"class":85},"int\n",[68,152419,152420,152423],{"class":70,"line":1502},[68,152421,152422],{"class":78},"    score: ",[68,152424,152425],{"class":85},"float\n",[68,152427,152428],{"class":70,"line":1510},[68,152429,3890],{"emptyLinePlaceholder":1567},[68,152431,152432],{"class":70,"line":1521},[68,152433,3890],{"emptyLinePlaceholder":1567},[68,152435,152436,152438,152440,152442,152444,152446,152448,152450,152452],{"class":70,"line":3103},[68,152437,150704],{"class":78},[68,152439,1685],{"class":316},[68,152441,151108],{"class":78},[68,152443,151111],{"class":1742},[68,152445,13923],{"class":78},[68,152447,2278],{"class":85},[68,152449,13923],{"class":78},[68,152451,2616],{"class":85},[68,152453,1646],{"class":78},[68,152455,152456,152458],{"class":70,"line":3108},[68,152457,31899],{"class":85},[68,152459,151265],{"class":78},[170,152461,152462,152463,1841,152465,152468],{},"它会自动生成 ",[65,152464,32313],{},[65,152466,152467],{},"__repr__"," 等方法。适合数据模型类。",[14,152470,152472],{"id":152471},"_1115-小案例学生类","11.15 小案例：学生类",[58,152474,152476],{"className":31862,"code":152475,"language":31864,"meta":63,"style":63},"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",[65,152477,152478,152486,152495,152507,152517,152527,152537,152541,152550,152563,152567,152576,152582,152594,152606,152618,152630,152634,152638,152644,152654,152663,152673,152681,152689,152698,152702,152706,152714,152750,152754,152758,152783,152790],{"__ignoreMap":63},[68,152479,152480,152482,152484],{"class":70,"line":71},[68,152481,16182],{"class":316},[68,152483,9387],{"class":74},[68,152485,5229],{"class":78},[68,152487,152488,152490,152492],{"class":70,"line":82},[68,152489,32285],{"class":316},[68,152491,32288],{"class":85},[68,152493,152494],{"class":78},"(self, student_id, name, age, score):\n",[68,152496,152497,152499,152502,152504],{"class":70,"line":98},[68,152498,32329],{"class":85},[68,152500,152501],{"class":78},".student_id ",[68,152503,1685],{"class":316},[68,152505,152506],{"class":78}," student_id\n",[68,152508,152509,152511,152513,152515],{"class":70,"line":104},[68,152510,32329],{"class":85},[68,152512,151013],{"class":78},[68,152514,1685],{"class":316},[68,152516,151018],{"class":78},[68,152518,152519,152521,152523,152525],{"class":70,"line":112},[68,152520,32329],{"class":85},[68,152522,151025],{"class":78},[68,152524,1685],{"class":316},[68,152526,151030],{"class":78},[68,152528,152529,152531,152533,152535],{"class":70,"line":124},[68,152530,32329],{"class":85},[68,152532,151037],{"class":78},[68,152534,1685],{"class":316},[68,152536,3070],{"class":78},[68,152538,152539],{"class":70,"line":1496},[68,152540,3890],{"emptyLinePlaceholder":1567},[68,152542,152543,152545,152548],{"class":70,"line":1502},[68,152544,32285],{"class":316},[68,152546,152547],{"class":74}," is_passed",[68,152549,32291],{"class":78},[68,152551,152552,152554,152556,152558,152560],{"class":70,"line":1510},[68,152553,16240],{"class":316},[68,152555,40357],{"class":85},[68,152557,151037],{"class":78},[68,152559,3201],{"class":316},[68,152561,152562],{"class":85}," 60\n",[68,152564,152565],{"class":70,"line":1521},[68,152566,3890],{"emptyLinePlaceholder":1567},[68,152568,152569,152571,152574],{"class":70,"line":3103},[68,152570,32285],{"class":316},[68,152572,152573],{"class":74}," to_dict",[68,152575,32291],{"class":78},[68,152577,152578,152580],{"class":70,"line":3108},[68,152579,16240],{"class":316},[68,152581,79],{"class":78},[68,152583,152584,152587,152589,152591],{"class":70,"line":3114},[68,152585,152586],{"class":1742},"            \"student_id\"",[68,152588,89],{"class":78},[68,152590,32307],{"class":85},[68,152592,152593],{"class":78},".student_id,\n",[68,152595,152596,152599,152601,152603],{"class":70,"line":3119},[68,152597,152598],{"class":1742},"            \"name\"",[68,152600,89],{"class":78},[68,152602,32307],{"class":85},[68,152604,152605],{"class":78},".name,\n",[68,152607,152608,152611,152613,152615],{"class":70,"line":3133},[68,152609,152610],{"class":1742},"            \"age\"",[68,152612,89],{"class":78},[68,152614,32307],{"class":85},[68,152616,152617],{"class":78},".age,\n",[68,152619,152620,152623,152625,152627],{"class":70,"line":3138},[68,152621,152622],{"class":1742},"            \"score\"",[68,152624,89],{"class":78},[68,152626,32307],{"class":85},[68,152628,152629],{"class":78},".score,\n",[68,152631,152632],{"class":70,"line":3144},[68,152633,4019],{"class":78},[68,152635,152636],{"class":70,"line":3165},[68,152637,3890],{"emptyLinePlaceholder":1567},[68,152639,152640,152642],{"class":70,"line":3170},[68,152641,152237],{"class":74},[68,152643,152240],{"class":85},[68,152645,152646,152648,152651],{"class":70,"line":3184},[68,152647,32285],{"class":316},[68,152649,152650],{"class":74}," from_dict",[68,152652,152653],{"class":78},"(cls, data):\n",[68,152655,152656,152658,152660],{"class":70,"line":3189},[68,152657,16240],{"class":316},[68,152659,152257],{"class":85},[68,152661,152662],{"class":78},"(\n",[68,152664,152665,152668,152671],{"class":70,"line":3218},[68,152666,152667],{"class":78},"            data[",[68,152669,152670],{"class":1742},"\"student_id\"",[68,152672,89311],{"class":78},[68,152674,152675,152677,152679],{"class":70,"line":3223},[68,152676,152667],{"class":78},[68,152678,64157],{"class":1742},[68,152680,89311],{"class":78},[68,152682,152683,152685,152687],{"class":70,"line":3240},[68,152684,152667],{"class":78},[68,152686,70602],{"class":1742},[68,152688,89311],{"class":78},[68,152690,152691,152693,152696],{"class":70,"line":3245},[68,152692,152667],{"class":78},[68,152694,152695],{"class":1742},"\"score\"",[68,152697,89311],{"class":78},[68,152699,152700],{"class":70,"line":3250},[68,152701,39610],{"class":78},[68,152703,152704],{"class":70,"line":3255},[68,152705,3890],{"emptyLinePlaceholder":1567},[68,152707,152708,152710,152712],{"class":70,"line":3269},[68,152709,32285],{"class":316},[68,152711,151204],{"class":85},[68,152713,32291],{"class":78},[68,152715,152716,152718,152720,152722,152724,152727,152729,152732,152734,152736,152738,152740,152742,152744,152746,152748],{"class":70,"line":3274},[68,152717,16240],{"class":316},[68,152719,151213],{"class":316},[68,152721,1880],{"class":1742},[68,152723,150675],{"class":85},[68,152725,152726],{"class":78},".student_id",[68,152728,2573],{"class":85},[68,152730,152731],{"class":85}," {self",[68,152733,81778],{"class":78},[68,152735,2573],{"class":85},[68,152737,152731],{"class":85},[68,152739,81790],{"class":78},[68,152741,2573],{"class":85},[68,152743,152731],{"class":85},[68,152745,151085],{"class":78},[68,152747,2573],{"class":85},[68,152749,26619],{"class":1742},[68,152751,152752],{"class":70,"line":4067},[68,152753,3890],{"emptyLinePlaceholder":1567},[68,152755,152756],{"class":70,"line":4081},[68,152757,3890],{"emptyLinePlaceholder":1567},[68,152759,152760,152762,152764,152766,152769,152771,152773,152775,152777,152779,152781],{"class":70,"line":4089},[68,152761,150704],{"class":78},[68,152763,1685],{"class":316},[68,152765,151108],{"class":78},[68,152767,152768],{"class":1742},"\"001\"",[68,152770,13923],{"class":78},[68,152772,151111],{"class":1742},[68,152774,13923],{"class":78},[68,152776,2278],{"class":85},[68,152778,13923],{"class":78},[68,152780,2616],{"class":85},[68,152782,1646],{"class":78},[68,152784,152785,152787],{"class":70,"line":4094},[68,152786,31899],{"class":85},[68,152788,152789],{"class":78},"(student.is_passed())\n",[68,152791,152792,152794],{"class":70,"line":4100},[68,152793,31899],{"class":85},[68,152795,152796],{"class":78},"(student.to_dict())\n",[170,152798,152799,102493,152802,152805],{},[65,152800,152801],{},"to_dict()",[65,152803,152804],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152807,152809],{"id":152808},"_1116-易错点","11.16 易错点",[263,152811,152812,152818,152824,152829,152832,152835],{},[27,152813,152814,152815,29869],{},"类名推荐使用大驼峰，如 ",[65,152816,152817],{},"StudentManager",[27,152819,152820,152821,152823],{},"方法第一个参数必须写 ",[65,152822,32307],{},"，调用时不用传。",[27,152825,152826,152828],{},[65,152827,32313],{}," 不是普通方法，它在创建对象时自动执行。",[27,152830,152831],{},"私有属性不是绝对安全，只是约定和名称改写。",[27,152833,152834],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[27,152836,152837],{},"类中方法太多时，说明职责可能过重。",[14,152839,152841],{"id":152840},"_1117-本章练习","11.17 本章练习",[263,152843,152844,152850,152856,152861,152874],{},[27,152845,152846,152847,152849],{},"定义 ",[65,152848,150791],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[27,152851,152846,152852,152855],{},[65,152853,152854],{},"Account"," 类，实现存款、取款、查询余额。",[27,152857,152846,152858,152860],{},[65,152859,18713],{}," 类，计算圆的周长和面积。",[27,152862,152846,152863,1841,152866,152869,152870,152873],{},[65,152864,152865],{},"Dog",[65,152867,152868],{},"Cat"," 类，并用同一个函数调用它们的 ",[65,152871,152872],{},"speak()"," 方法。",[27,152875,105841,152876,152878,152879,29869],{},[65,152877,152362],{}," 定义一个商品类 ",[65,152880,152881],{},"Product",[1553,152883,152884],{},"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":63,"searchDepth":82,"depth":82,"links":152886},[152887,152888,152889,152890,152891,152892,152894,152895,152896,152897,152898,152899,152900,152904,152905,152906,152907],{"id":150555,"depth":82,"text":150556},{"id":150738,"depth":82,"text":150739},{"id":150802,"depth":82,"text":150803},{"id":150879,"depth":82,"text":150880},{"id":150978,"depth":82,"text":150979},{"id":151142,"depth":82,"text":152893},"11.6 str",{"id":151268,"depth":82,"text":151269},{"id":151534,"depth":82,"text":151535},{"id":151648,"depth":82,"text":151649},{"id":151803,"depth":82,"text":151804},{"id":151927,"depth":82,"text":151928},{"id":152043,"depth":82,"text":152044},{"id":152192,"depth":82,"text":152193,"children":152901},[152902,152903],{"id":152196,"depth":98,"text":152197},{"id":152278,"depth":98,"text":152279},{"id":152356,"depth":82,"text":152357},{"id":152471,"depth":82,"text":152472},{"id":152808,"depth":82,"text":152809},{"id":152840,"depth":82,"text":152841},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150547,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152914,"title":152915,"body":152916,"description":1564,"extension":1565,"meta":156229,"navigation":1567,"path":156230,"seo":156231,"stem":156232,"__hash__":156233},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152917,"toc":156205},[152918,152921,152925,152928,152931,152960,152963,152971,152975,152979,152982,153005,153008,153014,153018,154464,154467,154488,154492,154495,154507,154510,154694,154697,154823,154826,154830,154834,154970,154974,155060,155064,155146,155150,155187,155191,155380,155384,155387,155617,155621,155624,155805,155808,155812,155815,155821,155824,155850,155854,155857,155871,155874,155899,155902,155916,155919,155936,155939,155956,155959,155976,155980,156006,156010,156033,156037,156040,156042,156048,156050,156071,156074,156080,156086,156090,156093,156169,156172,156176,156202],[10,152919,152915],{"id":152920},"_12-综合案例与复习路线",[14,152922,152924],{"id":152923},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[170,152926,152927],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[170,152929,152930],{},"一个合格的入门综合项目最好覆盖：",[263,152932,152933,152936,152939,152942,152945,152948,152951,152954,152957],{},[27,152934,152935],{},"输入输出。",[27,152937,152938],{},"判断和循环。",[27,152940,152941],{},"函数拆分。",[27,152943,152944],{},"列表、字典等容器。",[27,152946,152947],{},"文件持久化。",[27,152949,152950],{},"异常处理。",[27,152952,152953],{},"模块拆分。",[27,152955,152956],{},"可选：面向对象。",[27,152958,152959],{},"可选：数据可视化。",[170,152961,152962],{},"本章整理两个方向：",[263,152964,152965,152968],{},[27,152966,152967],{},"学生管理系统。",[27,152969,152970],{},"销售数据统计和可视化。",[14,152972,152974],{"id":152973},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,152976,152978],{"id":152977},"_1221-需求","12.2.1 需求",[170,152980,152981],{},"实现一个命令行学生管理系统：",[263,152983,152984,152987,152990,152993,152996,152999,153002],{},[27,152985,152986],{},"添加学生。",[27,152988,152989],{},"删除学生。",[27,152991,152992],{},"修改学生。",[27,152994,152995],{},"查询学生。",[27,152997,152998],{},"显示所有学生。",[27,153000,153001],{},"保存到 JSON 文件。",[27,153003,153004],{},"程序启动时自动读取 JSON 文件。",[170,153006,153007],{},"学生字段：",[58,153009,153012],{"className":153010,"code":153011,"language":6676,"meta":63},[6674],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[65,153013,153011],{"__ignoreMap":63},[14,153015,153017],{"id":153016},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[58,153019,153021],{"className":31862,"code":153020,"language":31864,"meta":63,"style":63},"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",[65,153022,153023,153029,153039,153043,153057,153061,153065,153074,153086,153092,153096,153102,153133,153143,153150,153161,153167,153171,153175,153185,153216,153242,153246,153250,153259,153270,153281,153292,153303,153314,153325,153336,153340,153344,153354,153366,153382,153389,153396,153400,153404,153414,153422,153429,153442,153452,153463,153467,153471,153480,153488,153494,153506,153514,153525,153529,153533,153542,153558,153562,153569,153580,153585,153589,153605,153620,153635,153639,153644,153652,153660,153668,153676,153680,153685,153696,153700,153704,153713,153728,153738,153742,153754,153765,153769,153773,153778,153782,153793,153797,153801,153810,153825,153833,153837,153849,153859,153863,153867,153882,153895,153908,153912,153925,153937,153949,153953,153957,153968,153972,153976,153985,154000,154008,154012,154024,154034,154038,154042,154047,154051,154055,154065,154071,154093,154112,154131,154150,154155,154159,154163,154172,154180,154191,154195,154199,154225,154235,154240,154244,154248,154256,154266,154270,154278,154283,154299,154303,154317,154322,154336,154341,154354,154359,154372,154377,154390,154395,154408,154419,154423,154429,154440,154444,154448,154460],{"__ignoreMap":63},[68,153024,153025,153027],{"class":70,"line":71},[68,153026,31876],{"class":316},[68,153028,148314],{"class":78},[68,153030,153031,153033,153035,153037],{"class":70,"line":82},[68,153032,32221],{"class":316},[68,153034,109785],{"class":78},[68,153036,31876],{"class":316},[68,153038,109790],{"class":78},[68,153040,153041],{"class":70,"line":98},[68,153042,3890],{"emptyLinePlaceholder":1567},[68,153044,153045,153048,153050,153052,153055],{"class":70,"line":104},[68,153046,153047],{"class":85},"DATA_FILE",[68,153049,15052],{"class":316},[68,153051,110019],{"class":78},[68,153053,153054],{"class":1742},"\"students.json\"",[68,153056,1646],{"class":78},[68,153058,153059],{"class":70,"line":112},[68,153060,3890],{"emptyLinePlaceholder":1567},[68,153062,153063],{"class":70,"line":124},[68,153064,3890],{"emptyLinePlaceholder":1567},[68,153066,153067,153069,153072],{"class":70,"line":1496},[68,153068,33431],{"class":316},[68,153070,153071],{"class":74}," load_students",[68,153073,33437],{"class":78},[68,153075,153076,153078,153080,153083],{"class":70,"line":1502},[68,153077,4591],{"class":316},[68,153079,40414],{"class":316},[68,153081,153082],{"class":85}," DATA_FILE",[68,153084,153085],{"class":78},".exists():\n",[68,153087,153088,153090],{"class":70,"line":1510},[68,153089,16240],{"class":316},[68,153091,53320],{"class":78},[68,153093,153094],{"class":70,"line":1521},[68,153095,3890],{"emptyLinePlaceholder":1567},[68,153097,153098,153100],{"class":70,"line":3103},[68,153099,127258],{"class":316},[68,153101,5229],{"class":78},[68,153103,153104,153107,153109,153111,153113,153115,153117,153119,153121,153123,153125,153127,153129,153131],{"class":70,"line":3108},[68,153105,153106],{"class":316},"        with",[68,153108,148014],{"class":85},[68,153110,1640],{"class":78},[68,153112,153047],{"class":85},[68,153114,13923],{"class":78},[68,153116,148024],{"class":1742},[68,153118,13923],{"class":78},[68,153120,148029],{"class":6705},[68,153122,1685],{"class":316},[68,153124,148034],{"class":1742},[68,153126,15202],{"class":78},[68,153128,32867],{"class":316},[68,153130,149376],{"class":6705},[68,153132,5229],{"class":78},[68,153134,153135,153137,153139,153141],{"class":70,"line":3114},[68,153136,17219],{"class":316},[68,153138,149387],{"class":78},[68,153140,46838],{"class":6705},[68,153142,1646],{"class":78},[68,153144,153145,153147],{"class":70,"line":3119},[68,153146,127286],{"class":316},[68,153148,153149],{"class":78}," json.JSONDecodeError:\n",[68,153151,153152,153154,153156,153159],{"class":70,"line":3133},[68,153153,33935],{"class":85},[68,153155,1640],{"class":78},[68,153157,153158],{"class":1742},"\"数据文件格式错误，已使用空数据启动\"",[68,153160,1646],{"class":78},[68,153162,153163,153165],{"class":70,"line":3138},[68,153164,16240],{"class":316},[68,153166,53320],{"class":78},[68,153168,153169],{"class":70,"line":3144},[68,153170,3890],{"emptyLinePlaceholder":1567},[68,153172,153173],{"class":70,"line":3165},[68,153174,3890],{"emptyLinePlaceholder":1567},[68,153176,153177,153179,153182],{"class":70,"line":3170},[68,153178,33431],{"class":316},[68,153180,153181],{"class":74}," save_students",[68,153183,153184],{"class":78},"(students):\n",[68,153186,153187,153189,153191,153193,153195,153197,153200,153202,153204,153206,153208,153210,153212,153214],{"class":70,"line":3184},[68,153188,35662],{"class":316},[68,153190,148014],{"class":85},[68,153192,1640],{"class":78},[68,153194,153047],{"class":85},[68,153196,13923],{"class":78},[68,153198,153199],{"class":1742},"\"w\"",[68,153201,13923],{"class":78},[68,153203,148029],{"class":6705},[68,153205,1685],{"class":316},[68,153207,148034],{"class":1742},[68,153209,15202],{"class":78},[68,153211,32867],{"class":316},[68,153213,149376],{"class":6705},[68,153215,5229],{"class":78},[68,153217,153218,153221,153223,153225,153227,153229,153231,153233,153236,153238,153240],{"class":70,"line":3189},[68,153219,153220],{"class":78},"        json.dump(students, ",[68,153222,46838],{"class":6705},[68,153224,13923],{"class":78},[68,153226,148360],{"class":6705},[68,153228,1685],{"class":316},[68,153230,35471],{"class":85},[68,153232,13923],{"class":78},[68,153234,153235],{"class":6705},"indent",[68,153237,1685],{"class":316},[68,153239,1715],{"class":85},[68,153241,1646],{"class":78},[68,153243,153244],{"class":70,"line":3218},[68,153245,3890],{"emptyLinePlaceholder":1567},[68,153247,153248],{"class":70,"line":3223},[68,153249,3890],{"emptyLinePlaceholder":1567},[68,153251,153252,153254,153257],{"class":70,"line":3240},[68,153253,33431],{"class":316},[68,153255,153256],{"class":74}," show_menu",[68,153258,33437],{"class":78},[68,153260,153261,153263,153265,153268],{"class":70,"line":3245},[68,153262,32783],{"class":85},[68,153264,1640],{"class":78},[68,153266,153267],{"class":1742},"\"====== 学生管理系统 ======\"",[68,153269,1646],{"class":78},[68,153271,153272,153274,153276,153279],{"class":70,"line":3250},[68,153273,32783],{"class":85},[68,153275,1640],{"class":78},[68,153277,153278],{"class":1742},"\"1. 添加学生\"",[68,153280,1646],{"class":78},[68,153282,153283,153285,153287,153290],{"class":70,"line":3255},[68,153284,32783],{"class":85},[68,153286,1640],{"class":78},[68,153288,153289],{"class":1742},"\"2. 删除学生\"",[68,153291,1646],{"class":78},[68,153293,153294,153296,153298,153301],{"class":70,"line":3269},[68,153295,32783],{"class":85},[68,153297,1640],{"class":78},[68,153299,153300],{"class":1742},"\"3. 修改学生\"",[68,153302,1646],{"class":78},[68,153304,153305,153307,153309,153312],{"class":70,"line":3274},[68,153306,32783],{"class":85},[68,153308,1640],{"class":78},[68,153310,153311],{"class":1742},"\"4. 查询学生\"",[68,153313,1646],{"class":78},[68,153315,153316,153318,153320,153323],{"class":70,"line":4067},[68,153317,32783],{"class":85},[68,153319,1640],{"class":78},[68,153321,153322],{"class":1742},"\"5. 显示所有学生\"",[68,153324,1646],{"class":78},[68,153326,153327,153329,153331,153334],{"class":70,"line":4081},[68,153328,32783],{"class":85},[68,153330,1640],{"class":78},[68,153332,153333],{"class":1742},"\"0. 退出系统\"",[68,153335,1646],{"class":78},[68,153337,153338],{"class":70,"line":4089},[68,153339,3890],{"emptyLinePlaceholder":1567},[68,153341,153342],{"class":70,"line":4094},[68,153343,3890],{"emptyLinePlaceholder":1567},[68,153345,153346,153348,153351],{"class":70,"line":4100},[68,153347,33431],{"class":316},[68,153349,153350],{"class":74}," find_student",[68,153352,153353],{"class":78},"(students, student_id):\n",[68,153355,153356,153358,153361,153363],{"class":70,"line":4106},[68,153357,4691],{"class":316},[68,153359,153360],{"class":78}," student ",[68,153362,27529],{"class":316},[68,153364,153365],{"class":78}," students:\n",[68,153367,153368,153370,153373,153375,153377,153379],{"class":70,"line":4111},[68,153369,3987],{"class":316},[68,153371,153372],{"class":78}," student[",[68,153374,152670],{"class":1742},[68,153376,5933],{"class":78},[68,153378,4439],{"class":316},[68,153380,153381],{"class":78}," student_id:\n",[68,153383,153384,153386],{"class":70,"line":9437},[68,153385,17219],{"class":316},[68,153387,153388],{"class":78}," student\n",[68,153390,153391,153393],{"class":70,"line":9461},[68,153392,5580],{"class":316},[68,153394,153395],{"class":85}," None\n",[68,153397,153398],{"class":70,"line":9466},[68,153399,3890],{"emptyLinePlaceholder":1567},[68,153401,153402],{"class":70,"line":9472},[68,153403,3890],{"emptyLinePlaceholder":1567},[68,153405,153406,153408,153411],{"class":70,"line":9499},[68,153407,33431],{"class":316},[68,153409,153410],{"class":74}," input_int",[68,153412,153413],{"class":78},"(prompt):\n",[68,153415,153416,153418,153420],{"class":70,"line":9504},[68,153417,3741],{"class":316},[68,153419,96767],{"class":85},[68,153421,5229],{"class":78},[68,153423,153424,153427],{"class":70,"line":9510},[68,153425,153426],{"class":316},"        try",[68,153428,5229],{"class":78},[68,153430,153431,153433,153435,153437,153439],{"class":70,"line":9522},[68,153432,17219],{"class":316},[68,153434,3872],{"class":85},[68,153436,1640],{"class":78},[68,153438,55302],{"class":85},[68,153440,153441],{"class":78},"(prompt))\n",[68,153443,153444,153447,153450],{"class":70,"line":9534},[68,153445,153446],{"class":316},"        except",[68,153448,153449],{"class":85}," ValueError",[68,153451,5229],{"class":78},[68,153453,153454,153456,153458,153461],{"class":70,"line":9546},[68,153455,36134],{"class":85},[68,153457,1640],{"class":78},[68,153459,153460],{"class":1742},"\"请输入整数\"",[68,153462,1646],{"class":78},[68,153464,153465],{"class":70,"line":11204},[68,153466,3890],{"emptyLinePlaceholder":1567},[68,153468,153469],{"class":70,"line":11229},[68,153470,3890],{"emptyLinePlaceholder":1567},[68,153472,153473,153475,153478],{"class":70,"line":11252},[68,153474,33431],{"class":316},[68,153476,153477],{"class":74}," input_float",[68,153479,153413],{"class":78},[68,153481,153482,153484,153486],{"class":70,"line":11276},[68,153483,3741],{"class":316},[68,153485,96767],{"class":85},[68,153487,5229],{"class":78},[68,153489,153490,153492],{"class":70,"line":11281},[68,153491,153426],{"class":316},[68,153493,5229],{"class":78},[68,153495,153496,153498,153500,153502,153504],{"class":70,"line":11286},[68,153497,17219],{"class":316},[68,153499,111271],{"class":85},[68,153501,1640],{"class":78},[68,153503,55302],{"class":85},[68,153505,153441],{"class":78},[68,153507,153508,153510,153512],{"class":70,"line":11291},[68,153509,153446],{"class":316},[68,153511,153449],{"class":85},[68,153513,5229],{"class":78},[68,153515,153516,153518,153520,153523],{"class":70,"line":11300},[68,153517,36134],{"class":85},[68,153519,1640],{"class":78},[68,153521,153522],{"class":1742},"\"请输入数字\"",[68,153524,1646],{"class":78},[68,153526,153527],{"class":70,"line":11305},[68,153528,3890],{"emptyLinePlaceholder":1567},[68,153530,153531],{"class":70,"line":11311},[68,153532,3890],{"emptyLinePlaceholder":1567},[68,153534,153535,153537,153540],{"class":70,"line":11332},[68,153536,33431],{"class":316},[68,153538,153539],{"class":74}," add_student",[68,153541,153184],{"class":78},[68,153543,153544,153547,153549,153551,153553,153556],{"class":70,"line":11338},[68,153545,153546],{"class":78},"    student_id ",[68,153548,1685],{"class":316},[68,153550,62083],{"class":85},[68,153552,1640],{"class":78},[68,153554,153555],{"class":1742},"\"请输入学号:\"",[68,153557,1646],{"class":78},[68,153559,153560],{"class":70,"line":11352},[68,153561,3890],{"emptyLinePlaceholder":1567},[68,153563,153564,153566],{"class":70,"line":11358},[68,153565,4591],{"class":316},[68,153567,153568],{"class":78}," find_student(students, student_id):\n",[68,153570,153571,153573,153575,153578],{"class":70,"line":11385},[68,153572,33935],{"class":85},[68,153574,1640],{"class":78},[68,153576,153577],{"class":1742},"\"学号已存在\"",[68,153579,1646],{"class":78},[68,153581,153582],{"class":70,"line":11394},[68,153583,153584],{"class":316},"        return\n",[68,153586,153587],{"class":70,"line":11400},[68,153588,3890],{"emptyLinePlaceholder":1567},[68,153590,153591,153594,153596,153598,153600,153603],{"class":70,"line":11408},[68,153592,153593],{"class":78},"    name ",[68,153595,1685],{"class":316},[68,153597,62083],{"class":85},[68,153599,1640],{"class":78},[68,153601,153602],{"class":1742},"\"请输入姓名:\"",[68,153604,1646],{"class":78},[68,153606,153607,153610,153612,153615,153618],{"class":70,"line":11413},[68,153608,153609],{"class":78},"    age ",[68,153611,1685],{"class":316},[68,153613,153614],{"class":78}," input_int(",[68,153616,153617],{"class":1742},"\"请输入年龄:\"",[68,153619,1646],{"class":78},[68,153621,153622,153625,153627,153630,153633],{"class":70,"line":18091},[68,153623,153624],{"class":78},"    score ",[68,153626,1685],{"class":316},[68,153628,153629],{"class":78}," input_float(",[68,153631,153632],{"class":1742},"\"请输入成绩:\"",[68,153634,1646],{"class":78},[68,153636,153637],{"class":70,"line":18097},[68,153638,3890],{"emptyLinePlaceholder":1567},[68,153640,153641],{"class":70,"line":18120},[68,153642,153643],{"class":78},"    students.append({\n",[68,153645,153646,153649],{"class":70,"line":18126},[68,153647,153648],{"class":1742},"        \"student_id\"",[68,153650,153651],{"class":78},": student_id,\n",[68,153653,153654,153657],{"class":70,"line":18149},[68,153655,153656],{"class":1742},"        \"name\"",[68,153658,153659],{"class":78},": name,\n",[68,153661,153662,153665],{"class":70,"line":18163},[68,153663,153664],{"class":1742},"        \"age\"",[68,153666,153667],{"class":78},": age,\n",[68,153669,153670,153673],{"class":70,"line":18183},[68,153671,153672],{"class":1742},"        \"score\"",[68,153674,153675],{"class":78},": score,\n",[68,153677,153678],{"class":70,"line":18189},[68,153679,34945],{"class":78},[68,153681,153682],{"class":70,"line":18200},[68,153683,153684],{"class":78},"    save_students(students)\n",[68,153686,153687,153689,153691,153694],{"class":70,"line":18223},[68,153688,32783],{"class":85},[68,153690,1640],{"class":78},[68,153692,153693],{"class":1742},"\"添加成功\"",[68,153695,1646],{"class":78},[68,153697,153698],{"class":70,"line":18245},[68,153699,3890],{"emptyLinePlaceholder":1567},[68,153701,153702],{"class":70,"line":18250},[68,153703,3890],{"emptyLinePlaceholder":1567},[68,153705,153706,153708,153711],{"class":70,"line":18256},[68,153707,33431],{"class":316},[68,153709,153710],{"class":74}," delete_student",[68,153712,153184],{"class":78},[68,153714,153715,153717,153719,153721,153723,153726],{"class":70,"line":18270},[68,153716,153546],{"class":78},[68,153718,1685],{"class":316},[68,153720,62083],{"class":85},[68,153722,1640],{"class":78},[68,153724,153725],{"class":1742},"\"请输入要删除的学号:\"",[68,153727,1646],{"class":78},[68,153729,153730,153733,153735],{"class":70,"line":18283},[68,153731,153732],{"class":78},"    student ",[68,153734,1685],{"class":316},[68,153736,153737],{"class":78}," find_student(students, student_id)\n",[68,153739,153740],{"class":70,"line":18288},[68,153741,3890],{"emptyLinePlaceholder":1567},[68,153743,153744,153746,153748,153750,153752],{"class":70,"line":18302},[68,153745,4591],{"class":316},[68,153747,153360],{"class":78},[68,153749,40411],{"class":316},[68,153751,40417],{"class":85},[68,153753,5229],{"class":78},[68,153755,153756,153758,153760,153763],{"class":70,"line":18307},[68,153757,33935],{"class":85},[68,153759,1640],{"class":78},[68,153761,153762],{"class":1742},"\"学生不存在\"",[68,153764,1646],{"class":78},[68,153766,153767],{"class":70,"line":18313},[68,153768,153584],{"class":316},[68,153770,153771],{"class":70,"line":18318},[68,153772,3890],{"emptyLinePlaceholder":1567},[68,153774,153775],{"class":70,"line":18332},[68,153776,153777],{"class":78},"    students.remove(student)\n",[68,153779,153780],{"class":70,"line":18337},[68,153781,153684],{"class":78},[68,153783,153784,153786,153788,153791],{"class":70,"line":18342},[68,153785,32783],{"class":85},[68,153787,1640],{"class":78},[68,153789,153790],{"class":1742},"\"删除成功\"",[68,153792,1646],{"class":78},[68,153794,153795],{"class":70,"line":18356},[68,153796,3890],{"emptyLinePlaceholder":1567},[68,153798,153799],{"class":70,"line":18368},[68,153800,3890],{"emptyLinePlaceholder":1567},[68,153802,153803,153805,153808],{"class":70,"line":18373},[68,153804,33431],{"class":316},[68,153806,153807],{"class":74}," update_student",[68,153809,153184],{"class":78},[68,153811,153812,153814,153816,153818,153820,153823],{"class":70,"line":18386},[68,153813,153546],{"class":78},[68,153815,1685],{"class":316},[68,153817,62083],{"class":85},[68,153819,1640],{"class":78},[68,153821,153822],{"class":1742},"\"请输入要修改的学号:\"",[68,153824,1646],{"class":78},[68,153826,153827,153829,153831],{"class":70,"line":18391},[68,153828,153732],{"class":78},[68,153830,1685],{"class":316},[68,153832,153737],{"class":78},[68,153834,153835],{"class":70,"line":18396},[68,153836,3890],{"emptyLinePlaceholder":1567},[68,153838,153839,153841,153843,153845,153847],{"class":70,"line":18401},[68,153840,4591],{"class":316},[68,153842,153360],{"class":78},[68,153844,40411],{"class":316},[68,153846,40417],{"class":85},[68,153848,5229],{"class":78},[68,153850,153851,153853,153855,153857],{"class":70,"line":18414},[68,153852,33935],{"class":85},[68,153854,1640],{"class":78},[68,153856,153762],{"class":1742},[68,153858,1646],{"class":78},[68,153860,153861],{"class":70,"line":18419},[68,153862,153584],{"class":316},[68,153864,153865],{"class":70,"line":34117},[68,153866,3890],{"emptyLinePlaceholder":1567},[68,153868,153869,153871,153873,153875,153877,153880],{"class":70,"line":34123},[68,153870,153593],{"class":78},[68,153872,1685],{"class":316},[68,153874,62083],{"class":85},[68,153876,1640],{"class":78},[68,153878,153879],{"class":1742},"\"请输入新姓名:\"",[68,153881,1646],{"class":78},[68,153883,153884,153886,153888,153890,153893],{"class":70,"line":34129},[68,153885,153609],{"class":78},[68,153887,1685],{"class":316},[68,153889,153614],{"class":78},[68,153891,153892],{"class":1742},"\"请输入新年龄:\"",[68,153894,1646],{"class":78},[68,153896,153897,153899,153901,153903,153906],{"class":70,"line":34135},[68,153898,153624],{"class":78},[68,153900,1685],{"class":316},[68,153902,153629],{"class":78},[68,153904,153905],{"class":1742},"\"请输入新成绩:\"",[68,153907,1646],{"class":78},[68,153909,153910],{"class":70,"line":34141},[68,153911,3890],{"emptyLinePlaceholder":1567},[68,153913,153914,153917,153919,153921,153923],{"class":70,"line":34152},[68,153915,153916],{"class":78},"    student[",[68,153918,64157],{"class":1742},[68,153920,5933],{"class":78},[68,153922,1685],{"class":316},[68,153924,151018],{"class":78},[68,153926,153927,153929,153931,153933,153935],{"class":70,"line":34158},[68,153928,153916],{"class":78},[68,153930,70602],{"class":1742},[68,153932,5933],{"class":78},[68,153934,1685],{"class":316},[68,153936,151030],{"class":78},[68,153938,153939,153941,153943,153945,153947],{"class":70,"line":34178},[68,153940,153916],{"class":78},[68,153942,152695],{"class":1742},[68,153944,5933],{"class":78},[68,153946,1685],{"class":316},[68,153948,3070],{"class":78},[68,153950,153951],{"class":70,"line":34184},[68,153952,3890],{"emptyLinePlaceholder":1567},[68,153954,153955],{"class":70,"line":34195},[68,153956,153684],{"class":78},[68,153958,153959,153961,153963,153966],{"class":70,"line":34201},[68,153960,32783],{"class":85},[68,153962,1640],{"class":78},[68,153964,153965],{"class":1742},"\"修改成功\"",[68,153967,1646],{"class":78},[68,153969,153970],{"class":70,"line":34207},[68,153971,3890],{"emptyLinePlaceholder":1567},[68,153973,153974],{"class":70,"line":34213},[68,153975,3890],{"emptyLinePlaceholder":1567},[68,153977,153978,153980,153983],{"class":70,"line":34219},[68,153979,33431],{"class":316},[68,153981,153982],{"class":74}," query_student",[68,153984,153184],{"class":78},[68,153986,153987,153989,153991,153993,153995,153998],{"class":70,"line":34225},[68,153988,153546],{"class":78},[68,153990,1685],{"class":316},[68,153992,62083],{"class":85},[68,153994,1640],{"class":78},[68,153996,153997],{"class":1742},"\"请输入要查询的学号:\"",[68,153999,1646],{"class":78},[68,154001,154002,154004,154006],{"class":70,"line":34231},[68,154003,153732],{"class":78},[68,154005,1685],{"class":316},[68,154007,153737],{"class":78},[68,154009,154010],{"class":70,"line":34237},[68,154011,3890],{"emptyLinePlaceholder":1567},[68,154013,154014,154016,154018,154020,154022],{"class":70,"line":34257},[68,154015,4591],{"class":316},[68,154017,153360],{"class":78},[68,154019,40411],{"class":316},[68,154021,40417],{"class":85},[68,154023,5229],{"class":78},[68,154025,154026,154028,154030,154032],{"class":70,"line":34263},[68,154027,33935],{"class":85},[68,154029,1640],{"class":78},[68,154031,153762],{"class":1742},[68,154033,1646],{"class":78},[68,154035,154036],{"class":70,"line":34279},[68,154037,153584],{"class":316},[68,154039,154040],{"class":70,"line":34285},[68,154041,3890],{"emptyLinePlaceholder":1567},[68,154043,154044],{"class":70,"line":34299},[68,154045,154046],{"class":78},"    print_student(student)\n",[68,154048,154049],{"class":70,"line":34305},[68,154050,3890],{"emptyLinePlaceholder":1567},[68,154052,154053],{"class":70,"line":34320},[68,154054,3890],{"emptyLinePlaceholder":1567},[68,154056,154057,154059,154062],{"class":70,"line":34326},[68,154058,33431],{"class":316},[68,154060,154061],{"class":74}," print_student",[68,154063,154064],{"class":78},"(student):\n",[68,154066,154067,154069],{"class":70,"line":34335},[68,154068,32783],{"class":85},[68,154070,152662],{"class":78},[68,154072,154073,154076,154078,154080,154083,154086,154088,154091],{"class":70,"line":34341},[68,154074,154075],{"class":316},"        f",[68,154077,1880],{"class":1742},[68,154079,2523],{"class":85},[68,154081,154082],{"class":78},"student[",[68,154084,154085],{"class":1742},"'student_id'",[68,154087,2567],{"class":78},[68,154089,154090],{"class":85},"}\\t",[68,154092,26619],{"class":1742},[68,154094,154095,154097,154099,154101,154103,154106,154108,154110],{"class":70,"line":34350},[68,154096,154075],{"class":316},[68,154098,1880],{"class":1742},[68,154100,2523],{"class":85},[68,154102,154082],{"class":78},[68,154104,154105],{"class":1742},"'name'",[68,154107,2567],{"class":78},[68,154109,154090],{"class":85},[68,154111,26619],{"class":1742},[68,154113,154114,154116,154118,154120,154122,154125,154127,154129],{"class":70,"line":34356},[68,154115,154075],{"class":316},[68,154117,1880],{"class":1742},[68,154119,2523],{"class":85},[68,154121,154082],{"class":78},[68,154123,154124],{"class":1742},"'age'",[68,154126,2567],{"class":78},[68,154128,154090],{"class":85},[68,154130,26619],{"class":1742},[68,154132,154133,154135,154137,154139,154141,154144,154146,154148],{"class":70,"line":34362},[68,154134,154075],{"class":316},[68,154136,1880],{"class":1742},[68,154138,2523],{"class":85},[68,154140,154082],{"class":78},[68,154142,154143],{"class":1742},"'score'",[68,154145,2567],{"class":78},[68,154147,2573],{"class":85},[68,154149,26619],{"class":1742},[68,154151,154152],{"class":70,"line":34371},[68,154153,154154],{"class":78},"    )\n",[68,154156,154157],{"class":70,"line":34377},[68,154158,3890],{"emptyLinePlaceholder":1567},[68,154160,154161],{"class":70,"line":34388},[68,154162,3890],{"emptyLinePlaceholder":1567},[68,154164,154165,154167,154170],{"class":70,"line":34394},[68,154166,33431],{"class":316},[68,154168,154169],{"class":74}," show_all_students",[68,154171,153184],{"class":78},[68,154173,154174,154176,154178],{"class":70,"line":34413},[68,154175,4591],{"class":316},[68,154177,40414],{"class":316},[68,154179,153365],{"class":78},[68,154181,154182,154184,154186,154189],{"class":70,"line":34419},[68,154183,33935],{"class":85},[68,154185,1640],{"class":78},[68,154187,154188],{"class":1742},"\"暂无学生\"",[68,154190,1646],{"class":78},[68,154192,154193],{"class":70,"line":34430},[68,154194,153584],{"class":316},[68,154196,154197],{"class":70,"line":34436},[68,154198,3890],{"emptyLinePlaceholder":1567},[68,154200,154201,154203,154205,154208,154210,154213,154215,154218,154220,154223],{"class":70,"line":34456},[68,154202,32783],{"class":85},[68,154204,1640],{"class":78},[68,154206,154207],{"class":1742},"\"学号",[68,154209,2727],{"class":85},[68,154211,154212],{"class":1742},"姓名",[68,154214,2727],{"class":85},[68,154216,154217],{"class":1742},"年龄",[68,154219,2727],{"class":85},[68,154221,154222],{"class":1742},"成绩\"",[68,154224,1646],{"class":78},[68,154226,154227,154229,154231,154233],{"class":70,"line":34472},[68,154228,4691],{"class":316},[68,154230,153360],{"class":78},[68,154232,27529],{"class":316},[68,154234,153365],{"class":78},[68,154236,154237],{"class":70,"line":34478},[68,154238,154239],{"class":78},"        print_student(student)\n",[68,154241,154242],{"class":70,"line":34492},[68,154243,3890],{"emptyLinePlaceholder":1567},[68,154245,154246],{"class":70,"line":34498},[68,154247,3890],{"emptyLinePlaceholder":1567},[68,154249,154250,154252,154254],{"class":70,"line":34504},[68,154251,33431],{"class":316},[68,154253,3463],{"class":74},[68,154255,33437],{"class":78},[68,154257,154258,154261,154263],{"class":70,"line":34515},[68,154259,154260],{"class":78},"    students ",[68,154262,1685],{"class":316},[68,154264,154265],{"class":78}," load_students()\n",[68,154267,154268],{"class":70,"line":34521},[68,154269,3890],{"emptyLinePlaceholder":1567},[68,154271,154272,154274,154276],{"class":70,"line":34527},[68,154273,3741],{"class":316},[68,154275,96767],{"class":85},[68,154277,5229],{"class":78},[68,154279,154280],{"class":70,"line":34537},[68,154281,154282],{"class":78},"        show_menu()\n",[68,154284,154285,154288,154290,154292,154294,154297],{"class":70,"line":34543},[68,154286,154287],{"class":78},"        choice ",[68,154289,1685],{"class":316},[68,154291,62083],{"class":85},[68,154293,1640],{"class":78},[68,154295,154296],{"class":1742},"\"请输入操作:\"",[68,154298,1646],{"class":78},[68,154300,154301],{"class":70,"line":34554},[68,154302,3890],{"emptyLinePlaceholder":1567},[68,154304,154305,154307,154310,154312,154315],{"class":70,"line":34560},[68,154306,3987],{"class":316},[68,154308,154309],{"class":78}," choice ",[68,154311,4439],{"class":316},[68,154313,154314],{"class":1742}," \"1\"",[68,154316,5229],{"class":78},[68,154318,154319],{"class":70,"line":34570},[68,154320,154321],{"class":78},"            add_student(students)\n",[68,154323,154324,154327,154329,154331,154334],{"class":70,"line":34575},[68,154325,154326],{"class":316},"        elif",[68,154328,154309],{"class":78},[68,154330,4439],{"class":316},[68,154332,154333],{"class":1742}," \"2\"",[68,154335,5229],{"class":78},[68,154337,154338],{"class":70,"line":34581},[68,154339,154340],{"class":78},"            delete_student(students)\n",[68,154342,154343,154345,154347,154349,154352],{"class":70,"line":34630},[68,154344,154326],{"class":316},[68,154346,154309],{"class":78},[68,154348,4439],{"class":316},[68,154350,154351],{"class":1742}," \"3\"",[68,154353,5229],{"class":78},[68,154355,154356],{"class":70,"line":34677},[68,154357,154358],{"class":78},"            update_student(students)\n",[68,154360,154361,154363,154365,154367,154370],{"class":70,"line":34682},[68,154362,154326],{"class":316},[68,154364,154309],{"class":78},[68,154366,4439],{"class":316},[68,154368,154369],{"class":1742}," \"4\"",[68,154371,5229],{"class":78},[68,154373,154374],{"class":70,"line":34688},[68,154375,154376],{"class":78},"            query_student(students)\n",[68,154378,154379,154381,154383,154385,154388],{"class":70,"line":34707},[68,154380,154326],{"class":316},[68,154382,154309],{"class":78},[68,154384,4439],{"class":316},[68,154386,154387],{"class":1742}," \"5\"",[68,154389,5229],{"class":78},[68,154391,154392],{"class":70,"line":34713},[68,154393,154394],{"class":78},"            show_all_students(students)\n",[68,154396,154397,154399,154401,154403,154406],{"class":70,"line":34733},[68,154398,154326],{"class":316},[68,154400,154309],{"class":78},[68,154402,4439],{"class":316},[68,154404,154405],{"class":1742}," \"0\"",[68,154407,5229],{"class":78},[68,154409,154410,154412,154414,154417],{"class":70,"line":34739},[68,154411,36134],{"class":85},[68,154413,1640],{"class":78},[68,154415,154416],{"class":1742},"\"退出系统\"",[68,154418,1646],{"class":78},[68,154420,154421],{"class":70,"line":34745},[68,154422,116572],{"class":316},[68,154424,154425,154427],{"class":70,"line":34755},[68,154426,4024],{"class":316},[68,154428,5229],{"class":78},[68,154430,154431,154433,154435,154438],{"class":70,"line":34760},[68,154432,36134],{"class":85},[68,154434,1640],{"class":78},[68,154436,154437],{"class":1742},"\"输入错误\"",[68,154439,1646],{"class":78},[68,154441,154442],{"class":70,"line":34766},[68,154443,3890],{"emptyLinePlaceholder":1567},[68,154445,154446],{"class":70,"line":34782},[68,154447,3890],{"emptyLinePlaceholder":1567},[68,154449,154450,154452,154454,154456,154458],{"class":70,"line":34827},[68,154451,3023],{"class":316},[68,154453,32704],{"class":85},[68,154455,103034],{"class":316},[68,154457,103037],{"class":1742},[68,154459,5229],{"class":78},[68,154461,154462],{"class":70,"line":34833},[68,154463,103044],{"class":78},[170,154465,154466],{},"这个项目串联了：",[263,154468,154469,154472,154475,154478,154481,154483],{},[27,154470,154471],{},"菜单循环。",[27,154473,154474],{},"函数封装。",[27,154476,154477],{},"列表字典。",[27,154479,154480],{},"JSON 读写。",[27,154482,152950],{},[27,154484,154485,29869],{},[65,154486,154487],{},"if __name__ == \"__main__\"",[14,154489,154491],{"id":154490},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[170,154493,154494],{},"可以进一步拆成两个类：",[263,154496,154497,154502],{},[27,154498,154499,154501],{},[65,154500,150791],{},"：表示单个学生。",[27,154503,154504,154506],{},[65,154505,152817],{},"：负责学生增删改查和文件保存。",[170,154508,154509],{},"示意代码：",[58,154511,154513],{"className":31862,"code":154512,"language":31864,"meta":63,"style":63},"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",[65,154514,154515,154525,154529,154533,154537,154545,154552,154558,154564,154570,154574,154582,154588,154598,154608,154618,154628,154632,154636,154642,154650,154658,154666,154674,154682,154690],{"__ignoreMap":63},[68,154516,154517,154519,154521,154523],{"class":70,"line":71},[68,154518,32221],{"class":316},[68,154520,152375],{"class":78},[68,154522,31876],{"class":316},[68,154524,152380],{"class":78},[68,154526,154527],{"class":70,"line":82},[68,154528,3890],{"emptyLinePlaceholder":1567},[68,154530,154531],{"class":70,"line":98},[68,154532,3890],{"emptyLinePlaceholder":1567},[68,154534,154535],{"class":70,"line":104},[68,154536,152393],{"class":74},[68,154538,154539,154541,154543],{"class":70,"line":112},[68,154540,16182],{"class":316},[68,154542,9387],{"class":74},[68,154544,5229],{"class":78},[68,154546,154547,154550],{"class":70,"line":124},[68,154548,154549],{"class":78},"    student_id: ",[68,154551,152409],{"class":85},[68,154553,154554,154556],{"class":70,"line":1496},[68,154555,152406],{"class":78},[68,154557,152409],{"class":85},[68,154559,154560,154562],{"class":70,"line":1502},[68,154561,152414],{"class":78},[68,154563,152417],{"class":85},[68,154565,154566,154568],{"class":70,"line":1510},[68,154567,152422],{"class":78},[68,154569,152425],{"class":85},[68,154571,154572],{"class":70,"line":1521},[68,154573,3890],{"emptyLinePlaceholder":1567},[68,154575,154576,154578,154580],{"class":70,"line":3103},[68,154577,32285],{"class":316},[68,154579,152573],{"class":74},[68,154581,32291],{"class":78},[68,154583,154584,154586],{"class":70,"line":3108},[68,154585,16240],{"class":316},[68,154587,79],{"class":78},[68,154589,154590,154592,154594,154596],{"class":70,"line":3114},[68,154591,152586],{"class":1742},[68,154593,89],{"class":78},[68,154595,32307],{"class":85},[68,154597,152593],{"class":78},[68,154599,154600,154602,154604,154606],{"class":70,"line":3119},[68,154601,152598],{"class":1742},[68,154603,89],{"class":78},[68,154605,32307],{"class":85},[68,154607,152605],{"class":78},[68,154609,154610,154612,154614,154616],{"class":70,"line":3133},[68,154611,152610],{"class":1742},[68,154613,89],{"class":78},[68,154615,32307],{"class":85},[68,154617,152617],{"class":78},[68,154619,154620,154622,154624,154626],{"class":70,"line":3138},[68,154621,152622],{"class":1742},[68,154623,89],{"class":78},[68,154625,32307],{"class":85},[68,154627,152629],{"class":78},[68,154629,154630],{"class":70,"line":3144},[68,154631,4019],{"class":78},[68,154633,154634],{"class":70,"line":3165},[68,154635,3890],{"emptyLinePlaceholder":1567},[68,154637,154638,154640],{"class":70,"line":3170},[68,154639,152237],{"class":74},[68,154641,152240],{"class":85},[68,154643,154644,154646,154648],{"class":70,"line":3184},[68,154645,32285],{"class":316},[68,154647,152650],{"class":74},[68,154649,152653],{"class":78},[68,154651,154652,154654,154656],{"class":70,"line":3189},[68,154653,16240],{"class":316},[68,154655,152257],{"class":85},[68,154657,152662],{"class":78},[68,154659,154660,154662,154664],{"class":70,"line":3218},[68,154661,152667],{"class":78},[68,154663,152670],{"class":1742},[68,154665,89311],{"class":78},[68,154667,154668,154670,154672],{"class":70,"line":3223},[68,154669,152667],{"class":78},[68,154671,64157],{"class":1742},[68,154673,89311],{"class":78},[68,154675,154676,154678,154680],{"class":70,"line":3240},[68,154677,152667],{"class":78},[68,154679,70602],{"class":1742},[68,154681,89311],{"class":78},[68,154683,154684,154686,154688],{"class":70,"line":3245},[68,154685,152667],{"class":78},[68,154687,152695],{"class":1742},[68,154689,89311],{"class":78},[68,154691,154692],{"class":70,"line":3250},[68,154693,39610],{"class":78},[170,154695,154696],{},"管理器示意：",[58,154698,154700],{"className":31862,"code":154699,"language":31864,"meta":63,"style":63},"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",[65,154701,154702,154711,154719,154730,154734,154744,154757,154768,154775,154781,154785,154794,154803,154809,154816],{"__ignoreMap":63},[68,154703,154704,154706,154709],{"class":70,"line":71},[68,154705,16182],{"class":316},[68,154707,154708],{"class":74}," StudentManager",[68,154710,5229],{"class":78},[68,154712,154713,154715,154717],{"class":70,"line":82},[68,154714,32285],{"class":316},[68,154716,32288],{"class":85},[68,154718,32291],{"class":78},[68,154720,154721,154723,154726,154728],{"class":70,"line":98},[68,154722,32329],{"class":85},[68,154724,154725],{"class":78},".students ",[68,154727,1685],{"class":316},[68,154729,53320],{"class":78},[68,154731,154732],{"class":70,"line":104},[68,154733,3890],{"emptyLinePlaceholder":1567},[68,154735,154736,154738,154741],{"class":70,"line":112},[68,154737,32285],{"class":316},[68,154739,154740],{"class":74}," find_by_id",[68,154742,154743],{"class":78},"(self, student_id):\n",[68,154745,154746,154748,154750,154752,154754],{"class":70,"line":124},[68,154747,4893],{"class":316},[68,154749,153360],{"class":78},[68,154751,27529],{"class":316},[68,154753,40357],{"class":85},[68,154755,154756],{"class":78},".students:\n",[68,154758,154759,154761,154764,154766],{"class":70,"line":1496},[68,154760,6132],{"class":316},[68,154762,154763],{"class":78}," student.student_id ",[68,154765,4439],{"class":316},[68,154767,153381],{"class":78},[68,154769,154770,154773],{"class":70,"line":1502},[68,154771,154772],{"class":316},"                return",[68,154774,153388],{"class":78},[68,154776,154777,154779],{"class":70,"line":1510},[68,154778,16240],{"class":316},[68,154780,153395],{"class":85},[68,154782,154783],{"class":70,"line":1521},[68,154784,3890],{"emptyLinePlaceholder":1567},[68,154786,154787,154789,154791],{"class":70,"line":3103},[68,154788,32285],{"class":316},[68,154790,6698],{"class":74},[68,154792,154793],{"class":78},"(self, student):\n",[68,154795,154796,154798,154800],{"class":70,"line":3108},[68,154797,3987],{"class":316},[68,154799,40357],{"class":85},[68,154801,154802],{"class":78},".find_by_id(student.student_id):\n",[68,154804,154805,154807],{"class":70,"line":3114},[68,154806,17219],{"class":316},[68,154808,127281],{"class":85},[68,154810,154811,154813],{"class":70,"line":3119},[68,154812,32329],{"class":85},[68,154814,154815],{"class":78},".students.append(student)\n",[68,154817,154818,154820],{"class":70,"line":3133},[68,154819,16240],{"class":316},[68,154821,154822],{"class":85}," True\n",[170,154824,154825],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154827,154829],{"id":154828},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,154831,154833],{"id":154832},"_1251-数据结构","12.5.1 数据结构",[58,154835,154837],{"className":31862,"code":154836,"language":31864,"meta":63,"style":63},"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",[65,154838,154839,154847,154878,154908,154937,154966],{"__ignoreMap":63},[68,154840,154841,154843,154845],{"class":70,"line":71},[68,154842,149688],{"class":78},[68,154844,1685],{"class":316},[68,154846,56925],{"class":78},[68,154848,154849,154851,154853,154855,154857,154859,154862,154864,154867,154869,154871,154873,154876],{"class":70,"line":82},[68,154850,149608],{"class":78},[68,154852,149220],{"class":1742},[68,154854,89],{"class":78},[68,154856,149831],{"class":1742},[68,154858,13923],{"class":78},[68,154860,154861],{"class":1742},"\"category\"",[68,154863,89],{"class":78},[68,154865,154866],{"class":1742},"\"手机\"",[68,154868,13923],{"class":78},[68,154870,85560],{"class":1742},[68,154872,89],{"class":78},[68,154874,154875],{"class":85},"12000",[68,154877,6420],{"class":78},[68,154879,154880,154882,154884,154886,154888,154890,154892,154894,154897,154899,154901,154903,154906],{"class":70,"line":98},[68,154881,149608],{"class":78},[68,154883,149220],{"class":1742},[68,154885,89],{"class":78},[68,154887,149831],{"class":1742},[68,154889,13923],{"class":78},[68,154891,154861],{"class":1742},[68,154893,89],{"class":78},[68,154895,154896],{"class":1742},"\"电脑\"",[68,154898,13923],{"class":78},[68,154900,85560],{"class":1742},[68,154902,89],{"class":78},[68,154904,154905],{"class":85},"18000",[68,154907,6420],{"class":78},[68,154909,154910,154912,154914,154916,154918,154920,154922,154924,154926,154928,154930,154932,154935],{"class":70,"line":104},[68,154911,149608],{"class":78},[68,154913,149220],{"class":1742},[68,154915,89],{"class":78},[68,154917,149852],{"class":1742},[68,154919,13923],{"class":78},[68,154921,154861],{"class":1742},[68,154923,89],{"class":78},[68,154925,154866],{"class":1742},[68,154927,13923],{"class":78},[68,154929,85560],{"class":1742},[68,154931,89],{"class":78},[68,154933,154934],{"class":85},"15000",[68,154936,6420],{"class":78},[68,154938,154939,154941,154943,154945,154947,154949,154951,154953,154955,154957,154959,154961,154964],{"class":70,"line":112},[68,154940,149608],{"class":78},[68,154942,149220],{"class":1742},[68,154944,89],{"class":78},[68,154946,149852],{"class":1742},[68,154948,13923],{"class":78},[68,154950,154861],{"class":1742},[68,154952,89],{"class":78},[68,154954,154896],{"class":1742},[68,154956,13923],{"class":78},[68,154958,85560],{"class":1742},[68,154960,89],{"class":78},[68,154962,154963],{"class":85},"16000",[68,154965,6420],{"class":78},[68,154967,154968],{"class":70,"line":124},[68,154969,34730],{"class":78},[19,154971,154973],{"id":154972},"_1252-按日期统计","12.5.2 按日期统计",[58,154975,154977],{"className":31862,"code":154976,"language":31864,"meta":63,"style":63},"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",[65,154978,154979,154988,154992,155003,155017,155030,155049,155053],{"__ignoreMap":63},[68,154980,154981,154984,154986],{"class":70,"line":71},[68,154982,154983],{"class":78},"daily_total ",[68,154985,1685],{"class":316},[68,154987,89343],{"class":78},[68,154989,154990],{"class":70,"line":82},[68,154991,3890],{"emptyLinePlaceholder":1567},[68,154993,154994,154996,154998,155000],{"class":70,"line":98},[68,154995,4515],{"class":316},[68,154997,149432],{"class":78},[68,154999,27529],{"class":316},[68,155001,155002],{"class":78}," sales:\n",[68,155004,155005,155008,155010,155013,155015],{"class":70,"line":104},[68,155006,155007],{"class":78},"    date ",[68,155009,1685],{"class":316},[68,155011,155012],{"class":78}," item[",[68,155014,149220],{"class":1742},[68,155016,34730],{"class":78},[68,155018,155019,155022,155024,155026,155028],{"class":70,"line":112},[68,155020,155021],{"class":78},"    amount ",[68,155023,1685],{"class":316},[68,155025,155012],{"class":78},[68,155027,85560],{"class":1742},[68,155029,34730],{"class":78},[68,155031,155032,155035,155037,155040,155042,155044,155046],{"class":70,"line":124},[68,155033,155034],{"class":78},"    daily_total[date] ",[68,155036,1685],{"class":316},[68,155038,155039],{"class":78}," daily_total.get(date, ",[68,155041,1248],{"class":85},[68,155043,15202],{"class":78},[68,155045,2109],{"class":316},[68,155047,155048],{"class":78}," amount\n",[68,155050,155051],{"class":70,"line":1496},[68,155052,3890],{"emptyLinePlaceholder":1567},[68,155054,155055,155057],{"class":70,"line":1502},[68,155056,31899],{"class":85},[68,155058,155059],{"class":78},"(daily_total)\n",[19,155061,155063],{"id":155062},"_1253-按类别统计","12.5.3 按类别统计",[58,155065,155067],{"className":31862,"code":155066,"language":31864,"meta":63,"style":63},"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",[65,155068,155069,155078,155082,155092,155105,155117,155135,155139],{"__ignoreMap":63},[68,155070,155071,155074,155076],{"class":70,"line":71},[68,155072,155073],{"class":78},"category_total ",[68,155075,1685],{"class":316},[68,155077,89343],{"class":78},[68,155079,155080],{"class":70,"line":82},[68,155081,3890],{"emptyLinePlaceholder":1567},[68,155083,155084,155086,155088,155090],{"class":70,"line":98},[68,155085,4515],{"class":316},[68,155087,149432],{"class":78},[68,155089,27529],{"class":316},[68,155091,155002],{"class":78},[68,155093,155094,155097,155099,155101,155103],{"class":70,"line":104},[68,155095,155096],{"class":78},"    category ",[68,155098,1685],{"class":316},[68,155100,155012],{"class":78},[68,155102,154861],{"class":1742},[68,155104,34730],{"class":78},[68,155106,155107,155109,155111,155113,155115],{"class":70,"line":112},[68,155108,155021],{"class":78},[68,155110,1685],{"class":316},[68,155112,155012],{"class":78},[68,155114,85560],{"class":1742},[68,155116,34730],{"class":78},[68,155118,155119,155122,155124,155127,155129,155131,155133],{"class":70,"line":124},[68,155120,155121],{"class":78},"    category_total[category] ",[68,155123,1685],{"class":316},[68,155125,155126],{"class":78}," category_total.get(category, ",[68,155128,1248],{"class":85},[68,155130,15202],{"class":78},[68,155132,2109],{"class":316},[68,155134,155048],{"class":78},[68,155136,155137],{"class":70,"line":1496},[68,155138,3890],{"emptyLinePlaceholder":1567},[68,155140,155141,155143],{"class":70,"line":1502},[68,155142,31899],{"class":85},[68,155144,155145],{"class":78},"(category_total)\n",[19,155147,155149],{"id":155148},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[58,155151,155153],{"className":31862,"code":155152,"language":31864,"meta":63,"style":63},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[65,155154,155155,155180],{"__ignoreMap":63},[68,155156,155157,155160,155162,155164,155167,155170,155173,155176,155178],{"class":70,"line":71},[68,155158,155159],{"class":78},"top_date, top_amount ",[68,155161,1685],{"class":316},[68,155163,7440],{"class":85},[68,155165,155166],{"class":78},"(daily_total.items(), ",[68,155168,155169],{"class":6705},"key",[68,155171,155172],{"class":316},"=lambda",[68,155174,155175],{"class":78}," item: item[",[68,155177,1846],{"class":85},[68,155179,6147],{"class":78},[68,155181,155182,155184],{"class":70,"line":82},[68,155183,31899],{"class":85},[68,155185,155186],{"class":78},"(top_date, top_amount)\n",[14,155188,155190],{"id":155189},"_126-绘制柱状图","12.6 绘制柱状图",[58,155192,155194],{"className":31862,"code":155193,"language":31864,"meta":63,"style":63},"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",[65,155195,155196,155210,155221,155225,155233,155245,155257,155268,155272,155276,155286,155297,155311,155316,155333,155350,155366,155370],{"__ignoreMap":63},[68,155197,155198,155200,155202,155204,155206,155208],{"class":70,"line":71},[68,155199,32221],{"class":316},[68,155201,148602],{"class":78},[68,155203,31876],{"class":316},[68,155205,148607],{"class":78},[68,155207,32867],{"class":316},[68,155209,148612],{"class":78},[68,155211,155212,155214,155216,155218],{"class":70,"line":82},[68,155213,32221],{"class":316},[68,155215,148461],{"class":78},[68,155217,31876],{"class":316},[68,155219,155220],{"class":78}," Bar\n",[68,155222,155223],{"class":70,"line":98},[68,155224,3890],{"emptyLinePlaceholder":1567},[68,155226,155227,155229,155231],{"class":70,"line":104},[68,155228,155073],{"class":78},[68,155230,1685],{"class":316},[68,155232,79],{"class":78},[68,155234,155235,155238,155240,155243],{"class":70,"line":112},[68,155236,155237],{"class":1742},"    \"手机\"",[68,155239,89],{"class":78},[68,155241,155242],{"class":85},"27000",[68,155244,32950],{"class":78},[68,155246,155247,155250,155252,155255],{"class":70,"line":124},[68,155248,155249],{"class":1742},"    \"电脑\"",[68,155251,89],{"class":78},[68,155253,155254],{"class":85},"34000",[68,155256,32950],{"class":78},[68,155258,155259,155262,155264,155266],{"class":70,"line":1496},[68,155260,155261],{"class":1742},"    \"耳机\"",[68,155263,89],{"class":78},[68,155265,125873],{"class":85},[68,155267,32950],{"class":78},[68,155269,155270],{"class":70,"line":1502},[68,155271,101],{"class":78},[68,155273,155274],{"class":70,"line":1510},[68,155275,3890],{"emptyLinePlaceholder":1567},[68,155277,155278,155281,155283],{"class":70,"line":1521},[68,155279,155280],{"class":78},"bar ",[68,155282,1685],{"class":316},[68,155284,155285],{"class":78}," Bar()\n",[68,155287,155288,155291,155294],{"class":70,"line":3103},[68,155289,155290],{"class":78},"bar.add_xaxis(",[68,155292,155293],{"class":85},"list",[68,155295,155296],{"class":78},"(category_total.keys()))\n",[68,155298,155299,155302,155304,155306,155308],{"class":70,"line":3108},[68,155300,155301],{"class":78},"bar.add_yaxis(",[68,155303,148518],{"class":1742},[68,155305,13923],{"class":78},[68,155307,155293],{"class":85},[68,155309,155310],{"class":78},"(category_total.values()))\n",[68,155312,155313],{"class":70,"line":3114},[68,155314,155315],{"class":78},"bar.set_global_opts(\n",[68,155317,155318,155320,155322,155324,155326,155328,155331],{"class":70,"line":3119},[68,155319,148696],{"class":6705},[68,155321,1685],{"class":316},[68,155323,148701],{"class":78},[68,155325,52891],{"class":6705},[68,155327,1685],{"class":316},[68,155329,155330],{"class":1742},"\"品类销售额\"",[68,155332,39531],{"class":78},[68,155334,155335,155337,155339,155341,155343,155345,155348],{"class":70,"line":3133},[68,155336,148715],{"class":6705},[68,155338,1685],{"class":316},[68,155340,148720],{"class":78},[68,155342,81287],{"class":6705},[68,155344,1685],{"class":316},[68,155346,155347],{"class":1742},"\"品类\"",[68,155349,39531],{"class":78},[68,155351,155352,155354,155356,155358,155360,155362,155364],{"class":70,"line":3138},[68,155353,148734],{"class":6705},[68,155355,1685],{"class":316},[68,155357,148720],{"class":78},[68,155359,81287],{"class":6705},[68,155361,1685],{"class":316},[68,155363,148518],{"class":1742},[68,155365,39531],{"class":78},[68,155367,155368],{"class":70,"line":3144},[68,155369,1646],{"class":78},[68,155371,155372,155375,155378],{"class":70,"line":3165},[68,155373,155374],{"class":78},"bar.render(",[68,155376,155377],{"class":1742},"\"category_sales.html\"",[68,155379,1646],{"class":78},[14,155381,155383],{"id":155382},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[170,155385,155386],{},"时间线适合展示不同日期、月份、年份的数据变化。",[58,155388,155390],{"className":31862,"code":155389,"language":31864,"meta":63,"style":63},"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",[65,155391,155392,155406,155417,155421,155429,155453,155476,155501,155505,155509,155519,155523,155534,155543,155553,155567,155598,155603,155607],{"__ignoreMap":63},[68,155393,155394,155396,155398,155400,155402,155404],{"class":70,"line":71},[68,155395,32221],{"class":316},[68,155397,148602],{"class":78},[68,155399,31876],{"class":316},[68,155401,148607],{"class":78},[68,155403,32867],{"class":316},[68,155405,148612],{"class":78},[68,155407,155408,155410,155412,155414],{"class":70,"line":82},[68,155409,32221],{"class":316},[68,155411,148461],{"class":78},[68,155413,31876],{"class":316},[68,155415,155416],{"class":78}," Bar, Timeline\n",[68,155418,155419],{"class":70,"line":98},[68,155420,3890],{"emptyLinePlaceholder":1567},[68,155422,155423,155425,155427],{"class":70,"line":104},[68,155424,103133],{"class":78},[68,155426,1685],{"class":316},[68,155428,79],{"class":78},[68,155430,155431,155434,155437,155439,155441,155443,155445,155447,155449,155451],{"class":70,"line":112},[68,155432,155433],{"class":1742},"    \"2024-10-01\"",[68,155435,155436],{"class":78},": {",[68,155438,154866],{"class":1742},[68,155440,89],{"class":78},[68,155442,154875],{"class":85},[68,155444,13923],{"class":78},[68,155446,154896],{"class":1742},[68,155448,89],{"class":78},[68,155450,154905],{"class":85},[68,155452,6420],{"class":78},[68,155454,155455,155458,155460,155462,155464,155466,155468,155470,155472,155474],{"class":70,"line":124},[68,155456,155457],{"class":1742},"    \"2024-10-02\"",[68,155459,155436],{"class":78},[68,155461,154866],{"class":1742},[68,155463,89],{"class":78},[68,155465,154934],{"class":85},[68,155467,13923],{"class":78},[68,155469,154896],{"class":1742},[68,155471,89],{"class":78},[68,155473,154963],{"class":85},[68,155475,6420],{"class":78},[68,155477,155478,155481,155483,155485,155487,155490,155492,155494,155496,155499],{"class":70,"line":1496},[68,155479,155480],{"class":1742},"    \"2024-10-03\"",[68,155482,155436],{"class":78},[68,155484,154866],{"class":1742},[68,155486,89],{"class":78},[68,155488,155489],{"class":85},"17000",[68,155491,13923],{"class":78},[68,155493,154896],{"class":1742},[68,155495,89],{"class":78},[68,155497,155498],{"class":85},"19000",[68,155500,6420],{"class":78},[68,155502,155503],{"class":70,"line":1502},[68,155504,101],{"class":78},[68,155506,155507],{"class":70,"line":1510},[68,155508,3890],{"emptyLinePlaceholder":1567},[68,155510,155511,155514,155516],{"class":70,"line":1521},[68,155512,155513],{"class":78},"timeline ",[68,155515,1685],{"class":316},[68,155517,155518],{"class":78}," Timeline()\n",[68,155520,155521],{"class":70,"line":3103},[68,155522,3890],{"emptyLinePlaceholder":1567},[68,155524,155525,155527,155530,155532],{"class":70,"line":3108},[68,155526,4515],{"class":316},[68,155528,155529],{"class":78}," date, category_data ",[68,155531,27529],{"class":316},[68,155533,150371],{"class":78},[68,155535,155536,155539,155541],{"class":70,"line":3114},[68,155537,155538],{"class":78},"    bar ",[68,155540,1685],{"class":316},[68,155542,155285],{"class":78},[68,155544,155545,155548,155550],{"class":70,"line":3119},[68,155546,155547],{"class":78},"    bar.add_xaxis(",[68,155549,155293],{"class":85},[68,155551,155552],{"class":78},"(category_data.keys()))\n",[68,155554,155555,155558,155560,155562,155564],{"class":70,"line":3133},[68,155556,155557],{"class":78},"    bar.add_yaxis(",[68,155559,148518],{"class":1742},[68,155561,13923],{"class":78},[68,155563,155293],{"class":85},[68,155565,155566],{"class":78},"(category_data.values()))\n",[68,155568,155569,155572,155575,155577,155579,155581,155583,155585,155587,155589,155591,155593,155596],{"class":70,"line":3138},[68,155570,155571],{"class":78},"    bar.set_global_opts(",[68,155573,155574],{"class":6705},"title_opts",[68,155576,1685],{"class":316},[68,155578,148701],{"class":78},[68,155580,52891],{"class":6705},[68,155582,1685],{"class":316},[68,155584,1691],{"class":316},[68,155586,1880],{"class":1742},[68,155588,2523],{"class":85},[68,155590,75403],{"class":78},[68,155592,2573],{"class":85},[68,155594,155595],{"class":1742},"销售额\"",[68,155597,31981],{"class":78},[68,155599,155600],{"class":70,"line":3144},[68,155601,155602],{"class":78},"    timeline.add(bar, date)\n",[68,155604,155605],{"class":70,"line":3165},[68,155606,3890],{"emptyLinePlaceholder":1567},[68,155608,155609,155612,155615],{"class":70,"line":3170},[68,155610,155611],{"class":78},"timeline.render(",[68,155613,155614],{"class":1742},"\"timeline_sales.html\"",[68,155616,1646],{"class":78},[14,155618,155620],{"id":155619},"_128-绘制地图","12.8 绘制地图",[170,155622,155623],{},"地图适合展示地区数据。",[58,155625,155627],{"className":31862,"code":155626,"language":31864,"meta":63,"style":63},"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",[65,155628,155629,155643,155654,155658,155666,155679,155691,155704,155717,155721,155725,155735,155750,155755,155772,155791,155795],{"__ignoreMap":63},[68,155630,155631,155633,155635,155637,155639,155641],{"class":70,"line":71},[68,155632,32221],{"class":316},[68,155634,148602],{"class":78},[68,155636,31876],{"class":316},[68,155638,148607],{"class":78},[68,155640,32867],{"class":316},[68,155642,148612],{"class":78},[68,155644,155645,155647,155649,155651],{"class":70,"line":82},[68,155646,32221],{"class":316},[68,155648,148461],{"class":78},[68,155650,31876],{"class":316},[68,155652,155653],{"class":78}," Map\n",[68,155655,155656],{"class":70,"line":98},[68,155657,3890],{"emptyLinePlaceholder":1567},[68,155659,155660,155662,155664],{"class":70,"line":104},[68,155661,103133],{"class":78},[68,155663,1685],{"class":316},[68,155665,56925],{"class":78},[68,155667,155668,155671,155673,155675,155677],{"class":70,"line":112},[68,155669,155670],{"class":78},"    (",[68,155672,70747],{"class":1742},[68,155674,13923],{"class":78},[68,155676,2444],{"class":85},[68,155678,39531],{"class":78},[68,155680,155681,155683,155685,155687,155689],{"class":70,"line":124},[68,155682,155670],{"class":78},[68,155684,70767],{"class":1742},[68,155686,13923],{"class":78},[68,155688,148535],{"class":85},[68,155690,39531],{"class":78},[68,155692,155693,155695,155698,155700,155702],{"class":70,"line":1496},[68,155694,155670],{"class":78},[68,155696,155697],{"class":1742},"\"广东\"",[68,155699,13923],{"class":78},[68,155701,3213],{"class":85},[68,155703,39531],{"class":78},[68,155705,155706,155708,155711,155713,155715],{"class":70,"line":1502},[68,155707,155670],{"class":78},[68,155709,155710],{"class":1742},"\"浙江\"",[68,155712,13923],{"class":78},[68,155714,148540],{"class":85},[68,155716,39531],{"class":78},[68,155718,155719],{"class":70,"line":1510},[68,155720,34730],{"class":78},[68,155722,155723],{"class":70,"line":1521},[68,155724,3890],{"emptyLinePlaceholder":1567},[68,155726,155727,155730,155732],{"class":70,"line":3103},[68,155728,155729],{"class":78},"map_chart ",[68,155731,1685],{"class":316},[68,155733,155734],{"class":78}," Map()\n",[68,155736,155737,155740,155742,155745,155748],{"class":70,"line":3108},[68,155738,155739],{"class":78},"map_chart.add(",[68,155741,148518],{"class":1742},[68,155743,155744],{"class":78},", data, ",[68,155746,155747],{"class":1742},"\"china\"",[68,155749,1646],{"class":78},[68,155751,155752],{"class":70,"line":3114},[68,155753,155754],{"class":78},"map_chart.set_global_opts(\n",[68,155756,155757,155759,155761,155763,155765,155767,155770],{"class":70,"line":3119},[68,155758,148696],{"class":6705},[68,155760,1685],{"class":316},[68,155762,148701],{"class":78},[68,155764,52891],{"class":6705},[68,155766,1685],{"class":316},[68,155768,155769],{"class":1742},"\"地区销售额\"",[68,155771,39531],{"class":78},[68,155773,155774,155777,155779,155782,155785,155787,155789],{"class":70,"line":3133},[68,155775,155776],{"class":6705},"    visualmap_opts",[68,155778,1685],{"class":316},[68,155780,155781],{"class":78},"opts.VisualMapOpts(",[68,155783,155784],{"class":6705},"max_",[68,155786,1685],{"class":316},[68,155788,3213],{"class":85},[68,155790,39531],{"class":78},[68,155792,155793],{"class":70,"line":3138},[68,155794,1646],{"class":78},[68,155796,155797,155800,155803],{"class":70,"line":3144},[68,155798,155799],{"class":78},"map_chart.render(",[68,155801,155802],{"class":1742},"\"map_sales.html\"",[68,155804,1646],{"class":78},[170,155806,155807],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155809,155811],{"id":155810},"_129-项目拆分建议","12.9 项目拆分建议",[170,155813,155814],{},"当代码超过一个文件时，可以这样组织：",[58,155816,155819],{"className":155817,"code":155818,"language":6676,"meta":63},[6674],"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",[65,155820,155818],{"__ignoreMap":63},[170,155822,155823],{},"职责：",[263,155825,155826,155832,155838,155844],{},[27,155827,155828,155831],{},[65,155829,155830],{},"main.py","：程序入口。",[27,155833,155834,155837],{},[65,155835,155836],{},"file_utils.py","：读写 JSON。",[27,155839,155840,155843],{},[65,155841,155842],{},"sales_service.py","：统计销售数据。",[27,155845,155846,155849],{},[65,155847,155848],{},"chart_builder.py","：生成图表。",[14,155851,155853],{"id":155852},"_1210-python基础复习清单","12.10 Python基础复习清单",[170,155855,155856],{},"语法基础：",[263,155858,155859,155862,155865,155868],{},[27,155860,155861],{},"会写变量、注释、输入输出。",[27,155863,155864],{},"会使用 int、float、str、bool。",[27,155866,155867],{},"会做类型转换。",[27,155869,155870],{},"会使用 f-string 格式化输出。",[170,155872,155873],{},"流程控制：",[263,155875,155876,155882,155888,155896],{},[27,155877,155878,155879,29869],{},"会写 ",[65,155880,155881],{},"if elif else",[27,155883,155878,155884,102493,155886,29869],{},[65,155885,110137],{},[65,155887,4515],{},[27,155889,155890,155891,102493,155893,29869],{},"理解 ",[65,155892,3543],{},[65,155894,155895],{},"continue",[27,155897,155898],{},"能写嵌套循环。",[170,155900,155901],{},"函数：",[263,155903,155904,155907,155910,155913],{},[27,155905,155906],{},"会定义和调用函数。",[27,155908,155909],{},"理解参数和返回值。",[27,155911,155912],{},"知道局部变量和全局变量。",[27,155914,155915],{},"会使用默认参数、关键字参数、不定长参数。",[170,155917,155918],{},"容器：",[263,155920,155921,155924,155927,155930,155933],{},[27,155922,155923],{},"会使用列表增删改查。",[27,155925,155926],{},"会遍历列表、字典。",[27,155928,155929],{},"会使用切片。",[27,155931,155932],{},"会用集合去重。",[27,155934,155935],{},"会处理列表嵌套字典。",[170,155937,155938],{},"文件和模块：",[263,155940,155941,155944,155947,155950,155953],{},[27,155942,155943],{},"会读写文本文件。",[27,155945,155946],{},"会读写 JSON。",[27,155948,155949],{},"会捕获常见异常。",[27,155951,155952],{},"会导入模块和第三方包。",[27,155954,155955],{},"会创建简单包结构。",[170,155957,155958],{},"项目能力：",[263,155960,155961,155964,155967,155970,155973],{},[27,155962,155963],{},"能把代码拆成函数。",[27,155965,155966],{},"能把数据保存到文件。",[27,155968,155969],{},"能处理用户输入错误。",[27,155971,155972],{},"能写一个完整菜单程序。",[27,155974,155975],{},"能用 pyecharts 生成图表。",[14,155977,155979],{"id":155978},"_1211-推荐练习顺序","12.11 推荐练习顺序",[263,155981,155982,155985,155988,155991,155994,155997,156000,156003],{},[27,155983,155984],{},"猜数字游戏。",[27,155986,155987],{},"ATM 菜单程序。",[27,155989,155990],{},"学生成绩统计。",[27,155992,155993],{},"学生管理系统函数版。",[27,155995,155996],{},"学生管理系统文件持久化版。",[27,155998,155999],{},"学生管理系统面向对象版。",[27,156001,156002],{},"销售数据统计。",[27,156004,156005],{},"销售数据可视化。",[14,156007,156009],{"id":156008},"_1212-常见学习误区","12.12 常见学习误区",[263,156011,156012,156015,156018,156021,156024,156027,156030],{},[27,156013,156014],{},"只看视频不敲代码。",[27,156016,156017],{},"一报错就复制错误去搜，不先读报错位置。",[27,156019,156020],{},"变量名随便写，后续自己看不懂。",[27,156022,156023],{},"所有代码都写在一个文件一个函数里。",[27,156025,156026],{},"不保存练习代码，复习时没有材料。",[27,156028,156029],{},"还没掌握列表字典就急着学框架。",[27,156031,156032],{},"不会读官方文档，只依赖教程。",[14,156034,156036],{"id":156035},"_1213-如何读报错","12.13 如何读报错",[170,156038,156039],{},"报错通常从下往上看最后几行。",[170,156041,16623],{},[58,156043,156046],{"className":156044,"code":156045,"language":6676,"meta":63},[6674],"ValueError: invalid literal for int() with base 10: 'abc'\n",[65,156047,156045],{"__ignoreMap":63},[170,156049,26085],{},[263,156051,156052,156058,156068],{},[27,156053,156054,156055,29869],{},"异常类型是 ",[65,156056,156057],{},"ValueError",[27,156059,108819,156060,156063,156064,156067],{},[65,156061,156062],{},"int()"," 无法把 ",[65,156065,156066],{},"'abc'"," 转成整数。",[27,156069,156070],{},"应该检查输入内容或增加异常处理。",[170,156072,156073],{},"再看文件名和行号：",[58,156075,156078],{"className":156076,"code":156077,"language":6676,"meta":63},[6674],"File \"main.py\", line 10, in \u003Cmodule>\n",[65,156079,156077],{"__ignoreMap":63},[170,156081,156082,156083,156085],{},"表示错误发生在 ",[65,156084,155830],{}," 第 10 行。",[14,156087,156089],{"id":156088},"_1214-后续学习方向","12.14 后续学习方向",[170,156091,156092],{},"Python 基础完成后，可以按兴趣选择方向：",[263,156094,156095,156107,156116,156128,156139,156148,156158],{},[27,156096,156097,156098,1841,156101,1841,156104,29869],{},"自动化办公：",[65,156099,156100],{},"openpyxl",[65,156102,156103],{},"python-docx",[65,156105,156106],{},"pdfplumber",[27,156108,156109,156110,1841,156112,1841,156114,29869],{},"数据分析：",[65,156111,102101],{},[65,156113,147408],{},[65,156115,147416],{},[27,156117,156118,156119,1841,156122,1841,156125,29869],{},"Web 后端：",[65,156120,156121],{},"Flask",[65,156123,156124],{},"FastAPI",[65,156126,156127],{},"Django",[27,156129,156130,156131,1841,156133,1841,156136,29869],{},"爬虫：",[65,156132,147393],{},[65,156134,156135],{},"BeautifulSoup",[65,156137,156138],{},"Scrapy",[27,156140,156141,156142,1841,156144,156147],{},"测试开发：",[65,156143,147440],{},[65,156145,156146],{},"selenium","、接口测试。",[27,156149,156150,156151,1841,156153,1841,156155,29869],{},"人工智能：",[65,156152,102101],{},[65,156154,147408],{},[65,156156,156157],{},"pytorch",[27,156159,156160,156161,1841,156163,1841,156166,29869],{},"运维脚本：",[65,156162,147009],{},[65,156164,156165],{},"subprocess",[65,156167,156168],{},"paramiko",[170,156170,156171],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156173,156175],{"id":156174},"_1215-结课练习","12.15 结课练习",[263,156177,156178,156181,156184,156187,156190,156193,156196,156199],{},[27,156179,156180],{},"完成函数版学生管理系统。",[27,156182,156183],{},"给学生管理系统增加 JSON 持久化。",[27,156185,156186],{},"给学生管理系统增加异常处理。",[27,156188,156189],{},"把学生管理系统改成面向对象版。",[27,156191,156192],{},"使用 pyecharts 绘制学生成绩柱状图。",[27,156194,156195],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[27,156197,156198],{},"按品类统计销售额并绘制柱状图。",[27,156200,156201],{},"写一份自己的 Python 学习路线图。",[1553,156203,156204],{},"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":63,"searchDepth":82,"depth":82,"links":156206},[156207,156208,156211,156212,156213,156219,156220,156221,156222,156223,156224,156225,156226,156227,156228],{"id":152923,"depth":82,"text":152924},{"id":152973,"depth":82,"text":152974,"children":156209},[156210],{"id":152977,"depth":98,"text":152978},{"id":153016,"depth":82,"text":153017},{"id":154490,"depth":82,"text":154491},{"id":154828,"depth":82,"text":154829,"children":156214},[156215,156216,156217,156218],{"id":154832,"depth":98,"text":154833},{"id":154972,"depth":98,"text":154973},{"id":155062,"depth":98,"text":155063},{"id":155148,"depth":98,"text":155149},{"id":155189,"depth":82,"text":155190},{"id":155382,"depth":82,"text":155383},{"id":155619,"depth":82,"text":155620},{"id":155810,"depth":82,"text":155811},{"id":155852,"depth":82,"text":155853},{"id":155978,"depth":82,"text":155979},{"id":156008,"depth":82,"text":156009},{"id":156035,"depth":82,"text":156036},{"id":156088,"depth":82,"text":156089},{"id":156174,"depth":82,"text":156175},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152915,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156235,"title":156236,"body":156237,"description":1564,"extension":1565,"meta":158706,"navigation":1567,"path":158707,"seo":158708,"stem":158709,"__hash__":158710},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156238,"toc":158681},[156239,156242,156246,156249,156252,156272,156275,156298,156301,156304,156326,156329,156351,156355,156358,156398,156401,156522,156526,156529,156569,156572,156596,156599,156603,156606,156620,156653,156656,156691,156694,156717,156720,156753,156756,156758,156764,156839,156842,156848,156865,156905,156909,156912,156958,156960,156998,157001,157036,157039,157074,157077,157109,157112,157131,157135,157139,157252,157254,157329,157333,157379,157382,157408,157417,157421,157424,157487,157495,157523,157527,157567,157632,157636,157639,157678,157681,157726,157729,157790,157794,157821,157824,157852,157855,157859,157863,157928,157931,157969,157972,158004,158008,158107,158111,158114,158187,158190,158238,158242,158248,158288,158291,158338,158341,158390,158394,158396,158410,158412,158593,158597,158624,158644,158651,158655,158672,158678],[10,156240,156236],{"id":156241},"_2-基础语法变量与字符串",[14,156243,156245],{"id":156244},"_21-注释","2.1 注释",[170,156247,156248],{},"注释是给人看的说明文字，不会被 Python 执行。",[170,156250,156251],{},"单行注释：",[58,156253,156255],{"className":31862,"code":156254,"language":31864,"meta":63,"style":63},"# 这是单行注释\nprint(\"hello\")\n",[65,156256,156257,156262],{"__ignoreMap":63},[68,156258,156259],{"class":70,"line":71},[68,156260,156261],{"class":302},"# 这是单行注释\n",[68,156263,156264,156266,156268,156270],{"class":70,"line":82},[68,156265,31899],{"class":85},[68,156267,1640],{"class":78},[68,156269,7333],{"class":1742},[68,156271,1646],{"class":78},[170,156273,156274],{},"多行说明常用三引号：",[58,156276,156278],{"className":31862,"code":156277,"language":31864,"meta":63,"style":63},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[65,156279,156280,156284,156289,156294],{"__ignoreMap":63},[68,156281,156282],{"class":70,"line":71},[68,156283,97173],{"class":1742},[68,156285,156286],{"class":70,"line":82},[68,156287,156288],{"class":1742},"这是多行说明。\n",[68,156290,156291],{"class":70,"line":98},[68,156292,156293],{"class":1742},"常用于文件顶部说明、函数说明等。\n",[68,156295,156296],{"class":70,"line":104},[68,156297,97173],{"class":1742},[170,156299,156300],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[170,156302,156303],{},"不好：",[58,156305,156307],{"className":31862,"code":156306,"language":31864,"meta":63,"style":63},"# age 加 1\nage = age + 1\n",[65,156308,156309,156314],{"__ignoreMap":63},[68,156310,156311],{"class":70,"line":71},[68,156312,156313],{"class":302},"# age 加 1\n",[68,156315,156316,156318,156320,156322,156324],{"class":70,"line":82},[68,156317,147769],{"class":78},[68,156319,1685],{"class":316},[68,156321,17194],{"class":78},[68,156323,2109],{"class":316},[68,156325,57177],{"class":85},[170,156327,156328],{},"较好：",[58,156330,156332],{"className":31862,"code":156331,"language":31864,"meta":63,"style":63},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[65,156333,156334,156339],{"__ignoreMap":63},[68,156335,156336],{"class":70,"line":71},[68,156337,156338],{"class":302},"# 用户过完生日后，年龄增加一岁\n",[68,156340,156341,156343,156345,156347,156349],{"class":70,"line":82},[68,156342,147769],{"class":78},[68,156344,1685],{"class":316},[68,156346,17194],{"class":78},[68,156348,2109],{"class":316},[68,156350,57177],{"class":85},[14,156352,156354],{"id":156353},"_22-字面量","2.2 字面量",[170,156356,156357],{},"字面量就是代码中直接写出来的数据。",[58,156359,156361],{"className":31862,"code":156360,"language":31864,"meta":63,"style":63},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[65,156362,156363,156370,156377,156384,156391],{"__ignoreMap":63},[68,156364,156365,156367],{"class":70,"line":71},[68,156366,1940],{"class":85},[68,156368,156369],{"class":302},"          # 整数\n",[68,156371,156372,156374],{"class":70,"line":82},[68,156373,1688],{"class":85},[68,156375,156376],{"class":302},"         # 小数\n",[68,156378,156379,156381],{"class":70,"line":98},[68,156380,7333],{"class":1742},[68,156382,156383],{"class":302},"      # 字符串\n",[68,156385,156386,156388],{"class":70,"line":104},[68,156387,32960],{"class":85},[68,156389,156390],{"class":302},"         # 布尔值\n",[68,156392,156393,156395],{"class":70,"line":112},[68,156394,97161],{"class":85},[68,156396,156397],{"class":302},"         # 空值\n",[170,156399,156400],{},"常见字面量类型：",[128,156402,156403,156413],{},[131,156404,156405],{},[134,156406,156407,156409,156411],{},[137,156408,25222],{},[137,156410,1055],{},[137,156412,27355],{},[144,156414,156415,156426,156437,156448,156460,156472,156484,156497,156509],{},[134,156416,156417,156419,156423],{},[149,156418,1643],{},[149,156420,156421],{},[65,156422,1940],{},[149,156424,156425],{},"整数",[134,156427,156428,156430,156434],{},[149,156429,1679],{},[149,156431,156432],{},[65,156433,1688],{},[149,156435,156436],{},"浮点数",[134,156438,156439,156441,156445],{},[149,156440,2795],{},[149,156442,156443],{},[65,156444,7333],{},[149,156446,156447],{},"字符串",[134,156449,156450,156452,156458],{},[149,156451,2847],{},[149,156453,156454,1841,156456],{},[65,156455,32960],{},[65,156457,35471],{},[149,156459,67493],{},[134,156461,156462,156465,156469],{},[149,156463,156464],{},"NoneType",[149,156466,156467],{},[65,156468,97161],{},[149,156470,156471],{},"空值",[134,156473,156474,156476,156481],{},[149,156475,155293],{},[149,156477,156478],{},[65,156479,156480],{},"[1, 2, 3]",[149,156482,156483],{},"列表",[134,156485,156486,156489,156494],{},[149,156487,156488],{},"tuple",[149,156490,156491],{},[65,156492,156493],{},"(1, 2, 3)",[149,156495,156496],{},"元组",[134,156498,156499,156501,156506],{},[149,156500,116020],{},[149,156502,156503],{},[65,156504,156505],{},"{\"name\": \"张三\"}",[149,156507,156508],{},"字典",[134,156510,156511,156514,156519],{},[149,156512,156513],{},"set",[149,156515,156516],{},[65,156517,156518],{},"{1, 2, 3}",[149,156520,156521],{},"集合",[14,156523,156525],{"id":156524},"_23-变量","2.3 变量",[170,156527,156528],{},"变量是保存数据的名字。",[58,156530,156532],{"className":31862,"code":156531,"language":31864,"meta":63,"style":63},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[65,156533,156534,156542,156550,156560],{"__ignoreMap":63},[68,156535,156536,156538,156540],{"class":70,"line":71},[68,156537,147759],{"class":78},[68,156539,1685],{"class":316},[68,156541,150576],{"class":1742},[68,156543,156544,156546,156548],{"class":70,"line":82},[68,156545,147769],{"class":78},[68,156547,1685],{"class":316},[68,156549,147774],{"class":85},[68,156551,156552,156555,156557],{"class":70,"line":98},[68,156553,156554],{"class":78},"height ",[68,156556,1685],{"class":316},[68,156558,156559],{"class":85}," 1.75\n",[68,156561,156562,156565,156567],{"class":70,"line":104},[68,156563,156564],{"class":78},"is_student ",[68,156566,1685],{"class":316},[68,156568,154822],{"class":85},[170,156570,156571],{},"Python 的变量不需要提前声明类型：",[58,156573,156575],{"className":31862,"code":156574,"language":31864,"meta":63,"style":63},"score = 100\nscore = \"满分\"\n",[65,156576,156577,156587],{"__ignoreMap":63},[68,156578,156579,156582,156584],{"class":70,"line":71},[68,156580,156581],{"class":78},"score ",[68,156583,1685],{"class":316},[68,156585,156586],{"class":85}," 100\n",[68,156588,156589,156591,156593],{"class":70,"line":82},[68,156590,156581],{"class":78},[68,156592,1685],{"class":316},[68,156594,156595],{"class":1742}," \"满分\"\n",[170,156597,156598],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156600,156602],{"id":156601},"_24-变量命名规则","2.4 变量命名规则",[170,156604,156605],{},"硬性规则：",[263,156607,156608,156611,156614,156617],{},[27,156609,156610],{},"只能由字母、数字、下划线组成。",[27,156612,156613],{},"不能以数字开头。",[27,156615,156616],{},"不能使用 Python 关键字。",[27,156618,156619],{},"区分大小写。",[58,156621,156623],{"className":31862,"code":156622,"language":31864,"meta":63,"style":63},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[65,156624,156625,156634,156643],{"__ignoreMap":63},[68,156626,156627,156630,156632],{"class":70,"line":71},[68,156628,156629],{"class":78},"user_name ",[68,156631,1685],{"class":316},[68,156633,147764],{"class":1742},[68,156635,156636,156639,156641],{"class":70,"line":82},[68,156637,156638],{"class":78},"age2 ",[68,156640,1685],{"class":316},[68,156642,147774],{"class":85},[68,156644,156645,156648,156650],{"class":70,"line":98},[68,156646,156647],{"class":78},"_token ",[68,156649,1685],{"class":316},[68,156651,156652],{"class":1742}," \"abc\"\n",[170,156654,156655],{},"错误写法：",[58,156657,156659],{"className":31862,"code":156658,"language":31864,"meta":63,"style":63},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[65,156660,156661,156670,156682],{"__ignoreMap":63},[68,156662,156663,156666,156668],{"class":70,"line":71},[68,156664,156665],{"class":78880},"2age",[68,156667,15052],{"class":316},[68,156669,147774],{"class":85},[68,156671,156672,156674,156676,156678,156680],{"class":70,"line":82},[68,156673,133047],{"class":78},[68,156675,2160],{"class":316},[68,156677,147759],{"class":78},[68,156679,1685],{"class":316},[68,156681,147764],{"class":1742},[68,156683,156684,156686,156688],{"class":70,"line":98},[68,156685,16182],{"class":316},[68,156687,15052],{"class":316},[68,156689,156690],{"class":1742}," \"一班\"\n",[170,156692,156693],{},"查看关键字：",[58,156695,156697],{"className":31862,"code":156696,"language":31864,"meta":63,"style":63},"import keyword\n\nprint(keyword.kwlist)\n",[65,156698,156699,156706,156710],{"__ignoreMap":63},[68,156700,156701,156703],{"class":70,"line":71},[68,156702,31876],{"class":316},[68,156704,156705],{"class":78}," keyword\n",[68,156707,156708],{"class":70,"line":82},[68,156709,3890],{"emptyLinePlaceholder":1567},[68,156711,156712,156714],{"class":70,"line":98},[68,156713,31899],{"class":85},[68,156715,156716],{"class":78},"(keyword.kwlist)\n",[170,156718,156719],{},"推荐命名风格：",[58,156721,156723],{"className":31862,"code":156722,"language":31864,"meta":63,"style":63},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[65,156724,156725,156734,156744],{"__ignoreMap":63},[68,156726,156727,156730,156732],{"class":70,"line":71},[68,156728,156729],{"class":78},"student_name ",[68,156731,1685],{"class":316},[68,156733,150576],{"class":1742},[68,156735,156736,156739,156741],{"class":70,"line":82},[68,156737,156738],{"class":78},"total_price ",[68,156740,1685],{"class":316},[68,156742,156743],{"class":85}," 99.8\n",[68,156745,156746,156749,156751],{"class":70,"line":98},[68,156747,156748],{"class":78},"is_finished ",[68,156750,1685],{"class":316},[68,156752,127281],{"class":85},[170,156754,156755],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156757,52216],{"id":52215},[170,156759,105841,156760,156763],{},[65,156761,156762],{},"type()"," 查看数据类型：",[58,156765,156767],{"className":31862,"code":156766,"language":31864,"meta":63,"style":63},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[65,156768,156769,156783,156797,156811,156825],{"__ignoreMap":63},[68,156770,156771,156773,156775,156777,156779,156781],{"class":70,"line":71},[68,156772,31899],{"class":85},[68,156774,1640],{"class":78},[68,156776,104582],{"class":85},[68,156778,1640],{"class":78},[68,156780,1940],{"class":85},[68,156782,31981],{"class":78},[68,156784,156785,156787,156789,156791,156793,156795],{"class":70,"line":82},[68,156786,31899],{"class":85},[68,156788,1640],{"class":78},[68,156790,104582],{"class":85},[68,156792,1640],{"class":78},[68,156794,1688],{"class":85},[68,156796,31981],{"class":78},[68,156798,156799,156801,156803,156805,156807,156809],{"class":70,"line":98},[68,156800,31899],{"class":85},[68,156802,1640],{"class":78},[68,156804,104582],{"class":85},[68,156806,1640],{"class":78},[68,156808,7333],{"class":1742},[68,156810,31981],{"class":78},[68,156812,156813,156815,156817,156819,156821,156823],{"class":70,"line":104},[68,156814,31899],{"class":85},[68,156816,1640],{"class":78},[68,156818,104582],{"class":85},[68,156820,1640],{"class":78},[68,156822,32960],{"class":85},[68,156824,31981],{"class":78},[68,156826,156827,156829,156831,156833,156835,156837],{"class":70,"line":112},[68,156828,31899],{"class":85},[68,156830,1640],{"class":78},[68,156832,104582],{"class":85},[68,156834,1640],{"class":78},[68,156836,97161],{"class":85},[68,156838,31981],{"class":78},[170,156840,156841],{},"输出类似：",[58,156843,156846],{"className":156844,"code":156845,"language":6676,"meta":63},[6674],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[65,156847,156845],{"__ignoreMap":63},[170,156849,1106,156850,108757,156852,156854,156855,156857,156858,22987,156860,156857,156862,156864],{},[65,156851,2847],{},[65,156853,1643],{}," 的子类，",[65,156856,32960],{}," 可以当作 ",[65,156859,1846],{},[65,156861,35471],{},[65,156863,1248],{},"，但业务代码中不要滥用。",[58,156866,156868],{"className":31862,"code":156867,"language":31864,"meta":63,"style":63},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[65,156869,156870,156888],{"__ignoreMap":63},[68,156871,156872,156874,156876,156878,156880,156882,156885],{"class":70,"line":71},[68,156873,31899],{"class":85},[68,156875,1640],{"class":78},[68,156877,32960],{"class":85},[68,156879,47050],{"class":316},[68,156881,26604],{"class":85},[68,156883,156884],{"class":78},")   ",[68,156886,156887],{"class":302},"# 2\n",[68,156889,156890,156892,156894,156896,156898,156900,156902],{"class":70,"line":82},[68,156891,31899],{"class":85},[68,156893,1640],{"class":78},[68,156895,35471],{"class":85},[68,156897,47050],{"class":316},[68,156899,26604],{"class":85},[68,156901,47292],{"class":78},[68,156903,156904],{"class":302},"# 1\n",[14,156906,156908],{"id":156907},"_26-类型转换","2.6 类型转换",[170,156910,156911],{},"常用转换函数：",[58,156913,156915],{"className":31862,"code":156914,"language":31864,"meta":63,"style":63},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[65,156916,156917,156927,156938,156948],{"__ignoreMap":63},[68,156918,156919,156921,156923,156925],{"class":70,"line":71},[68,156920,1643],{"class":85},[68,156922,1640],{"class":78},[68,156924,55797],{"class":1742},[68,156926,1646],{"class":78},[68,156928,156929,156931,156933,156936],{"class":70,"line":82},[68,156930,1679],{"class":85},[68,156932,1640],{"class":78},[68,156934,156935],{"class":1742},"\"3.14\"",[68,156937,1646],{"class":78},[68,156939,156940,156942,156944,156946],{"class":70,"line":98},[68,156941,2795],{"class":85},[68,156943,1640],{"class":78},[68,156945,1940],{"class":85},[68,156947,1646],{"class":78},[68,156949,156950,156952,156954,156956],{"class":70,"line":104},[68,156951,2847],{"class":85},[68,156953,1640],{"class":78},[68,156955,1846],{"class":85},[68,156957,1646],{"class":78},[170,156959,16623],{},[58,156961,156963],{"className":31862,"code":156962,"language":31864,"meta":63,"style":63},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[65,156964,156965,156974,156985],{"__ignoreMap":63},[68,156966,156967,156969,156971],{"class":70,"line":71},[68,156968,147769],{"class":78},[68,156970,1685],{"class":316},[68,156972,156973],{"class":1742}," \"18\"\n",[68,156975,156976,156978,156980,156982],{"class":70,"line":82},[68,156977,147769],{"class":78},[68,156979,1685],{"class":316},[68,156981,3872],{"class":85},[68,156983,156984],{"class":78},"(age)\n",[68,156986,156987,156989,156992,156994,156996],{"class":70,"line":98},[68,156988,31899],{"class":85},[68,156990,156991],{"class":78},"(age ",[68,156993,2109],{"class":316},[68,156995,26604],{"class":85},[68,156997,1646],{"class":78},[170,156999,157000],{},"输入得到的内容永远是字符串：",[58,157002,157004],{"className":31862,"code":157003,"language":31864,"meta":63,"style":63},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[65,157005,157006,157022],{"__ignoreMap":63},[68,157007,157008,157011,157013,157015,157017,157020],{"class":70,"line":71},[68,157009,157010],{"class":78},"num ",[68,157012,1685],{"class":316},[68,157014,62083],{"class":85},[68,157016,1640],{"class":78},[68,157018,157019],{"class":1742},"\"请输入数字:\"",[68,157021,1646],{"class":78},[68,157023,157024,157026,157028,157030,157033],{"class":70,"line":82},[68,157025,31899],{"class":85},[68,157027,1640],{"class":78},[68,157029,104582],{"class":85},[68,157031,157032],{"class":78},"(num))  ",[68,157034,157035],{"class":302},"# str\n",[170,157037,157038],{},"如果要做数学运算，必须转换：",[58,157040,157042],{"className":31862,"code":157041,"language":31864,"meta":63,"style":63},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[65,157043,157044,157062],{"__ignoreMap":63},[68,157045,157046,157048,157050,157052,157054,157056,157058,157060],{"class":70,"line":71},[68,157047,157010],{"class":78},[68,157049,1685],{"class":316},[68,157051,3872],{"class":85},[68,157053,1640],{"class":78},[68,157055,55302],{"class":85},[68,157057,1640],{"class":78},[68,157059,157019],{"class":1742},[68,157061,31981],{"class":78},[68,157063,157064,157066,157068,157070,157072],{"class":70,"line":82},[68,157065,31899],{"class":85},[68,157067,47103],{"class":78},[68,157069,2109],{"class":316},[68,157071,3528],{"class":85},[68,157073,1646],{"class":78},[170,157075,157076],{},"常见错误：",[58,157078,157080],{"className":31862,"code":157079,"language":31864,"meta":63,"style":63},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[65,157081,157082,157095],{"__ignoreMap":63},[68,157083,157084,157086,157088,157090,157092],{"class":70,"line":71},[68,157085,1643],{"class":85},[68,157087,1640],{"class":78},[68,157089,156935],{"class":1742},[68,157091,156884],{"class":78},[68,157093,157094],{"class":302},"# 错误\n",[68,157096,157097,157099,157101,157104,157107],{"class":70,"line":82},[68,157098,1643],{"class":85},[68,157100,1640],{"class":78},[68,157102,157103],{"class":1742},"\"abc\"",[68,157105,157106],{"class":78},")    ",[68,157108,157094],{"class":302},[170,157110,157111],{},"正确写法：",[58,157113,157115],{"className":31862,"code":157114,"language":31864,"meta":63,"style":63},"num = float(\"3.14\")\n",[65,157116,157117],{"__ignoreMap":63},[68,157118,157119,157121,157123,157125,157127,157129],{"class":70,"line":71},[68,157120,157010],{"class":78},[68,157122,1685],{"class":316},[68,157124,111271],{"class":85},[68,157126,1640],{"class":78},[68,157128,156935],{"class":1742},[68,157130,1646],{"class":78},[14,157132,157134],{"id":157133},"_27-运算符","2.7 运算符",[19,157136,157138],{"id":157137},"_271-算术运算符","2.7.1 算术运算符",[128,157140,157141,157152],{},[131,157142,157143],{},[134,157144,157145,157148,157150],{},[137,157146,157147],{},"运算符",[137,157149,27355],{},[137,157151,1055],{},[144,157153,157154,157168,157182,157196,157210,157224,157238],{},[134,157155,157156,157160,157163],{},[149,157157,157158],{},[65,157159,2109],{},[149,157161,157162],{},"加法",[149,157164,157165],{},[65,157166,157167],{},"1 + 2",[134,157169,157170,157174,157177],{},[149,157171,157172],{},[65,157173,2160],{},[149,157175,157176],{},"减法",[149,157178,157179],{},[65,157180,157181],{},"5 - 3",[134,157183,157184,157188,157191],{},[149,157185,157186],{},[65,157187,2083],{},[149,157189,157190],{},"乘法",[149,157192,157193],{},[65,157194,157195],{},"2 * 3",[134,157197,157198,157202,157205],{},[149,157199,157200],{},[65,157201,2212],{},[149,157203,157204],{},"除法，结果是浮点数",[149,157206,157207],{},[65,157208,157209],{},"5 \u002F 2",[134,157211,157212,157216,157219],{},[149,157213,157214],{},[65,157215,34813],{},[149,157217,157218],{},"整除",[149,157220,157221],{},[65,157222,157223],{},"5 \u002F\u002F 2",[134,157225,157226,157230,157233],{},[149,157227,157228],{},[65,157229,1957],{},[149,157231,157232],{},"取余",[149,157234,157235],{},[65,157236,157237],{},"5 % 2",[134,157239,157240,157244,157247],{},[149,157241,157242],{},[65,157243,12149],{},[149,157245,157246],{},"幂运算",[149,157248,157249],{},[65,157250,157251],{},"2 ** 3",[170,157253,16623],{},[58,157255,157257],{"className":31862,"code":157256,"language":31864,"meta":63,"style":63},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[65,157258,157259,157277,157294,157311],{"__ignoreMap":63},[68,157260,157261,157263,157265,157267,157270,157272,157274],{"class":70,"line":71},[68,157262,31899],{"class":85},[68,157264,1640],{"class":78},[68,157266,1948],{"class":85},[68,157268,157269],{"class":316}," \u002F",[68,157271,16243],{"class":85},[68,157273,156884],{"class":78},[68,157275,157276],{"class":302},"# 2.5\n",[68,157278,157279,157281,157283,157285,157288,157290,157292],{"class":70,"line":82},[68,157280,31899],{"class":85},[68,157282,1640],{"class":78},[68,157284,1948],{"class":85},[68,157286,157287],{"class":316}," \u002F\u002F",[68,157289,16243],{"class":85},[68,157291,47292],{"class":78},[68,157293,156887],{"class":302},[68,157295,157296,157298,157300,157302,157305,157307,157309],{"class":70,"line":98},[68,157297,31899],{"class":85},[68,157299,1640],{"class":78},[68,157301,1948],{"class":85},[68,157303,157304],{"class":316}," %",[68,157306,16243],{"class":85},[68,157308,156884],{"class":78},[68,157310,156904],{"class":302},[68,157312,157313,157315,157317,157319,157322,157324,157326],{"class":70,"line":104},[68,157314,31899],{"class":85},[68,157316,1640],{"class":78},[68,157318,1715],{"class":85},[68,157320,157321],{"class":316}," **",[68,157323,79547],{"class":85},[68,157325,47292],{"class":78},[68,157327,157328],{"class":302},"# 8\n",[19,157330,157332],{"id":157331},"_272-赋值运算符","2.7.2 赋值运算符",[58,157334,157336],{"className":31862,"code":157335,"language":31864,"meta":63,"style":63},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[65,157337,157338,157346,157354,157362,157370],{"__ignoreMap":63},[68,157339,157340,157342,157344],{"class":70,"line":71},[68,157341,157010],{"class":78},[68,157343,1685],{"class":316},[68,157345,59906],{"class":85},[68,157347,157348,157350,157352],{"class":70,"line":82},[68,157349,157010],{"class":78},[68,157351,10965],{"class":316},[68,157353,55908],{"class":85},[68,157355,157356,157358,157360],{"class":70,"line":98},[68,157357,157010],{"class":78},[68,157359,151475],{"class":316},[68,157361,49207],{"class":85},[68,157363,157364,157366,157368],{"class":70,"line":104},[68,157365,157010],{"class":78},[68,157367,138371],{"class":316},[68,157369,121510],{"class":85},[68,157371,157372,157374,157377],{"class":70,"line":112},[68,157373,157010],{"class":78},[68,157375,157376],{"class":316},"\u002F=",[68,157378,49207],{"class":85},[170,157380,157381],{},"等价关系：",[58,157383,157385],{"className":31862,"code":157384,"language":31864,"meta":63,"style":63},"num += 1\nnum = num + 1\n",[65,157386,157387,157395],{"__ignoreMap":63},[68,157388,157389,157391,157393],{"class":70,"line":71},[68,157390,157010],{"class":78},[68,157392,10965],{"class":316},[68,157394,57177],{"class":85},[68,157396,157397,157399,157401,157404,157406],{"class":70,"line":82},[68,157398,157010],{"class":78},[68,157400,1685],{"class":316},[68,157402,157403],{"class":78}," num ",[68,157405,2109],{"class":316},[68,157407,57177],{"class":85},[170,157409,157410,157411,102493,157414,29869],{},"Python 没有 ",[65,157412,157413],{},"num++",[65,157415,157416],{},"num--",[19,157418,157420],{"id":157419},"_273-比较运算符","2.7.3 比较运算符",[170,157422,157423],{},"比较运算结果是布尔值。",[58,157425,157427],{"className":31862,"code":157426,"language":31864,"meta":63,"style":63},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[65,157428,157429,157443,157458,157472],{"__ignoreMap":63},[68,157430,157431,157433,157435,157437,157439,157441],{"class":70,"line":71},[68,157432,31899],{"class":85},[68,157434,1640],{"class":78},[68,157436,313],{"class":85},[68,157438,27708],{"class":316},[68,157440,3638],{"class":85},[68,157442,1646],{"class":78},[68,157444,157445,157447,157449,157451,157454,157456],{"class":70,"line":82},[68,157446,31899],{"class":85},[68,157448,1640],{"class":78},[68,157450,313],{"class":85},[68,157452,157453],{"class":316}," >=",[68,157455,3528],{"class":85},[68,157457,1646],{"class":78},[68,157459,157460,157462,157464,157466,157468,157470],{"class":70,"line":98},[68,157461,31899],{"class":85},[68,157463,1640],{"class":78},[68,157465,313],{"class":85},[68,157467,103034],{"class":316},[68,157469,3573],{"class":85},[68,157471,1646],{"class":78},[68,157473,157474,157476,157478,157480,157483,157485],{"class":70,"line":104},[68,157475,31899],{"class":85},[68,157477,1640],{"class":78},[68,157479,313],{"class":85},[68,157481,157482],{"class":316}," !=",[68,157484,3573],{"class":85},[68,157486,1646],{"class":78},[170,157488,157489,157490,157492,157493,29869],{},"注意：判断相等用 ",[65,157491,4439],{},"，赋值用 ",[65,157494,1685],{},[58,157496,157498],{"className":31862,"code":157497,"language":31864,"meta":63,"style":63},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[65,157499,157500,157512],{"__ignoreMap":63},[68,157501,157502,157504,157506,157509],{"class":70,"line":71},[68,157503,147769],{"class":78},[68,157505,1685],{"class":316},[68,157507,157508],{"class":85}," 18",[68,157510,157511],{"class":302},"       # 赋值\n",[68,157513,157514,157516,157518,157520],{"class":70,"line":82},[68,157515,147769],{"class":78},[68,157517,4439],{"class":316},[68,157519,157508],{"class":85},[68,157521,157522],{"class":302},"      # 判断是否相等\n",[19,157524,157526],{"id":157525},"_274-逻辑运算符","2.7.4 逻辑运算符",[128,157528,157529,157537],{},[131,157530,157531],{},[134,157532,157533,157535],{},[137,157534,157147],{},[137,157536,27355],{},[144,157538,157539,157548,157557],{},[134,157540,157541,157545],{},[149,157542,157543],{},[65,157544,31946],{},[149,157546,157547],{},"并且",[134,157549,157550,157554],{},[149,157551,157552],{},[65,157553,116564],{},[149,157555,157556],{},"或者",[134,157558,157559,157564],{},[149,157560,157561],{},[65,157562,157563],{},"not",[149,157565,157566],{},"取反",[58,157568,157570],{"className":31862,"code":157569,"language":31864,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[65,157571,157572,157580,157589,157593,157608,157622],{"__ignoreMap":63},[68,157573,157574,157576,157578],{"class":70,"line":71},[68,157575,147769],{"class":78},[68,157577,1685],{"class":316},[68,157579,89540],{"class":85},[68,157581,157582,157585,157587],{"class":70,"line":82},[68,157583,157584],{"class":78},"has_ticket ",[68,157586,1685],{"class":316},[68,157588,154822],{"class":85},[68,157590,157591],{"class":70,"line":98},[68,157592,3890],{"emptyLinePlaceholder":1567},[68,157594,157595,157597,157599,157601,157603,157605],{"class":70,"line":104},[68,157596,31899],{"class":85},[68,157598,156991],{"class":78},[68,157600,3201],{"class":316},[68,157602,157508],{"class":85},[68,157604,121903],{"class":316},[68,157606,157607],{"class":78}," has_ticket)\n",[68,157609,157610,157612,157614,157616,157618,157620],{"class":70,"line":112},[68,157611,31899],{"class":85},[68,157613,156991],{"class":78},[68,157615,2537],{"class":316},[68,157617,157508],{"class":85},[68,157619,115675],{"class":316},[68,157621,157607],{"class":78},[68,157623,157624,157626,157628,157630],{"class":70,"line":124},[68,157625,31899],{"class":85},[68,157627,1640],{"class":78},[68,157629,157563],{"class":316},[68,157631,157607],{"class":78},[14,157633,157635],{"id":157634},"_28-字符串定义","2.8 字符串定义",[170,157637,157638],{},"三种常见写法：",[58,157640,157642],{"className":31862,"code":157641,"language":31864,"meta":63,"style":63},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[65,157643,157644,157654,157663,157673],{"__ignoreMap":63},[68,157645,157646,157649,157651],{"class":70,"line":71},[68,157647,157648],{"class":78},"name1 ",[68,157650,1685],{"class":316},[68,157652,157653],{"class":1742}," '小明'\n",[68,157655,157656,157659,157661],{"class":70,"line":82},[68,157657,157658],{"class":78},"name2 ",[68,157660,1685],{"class":316},[68,157662,150576],{"class":1742},[68,157664,157665,157668,157670],{"class":70,"line":98},[68,157666,157667],{"class":78},"text ",[68,157669,1685],{"class":316},[68,157671,157672],{"class":1742}," \"\"\"这是多行字符串\n",[68,157674,157675],{"class":70,"line":104},[68,157676,157677],{"class":1742},"可以换行\"\"\"\n",[170,157679,157680],{},"字符串中包含引号：",[58,157682,157684],{"className":31862,"code":157683,"language":31864,"meta":63,"style":63},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[65,157685,157686,157696,157706],{"__ignoreMap":63},[68,157687,157688,157691,157693],{"class":70,"line":71},[68,157689,157690],{"class":78},"msg ",[68,157692,1685],{"class":316},[68,157694,157695],{"class":1742}," \"他说:'你好'\"\n",[68,157697,157698,157701,157703],{"class":70,"line":82},[68,157699,157700],{"class":78},"msg2 ",[68,157702,1685],{"class":316},[68,157704,157705],{"class":1742}," '他说:\"你好\"'\n",[68,157707,157708,157711,157713,157716,157719,157722,157724],{"class":70,"line":98},[68,157709,157710],{"class":78},"msg3 ",[68,157712,1685],{"class":316},[68,157714,157715],{"class":1742}," \"他说:",[68,157717,157718],{"class":85},"\\\"",[68,157720,157721],{"class":1742},"你好",[68,157723,157718],{"class":85},[68,157725,26619],{"class":1742},[170,157727,157728],{},"常见转义字符：",[128,157730,157731,157740],{},[131,157732,157733],{},[134,157734,157735,157738],{},[137,157736,157737],{},"写法",[137,157739,102175],{},[144,157741,157742,157752,157761,157771,157780],{},[134,157743,157744,157749],{},[149,157745,157746],{},[65,157747,157748],{},"\\n",[149,157750,157751],{},"换行",[134,157753,157754,157758],{},[149,157755,157756],{},[65,157757,2727],{},[149,157759,157760],{},"制表符",[134,157762,157763,157768],{},[149,157764,157765],{},[65,157766,157767],{},"\\\\",[149,157769,157770],{},"反斜杠",[134,157772,157773,157777],{},[149,157774,157775],{},[65,157776,157718],{},[149,157778,157779],{},"双引号",[134,157781,157782,157787],{},[149,157783,157784],{},[65,157785,157786],{},"\\'",[149,157788,157789],{},"单引号",[14,157791,157793],{"id":157792},"_29-字符串拼接","2.9 字符串拼接",[58,157795,157797],{"className":31862,"code":157796,"language":31864,"meta":63,"style":63},"name = \"小明\"\nprint(\"你好，\" + name)\n",[65,157798,157799,157807],{"__ignoreMap":63},[68,157800,157801,157803,157805],{"class":70,"line":71},[68,157802,147759],{"class":78},[68,157804,1685],{"class":316},[68,157806,150576],{"class":1742},[68,157808,157809,157811,157813,157816,157818],{"class":70,"line":82},[68,157810,31899],{"class":85},[68,157812,1640],{"class":78},[68,157814,157815],{"class":1742},"\"你好，\"",[68,157817,47050],{"class":316},[68,157819,157820],{"class":78}," name)\n",[170,157822,157823],{},"字符串只能和字符串拼接：",[58,157825,157827],{"className":31862,"code":157826,"language":31864,"meta":63,"style":63},"age = 18\nprint(\"年龄:\" + str(age))\n",[65,157828,157829,157837],{"__ignoreMap":63},[68,157830,157831,157833,157835],{"class":70,"line":71},[68,157832,147769],{"class":78},[68,157834,1685],{"class":316},[68,157836,147774],{"class":85},[68,157838,157839,157841,157843,157845,157847,157849],{"class":70,"line":82},[68,157840,31899],{"class":85},[68,157842,1640],{"class":78},[68,157844,147740],{"class":1742},[68,157846,47050],{"class":316},[68,157848,75396],{"class":85},[68,157850,157851],{"class":78},"(age))\n",[170,157853,157854],{},"更推荐使用格式化字符串。",[14,157856,157858],{"id":157857},"_210-字符串格式化","2.10 字符串格式化",[19,157860,157862],{"id":157861},"_2101-百分号格式化","2.10.1 百分号格式化",[58,157864,157866],{"className":31862,"code":157865,"language":31864,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[65,157867,157868,157876,157884,157893,157897],{"__ignoreMap":63},[68,157869,157870,157872,157874],{"class":70,"line":71},[68,157871,147759],{"class":78},[68,157873,1685],{"class":316},[68,157875,150576],{"class":1742},[68,157877,157878,157880,157882],{"class":70,"line":82},[68,157879,147769],{"class":78},[68,157881,1685],{"class":316},[68,157883,147774],{"class":85},[68,157885,157886,157888,157890],{"class":70,"line":98},[68,157887,156581],{"class":78},[68,157889,1685],{"class":316},[68,157891,157892],{"class":85}," 95.5\n",[68,157894,157895],{"class":70,"line":104},[68,157896,3890],{"emptyLinePlaceholder":1567},[68,157898,157899,157901,157903,157906,157909,157912,157915,157918,157921,157923,157925],{"class":70,"line":112},[68,157900,31899],{"class":85},[68,157902,1640],{"class":78},[68,157904,157905],{"class":1742},"\"姓名:",[68,157907,157908],{"class":85},"%s",[68,157910,157911],{"class":1742}," 年龄:",[68,157913,157914],{"class":85},"%d",[68,157916,157917],{"class":1742}," 分数:",[68,157919,157920],{"class":85},"%.1f",[68,157922,1880],{"class":1742},[68,157924,157304],{"class":316},[68,157926,157927],{"class":78}," (name, age, score))\n",[170,157929,157930],{},"常用占位符：",[128,157932,157933,157942],{},[131,157934,157935],{},[134,157936,157937,157940],{},[137,157938,157939],{},"占位符",[137,157941,27355],{},[144,157943,157944,157952,157960],{},[134,157945,157946,157950],{},[149,157947,157948],{},[65,157949,157908],{},[149,157951,156447],{},[134,157953,157954,157958],{},[149,157955,157956],{},[65,157957,157914],{},[149,157959,156425],{},[134,157961,157962,157967],{},[149,157963,157964],{},[65,157965,157966],{},"%f",[149,157968,156436],{},[170,157970,157971],{},"精度控制：",[58,157973,157975],{"className":31862,"code":157974,"language":31864,"meta":63,"style":63},"price = 12.3456\nprint(\"%.2f\" % price)\n",[65,157976,157977,157986],{"__ignoreMap":63},[68,157978,157979,157981,157983],{"class":70,"line":71},[68,157980,147904],{"class":78},[68,157982,1685],{"class":316},[68,157984,157985],{"class":85}," 12.3456\n",[68,157987,157988,157990,157992,157994,157997,157999,158001],{"class":70,"line":82},[68,157989,31899],{"class":85},[68,157991,1640],{"class":78},[68,157993,1880],{"class":1742},[68,157995,157996],{"class":85},"%.2f",[68,157998,1880],{"class":1742},[68,158000,157304],{"class":316},[68,158002,158003],{"class":78}," price)\n",[19,158005,158007],{"id":158006},"_2102-format方法","2.10.2 format方法",[58,158009,158011],{"className":31862,"code":158010,"language":31864,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[65,158012,158013,158021,158029,158033,158052,158072],{"__ignoreMap":63},[68,158014,158015,158017,158019],{"class":70,"line":71},[68,158016,147759],{"class":78},[68,158018,1685],{"class":316},[68,158020,150576],{"class":1742},[68,158022,158023,158025,158027],{"class":70,"line":82},[68,158024,147769],{"class":78},[68,158026,1685],{"class":316},[68,158028,147774],{"class":85},[68,158030,158031],{"class":70,"line":98},[68,158032,3890],{"emptyLinePlaceholder":1567},[68,158034,158035,158037,158039,158041,158043,158045,158047,158049],{"class":70,"line":104},[68,158036,31899],{"class":85},[68,158038,1640],{"class":78},[68,158040,157905],{"class":1742},[68,158042,33943],{"class":85},[68,158044,157911],{"class":1742},[68,158046,33943],{"class":85},[68,158048,1880],{"class":1742},[68,158050,158051],{"class":78},".format(name, age))\n",[68,158053,158054,158056,158058,158060,158063,158065,158068,158070],{"class":70,"line":112},[68,158055,31899],{"class":85},[68,158057,1640],{"class":78},[68,158059,157905],{"class":1742},[68,158061,158062],{"class":85},"{0}",[68,158064,157911],{"class":1742},[68,158066,158067],{"class":85},"{1}",[68,158069,1880],{"class":1742},[68,158071,158051],{"class":78},[68,158073,158074,158076,158078,158080,158083,158085,158088,158090,158093,158095,158097,158100,158102,158104],{"class":70,"line":124},[68,158075,31899],{"class":85},[68,158077,1640],{"class":78},[68,158079,157905],{"class":1742},[68,158081,158082],{"class":85},"{name}",[68,158084,157911],{"class":1742},[68,158086,158087],{"class":85},"{age}",[68,158089,1880],{"class":1742},[68,158091,158092],{"class":78},".format(",[68,158094,81287],{"class":6705},[68,158096,1685],{"class":316},[68,158098,158099],{"class":78},"name, ",[68,158101,71699],{"class":6705},[68,158103,1685],{"class":316},[68,158105,158106],{"class":78},"age))\n",[19,158108,158110],{"id":158109},"_2103-f-string","2.10.3 f-string",[170,158112,158113],{},"推荐写法：",[58,158115,158117],{"className":31862,"code":158116,"language":31864,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[65,158118,158119,158127,158135,158143,158147],{"__ignoreMap":63},[68,158120,158121,158123,158125],{"class":70,"line":71},[68,158122,147759],{"class":78},[68,158124,1685],{"class":316},[68,158126,150576],{"class":1742},[68,158128,158129,158131,158133],{"class":70,"line":82},[68,158130,147769],{"class":78},[68,158132,1685],{"class":316},[68,158134,147774],{"class":85},[68,158136,158137,158139,158141],{"class":70,"line":98},[68,158138,156581],{"class":78},[68,158140,1685],{"class":316},[68,158142,157892],{"class":85},[68,158144,158145],{"class":70,"line":104},[68,158146,3890],{"emptyLinePlaceholder":1567},[68,158148,158149,158151,158153,158155,158157,158159,158161,158163,158165,158167,158169,158171,158173,158175,158178,158181,158183,158185],{"class":70,"line":112},[68,158150,31899],{"class":85},[68,158152,1640],{"class":78},[68,158154,1691],{"class":316},[68,158156,157905],{"class":1742},[68,158158,2523],{"class":85},[68,158160,81287],{"class":78},[68,158162,2573],{"class":85},[68,158164,157911],{"class":1742},[68,158166,2523],{"class":85},[68,158168,71699],{"class":78},[68,158170,2573],{"class":85},[68,158172,157917],{"class":1742},[68,158174,2523],{"class":85},[68,158176,158177],{"class":78},"score",[68,158179,158180],{"class":316},":.1f",[68,158182,2573],{"class":85},[68,158184,1880],{"class":1742},[68,158186,1646],{"class":78},[170,158188,158189],{},"表达式也可以放进去：",[58,158191,158193],{"className":31862,"code":158192,"language":31864,"meta":63,"style":63},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[65,158194,158195,158203,158211],{"__ignoreMap":63},[68,158196,158197,158199,158201],{"class":70,"line":71},[68,158198,147904],{"class":78},[68,158200,1685],{"class":316},[68,158202,147909],{"class":85},[68,158204,158205,158207,158209],{"class":70,"line":82},[68,158206,147914],{"class":78},[68,158208,1685],{"class":316},[68,158210,55908],{"class":85},[68,158212,158213,158215,158217,158219,158222,158224,158226,158228,158231,158233,158236],{"class":70,"line":98},[68,158214,31899],{"class":85},[68,158216,1640],{"class":78},[68,158218,1691],{"class":316},[68,158220,158221],{"class":1742},"\"总价:",[68,158223,2523],{"class":85},[68,158225,147904],{"class":78},[68,158227,2083],{"class":316},[68,158229,158230],{"class":78}," count",[68,158232,2573],{"class":85},[68,158234,158235],{"class":1742},"元\"",[68,158237,1646],{"class":78},[14,158239,158241],{"id":158240},"_211-input输入","2.11 input输入",[170,158243,158244,158247],{},[65,158245,158246],{},"input()"," 会暂停程序，等待用户输入。",[58,158249,158251],{"className":31862,"code":158250,"language":31864,"meta":63,"style":63},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[65,158252,158253,158267],{"__ignoreMap":63},[68,158254,158255,158257,158259,158261,158263,158265],{"class":70,"line":71},[68,158256,147759],{"class":78},[68,158258,1685],{"class":316},[68,158260,62083],{"class":85},[68,158262,1640],{"class":78},[68,158264,153602],{"class":1742},[68,158266,1646],{"class":78},[68,158268,158269,158271,158273,158275,158278,158280,158282,158284,158286],{"class":70,"line":82},[68,158270,31899],{"class":85},[68,158272,1640],{"class":78},[68,158274,1691],{"class":316},[68,158276,158277],{"class":1742},"\"你好，",[68,158279,2523],{"class":85},[68,158281,81287],{"class":78},[68,158283,2573],{"class":85},[68,158285,1880],{"class":1742},[68,158287,1646],{"class":78},[170,158289,158290],{},"输入整数：",[58,158292,158294],{"className":31862,"code":158293,"language":31864,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[65,158295,158296,158314],{"__ignoreMap":63},[68,158297,158298,158300,158302,158304,158306,158308,158310,158312],{"class":70,"line":71},[68,158299,147769],{"class":78},[68,158301,1685],{"class":316},[68,158303,3872],{"class":85},[68,158305,1640],{"class":78},[68,158307,55302],{"class":85},[68,158309,1640],{"class":78},[68,158311,153617],{"class":1742},[68,158313,31981],{"class":78},[68,158315,158316,158318,158320,158322,158325,158327,158329,158331,158334,158336],{"class":70,"line":82},[68,158317,31899],{"class":85},[68,158319,1640],{"class":78},[68,158321,1691],{"class":316},[68,158323,158324],{"class":1742},"\"明年你",[68,158326,2523],{"class":85},[68,158328,147769],{"class":78},[68,158330,2109],{"class":316},[68,158332,158333],{"class":85}," 1}",[68,158335,150627],{"class":1742},[68,158337,1646],{"class":78},[170,158339,158340],{},"输入小数：",[58,158342,158344],{"className":31862,"code":158343,"language":31864,"meta":63,"style":63},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[65,158345,158346,158365],{"__ignoreMap":63},[68,158347,158348,158350,158352,158354,158356,158358,158360,158363],{"class":70,"line":71},[68,158349,156554],{"class":78},[68,158351,1685],{"class":316},[68,158353,111271],{"class":85},[68,158355,1640],{"class":78},[68,158357,55302],{"class":85},[68,158359,1640],{"class":78},[68,158361,158362],{"class":1742},"\"请输入身高:\"",[68,158364,31981],{"class":78},[68,158366,158367,158369,158371,158373,158376,158378,158380,158383,158385,158388],{"class":70,"line":82},[68,158368,31899],{"class":85},[68,158370,1640],{"class":78},[68,158372,1691],{"class":316},[68,158374,158375],{"class":1742},"\"身高:",[68,158377,2523],{"class":85},[68,158379,26467],{"class":78},[68,158381,158382],{"class":316},":.2f",[68,158384,2573],{"class":85},[68,158386,158387],{"class":1742},"米\"",[68,158389,1646],{"class":78},[14,158391,158393],{"id":158392},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[170,158395,124766],{},[263,158397,158398,158401,158404,158407],{},[27,158399,158400],{},"输入商品单价。",[27,158402,158403],{},"输入购买数量。",[27,158405,158406],{},"输入折扣，例如 0.8 表示八折。",[27,158408,158409],{},"输出最终金额，保留两位小数。",[170,158411,11523],{},[58,158413,158415],{"className":31862,"code":158414,"language":31864,"meta":63,"style":63},"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",[65,158416,158417,158436,158455,158475,158479,158499,158503,158526,158547,158569],{"__ignoreMap":63},[68,158418,158419,158421,158423,158425,158427,158429,158431,158434],{"class":70,"line":71},[68,158420,147904],{"class":78},[68,158422,1685],{"class":316},[68,158424,111271],{"class":85},[68,158426,1640],{"class":78},[68,158428,55302],{"class":85},[68,158430,1640],{"class":78},[68,158432,158433],{"class":1742},"\"请输入商品单价:\"",[68,158435,31981],{"class":78},[68,158437,158438,158440,158442,158444,158446,158448,158450,158453],{"class":70,"line":82},[68,158439,147914],{"class":78},[68,158441,1685],{"class":316},[68,158443,3872],{"class":85},[68,158445,1640],{"class":78},[68,158447,55302],{"class":85},[68,158449,1640],{"class":78},[68,158451,158452],{"class":1742},"\"请输入购买数量:\"",[68,158454,31981],{"class":78},[68,158456,158457,158460,158462,158464,158466,158468,158470,158473],{"class":70,"line":98},[68,158458,158459],{"class":78},"discount ",[68,158461,1685],{"class":316},[68,158463,111271],{"class":85},[68,158465,1640],{"class":78},[68,158467,55302],{"class":85},[68,158469,1640],{"class":78},[68,158471,158472],{"class":1742},"\"请输入折扣:\"",[68,158474,31981],{"class":78},[68,158476,158477],{"class":70,"line":104},[68,158478,3890],{"emptyLinePlaceholder":1567},[68,158480,158481,158484,158486,158489,158491,158494,158496],{"class":70,"line":112},[68,158482,158483],{"class":78},"total ",[68,158485,1685],{"class":316},[68,158487,158488],{"class":78}," price ",[68,158490,2083],{"class":316},[68,158492,158493],{"class":78}," count ",[68,158495,2083],{"class":316},[68,158497,158498],{"class":78}," discount\n",[68,158500,158501],{"class":70,"line":124},[68,158502,3890],{"emptyLinePlaceholder":1567},[68,158504,158505,158507,158509,158511,158514,158516,158518,158520,158522,158524],{"class":70,"line":1496},[68,158506,31899],{"class":85},[68,158508,1640],{"class":78},[68,158510,1691],{"class":316},[68,158512,158513],{"class":1742},"\"商品单价:",[68,158515,2523],{"class":85},[68,158517,81292],{"class":78},[68,158519,158382],{"class":316},[68,158521,2573],{"class":85},[68,158523,1880],{"class":1742},[68,158525,1646],{"class":78},[68,158527,158528,158530,158532,158534,158537,158539,158541,158543,158545],{"class":70,"line":1502},[68,158529,31899],{"class":85},[68,158531,1640],{"class":78},[68,158533,1691],{"class":316},[68,158535,158536],{"class":1742},"\"购买数量:",[68,158538,2523],{"class":85},[68,158540,85910],{"class":78},[68,158542,2573],{"class":85},[68,158544,1880],{"class":1742},[68,158546,1646],{"class":78},[68,158548,158549,158551,158553,158555,158558,158560,158563,158565,158567],{"class":70,"line":1510},[68,158550,31899],{"class":85},[68,158552,1640],{"class":78},[68,158554,1691],{"class":316},[68,158556,158557],{"class":1742},"\"折扣:",[68,158559,2523],{"class":85},[68,158561,158562],{"class":78},"discount",[68,158564,2573],{"class":85},[68,158566,1880],{"class":1742},[68,158568,1646],{"class":78},[68,158570,158571,158573,158575,158577,158580,158582,158585,158587,158589,158591],{"class":70,"line":1521},[68,158572,31899],{"class":85},[68,158574,1640],{"class":78},[68,158576,1691],{"class":316},[68,158578,158579],{"class":1742},"\"应付金额:",[68,158581,2523],{"class":85},[68,158583,158584],{"class":78},"total",[68,158586,158382],{"class":316},[68,158588,2573],{"class":85},[68,158590,158235],{"class":1742},[68,158592,1646],{"class":78},[14,158594,158596],{"id":158595},"_213-易错点","2.13 易错点",[263,158598,158599,158604,158610,158618,158621],{},[27,158600,158601,158603],{},[65,158602,158246],{}," 的结果是字符串，做运算前要转换。",[27,158605,158606,158607,29869],{},"字符串拼接时，数字要先 ",[65,158608,158609],{},"str()",[27,158611,158612,158614,158615,158617],{},[65,158613,1685],{}," 是赋值，",[65,158616,4439],{}," 是比较。",[27,158619,158620],{},"Python 没有自增自减运算符。",[27,158622,158623],{},"浮点数计算可能有精度误差：",[58,158625,158627],{"className":31862,"code":158626,"language":31864,"meta":63,"style":63},"print(0.1 + 0.2)\n",[65,158628,158629],{"__ignoreMap":63},[68,158630,158631,158633,158635,158637,158639,158642],{"class":70,"line":71},[68,158632,31899],{"class":85},[68,158634,1640],{"class":78},[68,158636,87686],{"class":85},[68,158638,47050],{"class":316},[68,158640,158641],{"class":85}," 0.2",[68,158643,1646],{"class":78},[170,158645,158646,158647,158650],{},"金额计算如果要求严格，可以后续学习 ",[65,158648,158649],{},"decimal"," 模块。",[14,158652,158654],{"id":158653},"_214-本章练习","2.14 本章练习",[263,158656,158657,158660,158663,158666,158669],{},[27,158658,158659],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[27,158661,158662],{},"输入圆的半径，计算面积，保留两位小数。",[27,158664,158665],{},"输入工资和奖金，计算总收入。",[27,158667,158668],{},"输入摄氏温度，转换为华氏温度。",[27,158670,158671],{},"写一个 BMI 计算程序：",[58,158673,158676],{"className":158674,"code":158675,"language":6676,"meta":63},[6674],"BMI = 体重kg \u002F 身高m ** 2\n",[65,158677,158675],{"__ignoreMap":63},[1553,158679,158680],{},"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":63,"searchDepth":82,"depth":82,"links":158682},[158683,158684,158685,158686,158687,158688,158689,158695,158696,158697,158702,158703,158704,158705],{"id":156244,"depth":82,"text":156245},{"id":156353,"depth":82,"text":156354},{"id":156524,"depth":82,"text":156525},{"id":156601,"depth":82,"text":156602},{"id":52215,"depth":82,"text":52216},{"id":156907,"depth":82,"text":156908},{"id":157133,"depth":82,"text":157134,"children":158690},[158691,158692,158693,158694],{"id":157137,"depth":98,"text":157138},{"id":157331,"depth":98,"text":157332},{"id":157419,"depth":98,"text":157420},{"id":157525,"depth":98,"text":157526},{"id":157634,"depth":82,"text":157635},{"id":157792,"depth":82,"text":157793},{"id":157857,"depth":82,"text":157858,"children":158698},[158699,158700,158701],{"id":157861,"depth":98,"text":157862},{"id":158006,"depth":98,"text":158007},{"id":158109,"depth":98,"text":158110},{"id":158240,"depth":82,"text":158241},{"id":158392,"depth":82,"text":158393},{"id":158595,"depth":82,"text":158596},{"id":158653,"depth":82,"text":158654},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156236,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158712,"title":158713,"body":158714,"description":1564,"extension":1565,"meta":160350,"navigation":1567,"path":160351,"seo":160352,"stem":160353,"__hash__":160354},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158715,"toc":160331},[158716,158719,158723,158726,158741,158744,158772,158776,158826,158828,158844,158847,158873,158876,158880,158947,158950,158966,158970,158973,159091,159094,159101,159150,159156,159160,159163,159276,159279,159283,159287,159290,159340,159344,159347,159397,159401,159404,159442,159446,159449,159495,159498,159533,159537,159542,159545,159591,159593,159660,159664,159670,159781,159790,159794,159796,159807,159809,159975,159979,159981,159995,159997,160211,160215,160234,160251,160254,160300,160304,160328],[10,158717,158713],{"id":158718},"_3-判断语句",[14,158720,158722],{"id":158721},"_31-布尔值","3.1 布尔值",[170,158724,158725],{},"判断语句依赖布尔值：",[58,158727,158729],{"className":31862,"code":158728,"language":31864,"meta":63,"style":63},"True\nFalse\n",[65,158730,158731,158736],{"__ignoreMap":63},[68,158732,158733],{"class":70,"line":71},[68,158734,158735],{"class":85},"True\n",[68,158737,158738],{"class":70,"line":82},[68,158739,158740],{"class":85},"False\n",[170,158742,158743],{},"比较表达式会产生布尔值：",[58,158745,158747],{"className":31862,"code":158746,"language":31864,"meta":63,"style":63},"age = 18\nprint(age >= 18)  # True\n",[65,158748,158749,158757],{"__ignoreMap":63},[68,158750,158751,158753,158755],{"class":70,"line":71},[68,158752,147769],{"class":78},[68,158754,1685],{"class":316},[68,158756,147774],{"class":85},[68,158758,158759,158761,158763,158765,158767,158769],{"class":70,"line":82},[68,158760,31899],{"class":85},[68,158762,156991],{"class":78},[68,158764,3201],{"class":316},[68,158766,157508],{"class":85},[68,158768,47292],{"class":78},[68,158770,158771],{"class":302},"# True\n",[14,158773,158775],{"id":158774},"_32-if基础语法","3.2 if基础语法",[58,158777,158779],{"className":31862,"code":158778,"language":31864,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[65,158780,158781,158799,158803,158815],{"__ignoreMap":63},[68,158782,158783,158785,158787,158789,158791,158793,158795,158797],{"class":70,"line":71},[68,158784,147769],{"class":78},[68,158786,1685],{"class":316},[68,158788,3872],{"class":85},[68,158790,1640],{"class":78},[68,158792,55302],{"class":85},[68,158794,1640],{"class":78},[68,158796,153617],{"class":1742},[68,158798,31981],{"class":78},[68,158800,158801],{"class":70,"line":82},[68,158802,3890],{"emptyLinePlaceholder":1567},[68,158804,158805,158807,158809,158811,158813],{"class":70,"line":98},[68,158806,3023],{"class":316},[68,158808,17194],{"class":78},[68,158810,3201],{"class":316},[68,158812,157508],{"class":85},[68,158814,5229],{"class":78},[68,158816,158817,158819,158821,158824],{"class":70,"line":104},[68,158818,32783],{"class":85},[68,158820,1640],{"class":78},[68,158822,158823],{"class":1742},"\"可以进入网吧\"",[68,158825,1646],{"class":78},[170,158827,1106],{},[263,158829,158830,158835,158838,158841],{},[27,158831,158832,158834],{},[65,158833,3023],{}," 后面是条件表达式。",[27,158836,158837],{},"条件后面必须写冒号。",[27,158839,158840],{},"条件成立时执行缩进代码块。",[27,158842,158843],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[170,158845,158846],{},"错误示例：",[58,158848,158850],{"className":31862,"code":158849,"language":31864,"meta":63,"style":63},"if age >= 18\n    print(\"可以进入\")\n",[65,158851,158852,158862],{"__ignoreMap":63},[68,158853,158854,158856,158858,158860],{"class":70,"line":71},[68,158855,3023],{"class":316},[68,158857,17194],{"class":78},[68,158859,3201],{"class":316},[68,158861,147774],{"class":85},[68,158863,158864,158866,158868,158871],{"class":70,"line":82},[68,158865,32783],{"class":85},[68,158867,1640],{"class":78},[68,158869,158870],{"class":1742},"\"可以进入\"",[68,158872,1646],{"class":78},[170,158874,158875],{},"缺少冒号。",[14,158877,158879],{"id":158878},"_33-if-else","3.3 if else",[58,158881,158883],{"className":31862,"code":158882,"language":31864,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[65,158884,158885,158903,158907,158919,158930,158936],{"__ignoreMap":63},[68,158886,158887,158889,158891,158893,158895,158897,158899,158901],{"class":70,"line":71},[68,158888,147769],{"class":78},[68,158890,1685],{"class":316},[68,158892,3872],{"class":85},[68,158894,1640],{"class":78},[68,158896,55302],{"class":85},[68,158898,1640],{"class":78},[68,158900,153617],{"class":1742},[68,158902,31981],{"class":78},[68,158904,158905],{"class":70,"line":82},[68,158906,3890],{"emptyLinePlaceholder":1567},[68,158908,158909,158911,158913,158915,158917],{"class":70,"line":98},[68,158910,3023],{"class":316},[68,158912,17194],{"class":78},[68,158914,3201],{"class":316},[68,158916,157508],{"class":85},[68,158918,5229],{"class":78},[68,158920,158921,158923,158925,158928],{"class":70,"line":104},[68,158922,32783],{"class":85},[68,158924,1640],{"class":78},[68,158926,158927],{"class":1742},"\"成年人\"",[68,158929,1646],{"class":78},[68,158931,158932,158934],{"class":70,"line":112},[68,158933,3192],{"class":316},[68,158935,5229],{"class":78},[68,158937,158938,158940,158942,158945],{"class":70,"line":124},[68,158939,32783],{"class":85},[68,158941,1640],{"class":78},[68,158943,158944],{"class":1742},"\"未成年人\"",[68,158946,1646],{"class":78},[170,158948,158949],{},"执行逻辑：",[263,158951,158952,158958,158963],{},[27,158953,158954,158955,158957],{},"条件成立，执行 ",[65,158956,3023],{}," 代码块。",[27,158959,158960,158961,158957],{},"条件不成立，执行 ",[65,158962,3192],{},[27,158964,158965],{},"两个代码块只会执行其中一个。",[14,158967,158969],{"id":158968},"_34-if-elif-else","3.4 if elif else",[170,158971,158972],{},"多条件判断：",[58,158974,158976],{"className":31862,"code":158975,"language":31864,"meta":63,"style":63},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[65,158977,158978,158996,159000,159014,159025,159039,159050,159063,159074,159080],{"__ignoreMap":63},[68,158979,158980,158982,158984,158986,158988,158990,158992,158994],{"class":70,"line":71},[68,158981,156581],{"class":78},[68,158983,1685],{"class":316},[68,158985,3872],{"class":85},[68,158987,1640],{"class":78},[68,158989,55302],{"class":85},[68,158991,1640],{"class":78},[68,158993,153632],{"class":1742},[68,158995,31981],{"class":78},[68,158997,158998],{"class":70,"line":82},[68,158999,3890],{"emptyLinePlaceholder":1567},[68,159001,159002,159004,159007,159009,159012],{"class":70,"line":98},[68,159003,3023],{"class":316},[68,159005,159006],{"class":78}," score ",[68,159008,3201],{"class":316},[68,159010,159011],{"class":85}," 90",[68,159013,5229],{"class":78},[68,159015,159016,159018,159020,159023],{"class":70,"line":104},[68,159017,32783],{"class":85},[68,159019,1640],{"class":78},[68,159021,159022],{"class":1742},"\"优秀\"",[68,159024,1646],{"class":78},[68,159026,159027,159030,159032,159034,159037],{"class":70,"line":112},[68,159028,159029],{"class":316},"elif",[68,159031,159006],{"class":78},[68,159033,3201],{"class":316},[68,159035,159036],{"class":85}," 80",[68,159038,5229],{"class":78},[68,159040,159041,159043,159045,159048],{"class":70,"line":124},[68,159042,32783],{"class":85},[68,159044,1640],{"class":78},[68,159046,159047],{"class":1742},"\"良好\"",[68,159049,1646],{"class":78},[68,159051,159052,159054,159056,159058,159061],{"class":70,"line":1496},[68,159053,159029],{"class":316},[68,159055,159006],{"class":78},[68,159057,3201],{"class":316},[68,159059,159060],{"class":85}," 60",[68,159062,5229],{"class":78},[68,159064,159065,159067,159069,159072],{"class":70,"line":1502},[68,159066,32783],{"class":85},[68,159068,1640],{"class":78},[68,159070,159071],{"class":1742},"\"及格\"",[68,159073,1646],{"class":78},[68,159075,159076,159078],{"class":70,"line":1510},[68,159077,3192],{"class":316},[68,159079,5229],{"class":78},[68,159081,159082,159084,159086,159089],{"class":70,"line":1521},[68,159083,32783],{"class":85},[68,159085,1640],{"class":78},[68,159087,159088],{"class":1742},"\"不及格\"",[68,159090,1646],{"class":78},[170,159092,159093],{},"注意判断顺序很重要。",[170,159095,159096,159097,159100],{},"如果把 ",[65,159098,159099],{},"score >= 60"," 放在最前面：",[58,159102,159104],{"className":31862,"code":159103,"language":31864,"meta":63,"style":63},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[65,159105,159106,159118,159128,159140],{"__ignoreMap":63},[68,159107,159108,159110,159112,159114,159116],{"class":70,"line":71},[68,159109,3023],{"class":316},[68,159111,159006],{"class":78},[68,159113,3201],{"class":316},[68,159115,159060],{"class":85},[68,159117,5229],{"class":78},[68,159119,159120,159122,159124,159126],{"class":70,"line":82},[68,159121,32783],{"class":85},[68,159123,1640],{"class":78},[68,159125,159071],{"class":1742},[68,159127,1646],{"class":78},[68,159129,159130,159132,159134,159136,159138],{"class":70,"line":98},[68,159131,159029],{"class":316},[68,159133,159006],{"class":78},[68,159135,3201],{"class":316},[68,159137,159011],{"class":85},[68,159139,5229],{"class":78},[68,159141,159142,159144,159146,159148],{"class":70,"line":104},[68,159143,32783],{"class":85},[68,159145,1640],{"class":78},[68,159147,159022],{"class":1742},[68,159149,1646],{"class":78},[170,159151,159152,159153,159155],{},"成绩 95 会先满足 ",[65,159154,159099],{},"，后面的优秀分支就不会执行。",[14,159157,159159],{"id":159158},"_35-判断语句嵌套","3.5 判断语句嵌套",[170,159161,159162],{},"嵌套判断就是在一个判断内部再写判断。",[58,159164,159166],{"className":31862,"code":159165,"language":31864,"meta":63,"style":63},"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",[65,159167,159168,159186,159201,159205,159217,159231,159241,159248,159259,159265],{"__ignoreMap":63},[68,159169,159170,159172,159174,159176,159178,159180,159182,159184],{"class":70,"line":71},[68,159171,147769],{"class":78},[68,159173,1685],{"class":316},[68,159175,3872],{"class":85},[68,159177,1640],{"class":78},[68,159179,55302],{"class":85},[68,159181,1640],{"class":78},[68,159183,153617],{"class":1742},[68,159185,31981],{"class":78},[68,159187,159188,159190,159192,159194,159196,159199],{"class":70,"line":82},[68,159189,157584],{"class":78},[68,159191,1685],{"class":316},[68,159193,62083],{"class":85},[68,159195,1640],{"class":78},[68,159197,159198],{"class":1742},"\"是否有票(y\u002Fn):\"",[68,159200,1646],{"class":78},[68,159202,159203],{"class":70,"line":98},[68,159204,3890],{"emptyLinePlaceholder":1567},[68,159206,159207,159209,159211,159213,159215],{"class":70,"line":104},[68,159208,3023],{"class":316},[68,159210,17194],{"class":78},[68,159212,3201],{"class":316},[68,159214,157508],{"class":85},[68,159216,5229],{"class":78},[68,159218,159219,159221,159224,159226,159229],{"class":70,"line":112},[68,159220,4591],{"class":316},[68,159222,159223],{"class":78}," has_ticket ",[68,159225,4439],{"class":316},[68,159227,159228],{"class":1742}," \"y\"",[68,159230,5229],{"class":78},[68,159232,159233,159235,159237,159239],{"class":70,"line":124},[68,159234,33935],{"class":85},[68,159236,1640],{"class":78},[68,159238,158870],{"class":1742},[68,159240,1646],{"class":78},[68,159242,159243,159246],{"class":70,"line":1496},[68,159244,159245],{"class":316},"    else",[68,159247,5229],{"class":78},[68,159249,159250,159252,159254,159257],{"class":70,"line":1502},[68,159251,33935],{"class":85},[68,159253,1640],{"class":78},[68,159255,159256],{"class":1742},"\"请先买票\"",[68,159258,1646],{"class":78},[68,159260,159261,159263],{"class":70,"line":1510},[68,159262,3192],{"class":316},[68,159264,5229],{"class":78},[68,159266,159267,159269,159271,159274],{"class":70,"line":1521},[68,159268,32783],{"class":85},[68,159270,1640],{"class":78},[68,159272,159273],{"class":1742},"\"未成年人禁止进入\"",[68,159275,1646],{"class":78},[170,159277,159278],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159280,159282],{"id":159281},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,159284,159286],{"id":159285},"_361-and","3.6.1 and",[170,159288,159289],{},"两个条件都成立才成立。",[58,159291,159293],{"className":31862,"code":159292,"language":31864,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[65,159294,159295,159303,159311,159315,159330],{"__ignoreMap":63},[68,159296,159297,159299,159301],{"class":70,"line":71},[68,159298,147769],{"class":78},[68,159300,1685],{"class":316},[68,159302,89540],{"class":85},[68,159304,159305,159307,159309],{"class":70,"line":82},[68,159306,157584],{"class":78},[68,159308,1685],{"class":316},[68,159310,154822],{"class":85},[68,159312,159313],{"class":70,"line":98},[68,159314,3890],{"emptyLinePlaceholder":1567},[68,159316,159317,159319,159321,159323,159325,159327],{"class":70,"line":104},[68,159318,3023],{"class":316},[68,159320,17194],{"class":78},[68,159322,3201],{"class":316},[68,159324,157508],{"class":85},[68,159326,121903],{"class":316},[68,159328,159329],{"class":78}," has_ticket:\n",[68,159331,159332,159334,159336,159338],{"class":70,"line":112},[68,159333,32783],{"class":85},[68,159335,1640],{"class":78},[68,159337,158870],{"class":1742},[68,159339,1646],{"class":78},[19,159341,159343],{"id":159342},"_362-or","3.6.2 or",[170,159345,159346],{},"只要一个条件成立就成立。",[58,159348,159350],{"className":31862,"code":159349,"language":31864,"meta":63,"style":63},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[65,159351,159352,159361,159370,159374,159386],{"__ignoreMap":63},[68,159353,159354,159357,159359],{"class":70,"line":71},[68,159355,159356],{"class":78},"is_vip ",[68,159358,1685],{"class":316},[68,159360,127281],{"class":85},[68,159362,159363,159366,159368],{"class":70,"line":82},[68,159364,159365],{"class":78},"coupon ",[68,159367,1685],{"class":316},[68,159369,154822],{"class":85},[68,159371,159372],{"class":70,"line":98},[68,159373,3890],{"emptyLinePlaceholder":1567},[68,159375,159376,159378,159381,159383],{"class":70,"line":104},[68,159377,3023],{"class":316},[68,159379,159380],{"class":78}," is_vip ",[68,159382,116564],{"class":316},[68,159384,159385],{"class":78}," coupon:\n",[68,159387,159388,159390,159392,159395],{"class":70,"line":112},[68,159389,32783],{"class":85},[68,159391,1640],{"class":78},[68,159393,159394],{"class":1742},"\"可以享受优惠\"",[68,159396,1646],{"class":78},[19,159398,159400],{"id":159399},"_363-not","3.6.3 not",[170,159402,159403],{},"取反。",[58,159405,159407],{"className":31862,"code":159406,"language":31864,"meta":63,"style":63},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[65,159408,159409,159418,159422,159431],{"__ignoreMap":63},[68,159410,159411,159414,159416],{"class":70,"line":71},[68,159412,159413],{"class":78},"is_closed ",[68,159415,1685],{"class":316},[68,159417,127281],{"class":85},[68,159419,159420],{"class":70,"line":82},[68,159421,3890],{"emptyLinePlaceholder":1567},[68,159423,159424,159426,159428],{"class":70,"line":98},[68,159425,3023],{"class":316},[68,159427,40414],{"class":316},[68,159429,159430],{"class":78}," is_closed:\n",[68,159432,159433,159435,159437,159440],{"class":70,"line":104},[68,159434,32783],{"class":85},[68,159436,1640],{"class":78},[68,159438,159439],{"class":1742},"\"店铺营业中\"",[68,159441,1646],{"class":78},[14,159443,159445],{"id":159444},"_37-链式比较","3.7 链式比较",[170,159447,159448],{},"Python 支持链式比较：",[58,159450,159452],{"className":31862,"code":159451,"language":31864,"meta":63,"style":63},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[65,159453,159454,159463,159467,159484],{"__ignoreMap":63},[68,159455,159456,159458,159460],{"class":70,"line":71},[68,159457,156581],{"class":78},[68,159459,1685],{"class":316},[68,159461,159462],{"class":85}," 85\n",[68,159464,159465],{"class":70,"line":82},[68,159466,3890],{"emptyLinePlaceholder":1567},[68,159468,159469,159471,159473,159476,159478,159480,159482],{"class":70,"line":98},[68,159470,3023],{"class":316},[68,159472,5583],{"class":85},[68,159474,159475],{"class":316}," \u003C=",[68,159477,159006],{"class":78},[68,159479,3079],{"class":316},[68,159481,7243],{"class":85},[68,159483,5229],{"class":78},[68,159485,159486,159488,159490,159493],{"class":70,"line":104},[68,159487,32783],{"class":85},[68,159489,1640],{"class":78},[68,159491,159492],{"class":1742},"\"成绩合法\"",[68,159494,1646],{"class":78},[170,159496,159497],{},"等价于：",[58,159499,159501],{"className":31862,"code":159500,"language":31864,"meta":63,"style":63},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[65,159502,159503,159523],{"__ignoreMap":63},[68,159504,159505,159507,159509,159511,159513,159515,159517,159519,159521],{"class":70,"line":71},[68,159506,3023],{"class":316},[68,159508,159006],{"class":78},[68,159510,3201],{"class":316},[68,159512,5583],{"class":85},[68,159514,121903],{"class":316},[68,159516,159006],{"class":78},[68,159518,3079],{"class":316},[68,159520,7243],{"class":85},[68,159522,5229],{"class":78},[68,159524,159525,159527,159529,159531],{"class":70,"line":82},[68,159526,32783],{"class":85},[68,159528,1640],{"class":78},[68,159530,159492],{"class":1742},[68,159532,1646],{"class":78},[14,159534,159536],{"id":159535},"_38-真值和假值","3.8 真值和假值",[170,159538,117941,159539,159541],{},[65,159540,3023],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[170,159543,159544],{},"假值：",[58,159546,159548],{"className":31862,"code":159547,"language":31864,"meta":63,"style":63},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[65,159549,159550,159554,159559,159563,159567,159572,159576,159580,159585],{"__ignoreMap":63},[68,159551,159552],{"class":70,"line":71},[68,159553,158740],{"class":85},[68,159555,159556],{"class":70,"line":82},[68,159557,159558],{"class":85},"None\n",[68,159560,159561],{"class":70,"line":98},[68,159562,4575],{"class":85},[68,159564,159565],{"class":70,"line":104},[68,159566,33826],{"class":85},[68,159568,159569],{"class":70,"line":112},[68,159570,159571],{"class":1742},"\"\"\n",[68,159573,159574],{"class":70,"line":124},[68,159575,33841],{"class":78},[68,159577,159578],{"class":70,"line":1496},[68,159579,3466],{"class":78},[68,159581,159582],{"class":70,"line":1502},[68,159583,159584],{"class":78},"{}\n",[68,159586,159587,159589],{"class":70,"line":1510},[68,159588,156513],{"class":85},[68,159590,3466],{"class":78},[170,159592,16623],{},[58,159594,159596],{"className":31862,"code":159595,"language":31864,"meta":63,"style":63},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[65,159597,159598,159612,159616,159623,159643,159649],{"__ignoreMap":63},[68,159599,159600,159602,159604,159606,159608,159610],{"class":70,"line":71},[68,159601,147759],{"class":78},[68,159603,1685],{"class":316},[68,159605,62083],{"class":85},[68,159607,1640],{"class":78},[68,159609,153602],{"class":1742},[68,159611,1646],{"class":78},[68,159613,159614],{"class":70,"line":82},[68,159615,3890],{"emptyLinePlaceholder":1567},[68,159617,159618,159620],{"class":70,"line":98},[68,159619,3023],{"class":316},[68,159621,159622],{"class":78}," name:\n",[68,159624,159625,159627,159629,159631,159633,159635,159637,159639,159641],{"class":70,"line":104},[68,159626,32783],{"class":85},[68,159628,1640],{"class":78},[68,159630,1691],{"class":316},[68,159632,158277],{"class":1742},[68,159634,2523],{"class":85},[68,159636,81287],{"class":78},[68,159638,2573],{"class":85},[68,159640,1880],{"class":1742},[68,159642,1646],{"class":78},[68,159644,159645,159647],{"class":70,"line":112},[68,159646,3192],{"class":316},[68,159648,5229],{"class":78},[68,159650,159651,159653,159655,159658],{"class":70,"line":124},[68,159652,32783],{"class":85},[68,159654,1640],{"class":78},[68,159656,159657],{"class":1742},"\"姓名不能为空\"",[68,159659,1646],{"class":78},[14,159661,159663],{"id":159662},"_39-match语句","3.9 match语句",[170,159665,159666,159667,159669],{},"Python 3.10 开始支持 ",[65,159668,72743],{},"。它适合处理固定选项。",[58,159671,159673],{"className":31862,"code":159672,"language":31864,"meta":63,"style":63},"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",[65,159674,159675,159691,159695,159702,159712,159723,159732,159743,159752,159763,159770],{"__ignoreMap":63},[68,159676,159677,159680,159682,159684,159686,159689],{"class":70,"line":71},[68,159678,159679],{"class":78},"command ",[68,159681,1685],{"class":316},[68,159683,62083],{"class":85},[68,159685,1640],{"class":78},[68,159687,159688],{"class":1742},"\"请输入命令:\"",[68,159690,1646],{"class":78},[68,159692,159693],{"class":70,"line":82},[68,159694,3890],{"emptyLinePlaceholder":1567},[68,159696,159697,159699],{"class":70,"line":98},[68,159698,72743],{"class":316},[68,159700,159701],{"class":78}," command:\n",[68,159703,159704,159707,159710],{"class":70,"line":104},[68,159705,159706],{"class":316},"    case",[68,159708,159709],{"class":1742}," \"start\"",[68,159711,5229],{"class":78},[68,159713,159714,159716,159718,159721],{"class":70,"line":112},[68,159715,33935],{"class":85},[68,159717,1640],{"class":78},[68,159719,159720],{"class":1742},"\"启动\"",[68,159722,1646],{"class":78},[68,159724,159725,159727,159730],{"class":70,"line":124},[68,159726,159706],{"class":316},[68,159728,159729],{"class":1742}," \"stop\"",[68,159731,5229],{"class":78},[68,159733,159734,159736,159738,159741],{"class":70,"line":1496},[68,159735,33935],{"class":85},[68,159737,1640],{"class":78},[68,159739,159740],{"class":1742},"\"停止\"",[68,159742,1646],{"class":78},[68,159744,159745,159747,159750],{"class":70,"line":1502},[68,159746,159706],{"class":316},[68,159748,159749],{"class":1742}," \"restart\"",[68,159751,5229],{"class":78},[68,159753,159754,159756,159758,159761],{"class":70,"line":1510},[68,159755,33935],{"class":85},[68,159757,1640],{"class":78},[68,159759,159760],{"class":1742},"\"重启\"",[68,159762,1646],{"class":78},[68,159764,159765,159767],{"class":70,"line":1521},[68,159766,159706],{"class":316},[68,159768,159769],{"class":78}," _:\n",[68,159771,159772,159774,159776,159779],{"class":70,"line":3103},[68,159773,33935],{"class":85},[68,159775,1640],{"class":78},[68,159777,159778],{"class":1742},"\"未知命令\"",[68,159780,1646],{"class":78},[170,159782,159783,159784,159786,159787,159789],{},"入门阶段掌握 ",[65,159785,155881],{}," 更重要，",[65,159788,72743],{}," 可以作为补充。",[14,159791,159793],{"id":159792},"_310-小案例成绩等级","3.10 小案例：成绩等级",[170,159795,124766],{},[263,159797,159798,159801,159804],{},[27,159799,159800],{},"输入成绩。",[27,159802,159803],{},"判断成绩是否合法。",[27,159805,159806],{},"输出等级。",[170,159808,11523],{},[58,159810,159812],{"className":31862,"code":159811,"language":31864,"meta":63,"style":63},"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",[65,159813,159814,159832,159836,159854,159865,159877,159888,159900,159911,159924,159935,159947,159958,159964],{"__ignoreMap":63},[68,159815,159816,159818,159820,159822,159824,159826,159828,159830],{"class":70,"line":71},[68,159817,156581],{"class":78},[68,159819,1685],{"class":316},[68,159821,111271],{"class":85},[68,159823,1640],{"class":78},[68,159825,55302],{"class":85},[68,159827,1640],{"class":78},[68,159829,153632],{"class":1742},[68,159831,31981],{"class":78},[68,159833,159834],{"class":70,"line":82},[68,159835,3890],{"emptyLinePlaceholder":1567},[68,159837,159838,159840,159842,159844,159846,159848,159850,159852],{"class":70,"line":98},[68,159839,3023],{"class":316},[68,159841,40414],{"class":316},[68,159843,5583],{"class":85},[68,159845,159475],{"class":316},[68,159847,159006],{"class":78},[68,159849,3079],{"class":316},[68,159851,7243],{"class":85},[68,159853,5229],{"class":78},[68,159855,159856,159858,159860,159863],{"class":70,"line":104},[68,159857,32783],{"class":85},[68,159859,1640],{"class":78},[68,159861,159862],{"class":1742},"\"成绩不合法\"",[68,159864,1646],{"class":78},[68,159866,159867,159869,159871,159873,159875],{"class":70,"line":112},[68,159868,159029],{"class":316},[68,159870,159006],{"class":78},[68,159872,3201],{"class":316},[68,159874,159011],{"class":85},[68,159876,5229],{"class":78},[68,159878,159879,159881,159883,159886],{"class":70,"line":124},[68,159880,32783],{"class":85},[68,159882,1640],{"class":78},[68,159884,159885],{"class":1742},"\"等级:A\"",[68,159887,1646],{"class":78},[68,159889,159890,159892,159894,159896,159898],{"class":70,"line":1496},[68,159891,159029],{"class":316},[68,159893,159006],{"class":78},[68,159895,3201],{"class":316},[68,159897,159036],{"class":85},[68,159899,5229],{"class":78},[68,159901,159902,159904,159906,159909],{"class":70,"line":1502},[68,159903,32783],{"class":85},[68,159905,1640],{"class":78},[68,159907,159908],{"class":1742},"\"等级:B\"",[68,159910,1646],{"class":78},[68,159912,159913,159915,159917,159919,159922],{"class":70,"line":1510},[68,159914,159029],{"class":316},[68,159916,159006],{"class":78},[68,159918,3201],{"class":316},[68,159920,159921],{"class":85}," 70",[68,159923,5229],{"class":78},[68,159925,159926,159928,159930,159933],{"class":70,"line":1521},[68,159927,32783],{"class":85},[68,159929,1640],{"class":78},[68,159931,159932],{"class":1742},"\"等级:C\"",[68,159934,1646],{"class":78},[68,159936,159937,159939,159941,159943,159945],{"class":70,"line":3103},[68,159938,159029],{"class":316},[68,159940,159006],{"class":78},[68,159942,3201],{"class":316},[68,159944,159060],{"class":85},[68,159946,5229],{"class":78},[68,159948,159949,159951,159953,159956],{"class":70,"line":3108},[68,159950,32783],{"class":85},[68,159952,1640],{"class":78},[68,159954,159955],{"class":1742},"\"等级:D\"",[68,159957,1646],{"class":78},[68,159959,159960,159962],{"class":70,"line":3114},[68,159961,3192],{"class":316},[68,159963,5229],{"class":78},[68,159965,159966,159968,159970,159973],{"class":70,"line":3119},[68,159967,32783],{"class":85},[68,159969,1640],{"class":78},[68,159971,159972],{"class":1742},"\"等级:E\"",[68,159974,1646],{"class":78},[14,159976,159978],{"id":159977},"_311-小案例会员折扣","3.11 小案例：会员折扣",[170,159980,124766],{},[263,159982,159983,159986,159989,159992],{},[27,159984,159985],{},"输入消费金额。",[27,159987,159988],{},"输入会员等级，普通、银卡、金卡。",[27,159990,159991],{},"普通不打折，银卡 9 折，金卡 8 折。",[27,159993,159994],{},"满 500 再减 50。",[170,159996,11523],{},[58,159998,160000],{"className":31862,"code":159999,"language":31864,"meta":63,"style":63},"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",[65,160001,160002,160022,160038,160042,160050,160054,160068,160078,160091,160100,160113,160121,160127,160138,160142,160156,160160,160174,160184,160188],{"__ignoreMap":63},[68,160003,160004,160007,160009,160011,160013,160015,160017,160020],{"class":70,"line":71},[68,160005,160006],{"class":78},"amount ",[68,160008,1685],{"class":316},[68,160010,111271],{"class":85},[68,160012,1640],{"class":78},[68,160014,55302],{"class":85},[68,160016,1640],{"class":78},[68,160018,160019],{"class":1742},"\"请输入消费金额:\"",[68,160021,31981],{"class":78},[68,160023,160024,160027,160029,160031,160033,160036],{"class":70,"line":82},[68,160025,160026],{"class":78},"level ",[68,160028,1685],{"class":316},[68,160030,62083],{"class":85},[68,160032,1640],{"class":78},[68,160034,160035],{"class":1742},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[68,160037,1646],{"class":78},[68,160039,160040],{"class":70,"line":98},[68,160041,3890],{"emptyLinePlaceholder":1567},[68,160043,160044,160046,160048],{"class":70,"line":104},[68,160045,158459],{"class":78},[68,160047,1685],{"class":316},[68,160049,57177],{"class":85},[68,160051,160052],{"class":70,"line":112},[68,160053,3890],{"emptyLinePlaceholder":1567},[68,160055,160056,160058,160061,160063,160066],{"class":70,"line":124},[68,160057,3023],{"class":316},[68,160059,160060],{"class":78}," level ",[68,160062,4439],{"class":316},[68,160064,160065],{"class":1742}," \"银卡\"",[68,160067,5229],{"class":78},[68,160069,160070,160073,160075],{"class":70,"line":1496},[68,160071,160072],{"class":78},"    discount ",[68,160074,1685],{"class":316},[68,160076,160077],{"class":85}," 0.9\n",[68,160079,160080,160082,160084,160086,160089],{"class":70,"line":1502},[68,160081,159029],{"class":316},[68,160083,160060],{"class":78},[68,160085,4439],{"class":316},[68,160087,160088],{"class":1742}," \"金卡\"",[68,160090,5229],{"class":78},[68,160092,160093,160095,160097],{"class":70,"line":1510},[68,160094,160072],{"class":78},[68,160096,1685],{"class":316},[68,160098,160099],{"class":85}," 0.8\n",[68,160101,160102,160104,160106,160108,160111],{"class":70,"line":1521},[68,160103,159029],{"class":316},[68,160105,160060],{"class":78},[68,160107,4439],{"class":316},[68,160109,160110],{"class":1742}," \"普通\"",[68,160112,5229],{"class":78},[68,160114,160115,160117,160119],{"class":70,"line":3103},[68,160116,160072],{"class":78},[68,160118,1685],{"class":316},[68,160120,57177],{"class":85},[68,160122,160123,160125],{"class":70,"line":3108},[68,160124,3192],{"class":316},[68,160126,5229],{"class":78},[68,160128,160129,160131,160133,160136],{"class":70,"line":3114},[68,160130,32783],{"class":85},[68,160132,1640],{"class":78},[68,160134,160135],{"class":1742},"\"会员等级输入错误，按普通会员计算\"",[68,160137,1646],{"class":78},[68,160139,160140],{"class":70,"line":3119},[68,160141,3890],{"emptyLinePlaceholder":1567},[68,160143,160144,160147,160149,160152,160154],{"class":70,"line":3133},[68,160145,160146],{"class":78},"pay ",[68,160148,1685],{"class":316},[68,160150,160151],{"class":78}," amount ",[68,160153,2083],{"class":316},[68,160155,158498],{"class":78},[68,160157,160158],{"class":70,"line":3138},[68,160159,3890],{"emptyLinePlaceholder":1567},[68,160161,160162,160164,160167,160169,160172],{"class":70,"line":3144},[68,160163,3023],{"class":316},[68,160165,160166],{"class":78}," pay ",[68,160168,3201],{"class":316},[68,160170,160171],{"class":85}," 500",[68,160173,5229],{"class":78},[68,160175,160176,160179,160181],{"class":70,"line":3165},[68,160177,160178],{"class":78},"    pay ",[68,160180,151475],{"class":316},[68,160182,160183],{"class":85}," 50\n",[68,160185,160186],{"class":70,"line":3170},[68,160187,3890],{"emptyLinePlaceholder":1567},[68,160189,160190,160192,160194,160196,160198,160200,160203,160205,160207,160209],{"class":70,"line":3184},[68,160191,31899],{"class":85},[68,160193,1640],{"class":78},[68,160195,1691],{"class":316},[68,160197,158579],{"class":1742},[68,160199,2523],{"class":85},[68,160201,160202],{"class":78},"pay",[68,160204,158382],{"class":316},[68,160206,2573],{"class":85},[68,160208,158235],{"class":1742},[68,160210,1646],{"class":78},[14,160212,160214],{"id":160213},"_312-易错点","3.12 易错点",[263,160216,160217,160220,160223,160226,160231],{},[27,160218,160219],{},"冒号不能漏。",[27,160221,160222],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[27,160224,160225],{},"多分支判断要注意顺序。",[27,160227,160228,160229,29869],{},"判断相等用 ",[65,160230,4439],{},[27,160232,160233],{},"字符串比较区分大小写：",[58,160235,160237],{"className":31862,"code":160236,"language":31864,"meta":63,"style":63},"\"Y\" == \"y\"  # False\n",[65,160238,160239],{"__ignoreMap":63},[68,160240,160241,160244,160246,160248],{"class":70,"line":71},[68,160242,160243],{"class":1742},"\"Y\"",[68,160245,103034],{"class":316},[68,160247,159228],{"class":1742},[68,160249,160250],{"class":302},"  # False\n",[170,160252,160253],{},"可转换后再判断：",[58,160255,160257],{"className":31862,"code":160256,"language":31864,"meta":63,"style":63},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[65,160258,160259,160276,160289],{"__ignoreMap":63},[68,160260,160261,160264,160266,160268,160270,160273],{"class":70,"line":71},[68,160262,160263],{"class":78},"answer ",[68,160265,1685],{"class":316},[68,160267,62083],{"class":85},[68,160269,1640],{"class":78},[68,160271,160272],{"class":1742},"\"是否继续(y\u002Fn):\"",[68,160274,160275],{"class":78},").lower()\n",[68,160277,160278,160280,160283,160285,160287],{"class":70,"line":82},[68,160279,3023],{"class":316},[68,160281,160282],{"class":78}," answer ",[68,160284,4439],{"class":316},[68,160286,159228],{"class":1742},[68,160288,5229],{"class":78},[68,160290,160291,160293,160295,160298],{"class":70,"line":98},[68,160292,32783],{"class":85},[68,160294,1640],{"class":78},[68,160296,160297],{"class":1742},"\"继续\"",[68,160299,1646],{"class":78},[14,160301,160303],{"id":160302},"_313-本章练习","3.13 本章练习",[263,160305,160306,160309,160312,160315,160325],{},[27,160307,160308],{},"输入年龄，判断是否成年。",[27,160310,160311],{},"输入年份，判断是否为闰年。",[27,160313,160314],{},"输入三个数字，输出最大值。",[27,160316,160317,160318,160321,160322,160324],{},"写登录判断：用户名是 ",[65,160319,160320],{},"admin"," 且密码是 ",[65,160323,16572],{}," 才登录成功。",[27,160326,160327],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1553,160329,160330],{},"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":63,"searchDepth":82,"depth":82,"links":160332},[160333,160334,160335,160336,160337,160338,160343,160344,160345,160346,160347,160348,160349],{"id":158721,"depth":82,"text":158722},{"id":158774,"depth":82,"text":158775},{"id":158878,"depth":82,"text":158879},{"id":158968,"depth":82,"text":158969},{"id":159158,"depth":82,"text":159159},{"id":159281,"depth":82,"text":159282,"children":160339},[160340,160341,160342],{"id":159285,"depth":98,"text":159286},{"id":159342,"depth":98,"text":159343},{"id":159399,"depth":98,"text":159400},{"id":159444,"depth":82,"text":159445},{"id":159535,"depth":82,"text":159536},{"id":159662,"depth":82,"text":159663},{"id":159792,"depth":82,"text":159793},{"id":159977,"depth":82,"text":159978},{"id":160213,"depth":82,"text":160214},{"id":160302,"depth":82,"text":160303},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158713,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160356,"title":160357,"body":160358,"description":1564,"extension":1565,"meta":162127,"navigation":1567,"path":162128,"seo":162129,"stem":162130,"__hash__":162131},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160359,"toc":162107},[160360,160363,160367,160373,160376,160393,160397,160399,160416,160418,160463,160465,160482,160486,160489,160555,160558,160576,160580,160741,160750,160754,160758,160763,160810,160812,160818,160822,160827,160874,160876,160882,160886,160891,160927,160930,160977,160981,160987,161045,161050,161081,161086,161090,161145,161148,161220,161223,161282,161286,161289,161364,161367,161371,161477,161480,161506,161510,161522,161591,161594,161686,161690,161692,161703,161705,161835,161839,162041,162049,162053,162083,162087,162104],[10,160361,160357],{"id":160362},"_4-循环语句",[14,160364,160366],{"id":160365},"_41-为什么需要循环","4.1 为什么需要循环",[170,160368,160369,160370,160372],{},"如果要输出 1 到 100，不应该写 100 行 ",[65,160371,147695],{},"，而应该用循环。",[170,160374,160375],{},"循环适合处理重复任务：",[263,160377,160378,160381,160384,160387,160390],{},[27,160379,160380],{},"重复输出。",[27,160382,160383],{},"重复输入。",[27,160385,160386],{},"遍历数据。",[27,160388,160389],{},"持续执行菜单。",[27,160391,160392],{},"批量处理文件或数据。",[14,160394,160396],{"id":160395},"_42-while循环","4.2 while循环",[170,160398,409],{},[58,160400,160402],{"className":31862,"code":160401,"language":31864,"meta":63,"style":63},"while 条件:\n    循环体\n",[65,160403,160404,160411],{"__ignoreMap":63},[68,160405,160406,160408],{"class":70,"line":71},[68,160407,110137],{"class":316},[68,160409,160410],{"class":78}," 条件:\n",[68,160412,160413],{"class":70,"line":82},[68,160414,160415],{"class":78},"    循环体\n",[170,160417,16623],{},[58,160419,160421],{"className":31862,"code":160420,"language":31864,"meta":63,"style":63},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[65,160422,160423,160431,160435,160447,160454],{"__ignoreMap":63},[68,160424,160425,160427,160429],{"class":70,"line":71},[68,160426,101623],{"class":78},[68,160428,1685],{"class":316},[68,160430,57177],{"class":85},[68,160432,160433],{"class":70,"line":82},[68,160434,3890],{"emptyLinePlaceholder":1567},[68,160436,160437,160439,160441,160443,160445],{"class":70,"line":98},[68,160438,110137],{"class":316},[68,160440,10926],{"class":78},[68,160442,3079],{"class":316},[68,160444,3638],{"class":85},[68,160446,5229],{"class":78},[68,160448,160449,160451],{"class":70,"line":104},[68,160450,32783],{"class":85},[68,160452,160453],{"class":78},"(i)\n",[68,160455,160456,160459,160461],{"class":70,"line":112},[68,160457,160458],{"class":78},"    i ",[68,160460,10965],{"class":316},[68,160462,57177],{"class":85},[170,160464,82406],{},[263,160466,160467,160473,160476,160479],{},[27,160468,160469,160470,29869],{},"判断条件 ",[65,160471,160472],{},"i \u003C= 5",[27,160474,160475],{},"条件成立，执行循环体。",[27,160477,160478],{},"执行完后回到条件判断。",[27,160480,160481],{},"条件不成立，退出循环。",[14,160483,160485],{"id":160484},"_43-while累加","4.3 while累加",[170,160487,160488],{},"计算 1 到 100 的和：",[58,160490,160492],{"className":31862,"code":160491,"language":31864,"meta":63,"style":63},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[65,160493,160494,160502,160510,160514,160526,160536,160544,160548],{"__ignoreMap":63},[68,160495,160496,160498,160500],{"class":70,"line":71},[68,160497,101623],{"class":78},[68,160499,1685],{"class":316},[68,160501,57177],{"class":85},[68,160503,160504,160506,160508],{"class":70,"line":82},[68,160505,158483],{"class":78},[68,160507,1685],{"class":316},[68,160509,48817],{"class":85},[68,160511,160512],{"class":70,"line":98},[68,160513,3890],{"emptyLinePlaceholder":1567},[68,160515,160516,160518,160520,160522,160524],{"class":70,"line":104},[68,160517,110137],{"class":316},[68,160519,10926],{"class":78},[68,160521,3079],{"class":316},[68,160523,7243],{"class":85},[68,160525,5229],{"class":78},[68,160527,160528,160531,160533],{"class":70,"line":112},[68,160529,160530],{"class":78},"    total ",[68,160532,10965],{"class":316},[68,160534,160535],{"class":78}," i\n",[68,160537,160538,160540,160542],{"class":70,"line":124},[68,160539,160458],{"class":78},[68,160541,10965],{"class":316},[68,160543,57177],{"class":85},[68,160545,160546],{"class":70,"line":1496},[68,160547,3890],{"emptyLinePlaceholder":1567},[68,160549,160550,160552],{"class":70,"line":1502},[68,160551,31899],{"class":85},[68,160553,160554],{"class":78},"(total)\n",[170,160556,160557],{},"核心思想：",[263,160559,160560,160565,160570],{},[27,160561,160562,160564],{},[65,160563,2070],{}," 控制循环次数。",[27,160566,160567,160569],{},[65,160568,158584],{}," 保存累加结果。",[27,160571,160572,160573,160575],{},"每轮循环都要更新 ",[65,160574,2070],{},"，否则可能死循环。",[14,160577,160579],{"id":160578},"_44-while猜数字","4.4 while猜数字",[58,160581,160583],{"className":31862,"code":160582,"language":31864,"meta":63,"style":63},"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",[65,160584,160585,160591,160595,160612,160620,160624,160632,160652,160661,160665,160677,160688,160698,160709,160715,160737],{"__ignoreMap":63},[68,160586,160587,160589],{"class":70,"line":71},[68,160588,31876],{"class":316},[68,160590,46812],{"class":78},[68,160592,160593],{"class":70,"line":82},[68,160594,3890],{"emptyLinePlaceholder":1567},[68,160596,160597,160599,160601,160604,160606,160608,160610],{"class":70,"line":98},[68,160598,160263],{"class":78},[68,160600,1685],{"class":316},[68,160602,160603],{"class":78}," random.randint(",[68,160605,1846],{"class":85},[68,160607,13923],{"class":78},[68,160609,1940],{"class":85},[68,160611,1646],{"class":78},[68,160613,160614,160616,160618],{"class":70,"line":104},[68,160615,147914],{"class":78},[68,160617,1685],{"class":316},[68,160619,48817],{"class":85},[68,160621,160622],{"class":70,"line":112},[68,160623,3890],{"emptyLinePlaceholder":1567},[68,160625,160626,160628,160630],{"class":70,"line":124},[68,160627,110137],{"class":316},[68,160629,96767],{"class":85},[68,160631,5229],{"class":78},[68,160633,160634,160637,160639,160641,160643,160645,160647,160650],{"class":70,"line":1496},[68,160635,160636],{"class":78},"    guess ",[68,160638,1685],{"class":316},[68,160640,3872],{"class":85},[68,160642,1640],{"class":78},[68,160644,55302],{"class":85},[68,160646,1640],{"class":78},[68,160648,160649],{"class":1742},"\"请输入1到100之间的数字:\"",[68,160651,31981],{"class":78},[68,160653,160654,160657,160659],{"class":70,"line":1502},[68,160655,160656],{"class":78},"    count ",[68,160658,10965],{"class":316},[68,160660,57177],{"class":85},[68,160662,160663],{"class":70,"line":1510},[68,160664,3890],{"emptyLinePlaceholder":1567},[68,160666,160667,160669,160672,160674],{"class":70,"line":1521},[68,160668,4591],{"class":316},[68,160670,160671],{"class":78}," guess ",[68,160673,2587],{"class":316},[68,160675,160676],{"class":78}," answer:\n",[68,160678,160679,160681,160683,160686],{"class":70,"line":3103},[68,160680,33935],{"class":85},[68,160682,1640],{"class":78},[68,160684,160685],{"class":1742},"\"猜大了\"",[68,160687,1646],{"class":78},[68,160689,160690,160692,160694,160696],{"class":70,"line":3108},[68,160691,40777],{"class":316},[68,160693,160671],{"class":78},[68,160695,2537],{"class":316},[68,160697,160676],{"class":78},[68,160699,160700,160702,160704,160707],{"class":70,"line":3114},[68,160701,33935],{"class":85},[68,160703,1640],{"class":78},[68,160705,160706],{"class":1742},"\"猜小了\"",[68,160708,1646],{"class":78},[68,160710,160711,160713],{"class":70,"line":3119},[68,160712,159245],{"class":316},[68,160714,5229],{"class":78},[68,160716,160717,160719,160721,160723,160726,160728,160730,160732,160735],{"class":70,"line":3133},[68,160718,33935],{"class":85},[68,160720,1640],{"class":78},[68,160722,1691],{"class":316},[68,160724,160725],{"class":1742},"\"猜对了，一共猜了",[68,160727,2523],{"class":85},[68,160729,85910],{"class":78},[68,160731,2573],{"class":85},[68,160733,160734],{"class":1742},"次\"",[68,160736,1646],{"class":78},[68,160738,160739],{"class":70,"line":3138},[68,160740,33111],{"class":316},[170,160742,160743,160746,160747,160749],{},[65,160744,160745],{},"while True"," 表示无限循环，通常配合 ",[65,160748,3543],{}," 使用。",[14,160751,160753],{"id":160752},"_45-break和continue","4.5 break和continue",[19,160755,160757],{"id":160756},"_451-break","4.5.1 break",[170,160759,160760,160762],{},[65,160761,3543],{}," 直接结束整个循环。",[58,160764,160766],{"className":31862,"code":160765,"language":31864,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[65,160767,160768,160788,160800,160804],{"__ignoreMap":63},[68,160769,160770,160772,160774,160776,160778,160780,160782,160784,160786],{"class":70,"line":71},[68,160771,4515],{"class":316},[68,160773,10926],{"class":78},[68,160775,27529],{"class":316},[68,160777,33927],{"class":85},[68,160779,1640],{"class":78},[68,160781,1846],{"class":85},[68,160783,13923],{"class":78},[68,160785,1973],{"class":85},[68,160787,32270],{"class":78},[68,160789,160790,160792,160794,160796,160798],{"class":70,"line":82},[68,160791,4591],{"class":316},[68,160793,10926],{"class":78},[68,160795,4439],{"class":316},[68,160797,79547],{"class":85},[68,160799,5229],{"class":78},[68,160801,160802],{"class":70,"line":98},[68,160803,33111],{"class":316},[68,160805,160806,160808],{"class":70,"line":104},[68,160807,32783],{"class":85},[68,160809,160453],{"class":78},[170,160811,147680],{},[58,160813,160816],{"className":160814,"code":160815,"language":6676,"meta":63},[6674],"1\n2\n",[65,160817,160815],{"__ignoreMap":63},[19,160819,160821],{"id":160820},"_452-continue","4.5.2 continue",[170,160823,160824,160826],{},[65,160825,155895],{}," 跳过本轮剩余代码，进入下一轮循环。",[58,160828,160830],{"className":31862,"code":160829,"language":31864,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[65,160831,160832,160852,160864,160868],{"__ignoreMap":63},[68,160833,160834,160836,160838,160840,160842,160844,160846,160848,160850],{"class":70,"line":71},[68,160835,4515],{"class":316},[68,160837,10926],{"class":78},[68,160839,27529],{"class":316},[68,160841,33927],{"class":85},[68,160843,1640],{"class":78},[68,160845,1846],{"class":85},[68,160847,13923],{"class":78},[68,160849,1973],{"class":85},[68,160851,32270],{"class":78},[68,160853,160854,160856,160858,160860,160862],{"class":70,"line":82},[68,160855,4591],{"class":316},[68,160857,10926],{"class":78},[68,160859,4439],{"class":316},[68,160861,79547],{"class":85},[68,160863,5229],{"class":78},[68,160865,160866],{"class":70,"line":98},[68,160867,149735],{"class":316},[68,160869,160870,160872],{"class":70,"line":104},[68,160871,32783],{"class":85},[68,160873,160453],{"class":78},[170,160875,147680],{},[58,160877,160880],{"className":160878,"code":160879,"language":6676,"meta":63},[6674],"1\n2\n4\n5\n",[65,160881,160879],{"__ignoreMap":63},[14,160883,160885],{"id":160884},"_46-for循环","4.6 for循环",[170,160887,160888,160890],{},[65,160889,4515],{}," 常用于遍历序列。",[58,160892,160894],{"className":31862,"code":160893,"language":31864,"meta":63,"style":63},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[65,160895,160896,160905,160909,160920],{"__ignoreMap":63},[68,160897,160898,160900,160902],{"class":70,"line":71},[68,160899,147759],{"class":78},[68,160901,1685],{"class":316},[68,160903,160904],{"class":1742}," \"python\"\n",[68,160906,160907],{"class":70,"line":82},[68,160908,3890],{"emptyLinePlaceholder":1567},[68,160910,160911,160913,160916,160918],{"class":70,"line":98},[68,160912,4515],{"class":316},[68,160914,160915],{"class":78}," ch ",[68,160917,27529],{"class":316},[68,160919,159622],{"class":78},[68,160921,160922,160924],{"class":70,"line":104},[68,160923,32783],{"class":85},[68,160925,160926],{"class":78},"(ch)\n",[170,160928,160929],{},"遍历列表：",[58,160931,160933],{"className":31862,"code":160932,"language":31864,"meta":63,"style":63},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[65,160934,160935,160957,160961,160971],{"__ignoreMap":63},[68,160936,160937,160940,160942,160944,160946,160948,160950,160952,160955],{"class":70,"line":71},[68,160938,160939],{"class":78},"students ",[68,160941,1685],{"class":316},[68,160943,53708],{"class":78},[68,160945,151111],{"class":1742},[68,160947,13923],{"class":78},[68,160949,152159],{"class":1742},[68,160951,13923],{"class":78},[68,160953,160954],{"class":1742},"\"小刚\"",[68,160956,34730],{"class":78},[68,160958,160959],{"class":70,"line":82},[68,160960,3890],{"emptyLinePlaceholder":1567},[68,160962,160963,160965,160967,160969],{"class":70,"line":98},[68,160964,4515],{"class":316},[68,160966,153360],{"class":78},[68,160968,27529],{"class":316},[68,160970,153365],{"class":78},[68,160972,160973,160975],{"class":70,"line":104},[68,160974,32783],{"class":85},[68,160976,151265],{"class":78},[14,160978,160980],{"id":160979},"_47-range函数","4.7 range函数",[170,160982,160983,160986],{},[65,160984,160985],{},"range()"," 用于生成整数序列。",[58,160988,160990],{"className":31862,"code":160989,"language":31864,"meta":63,"style":63},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[65,160991,160992,161006,161024],{"__ignoreMap":63},[68,160993,160994,160996,160998,161000,161003],{"class":70,"line":71},[68,160995,34900],{"class":85},[68,160997,1640],{"class":78},[68,160999,1948],{"class":85},[68,161001,161002],{"class":78},")          ",[68,161004,161005],{"class":302},"# 0,1,2,3,4\n",[68,161007,161008,161010,161012,161014,161016,161018,161021],{"class":70,"line":82},[68,161009,34900],{"class":85},[68,161011,1640],{"class":78},[68,161013,1846],{"class":85},[68,161015,13923],{"class":78},[68,161017,1948],{"class":85},[68,161019,161020],{"class":78},")       ",[68,161022,161023],{"class":302},"# 1,2,3,4\n",[68,161025,161026,161028,161030,161032,161034,161036,161038,161040,161042],{"class":70,"line":98},[68,161027,34900],{"class":85},[68,161029,1640],{"class":78},[68,161031,1846],{"class":85},[68,161033,13923],{"class":78},[68,161035,313],{"class":85},[68,161037,13923],{"class":78},[68,161039,1715],{"class":85},[68,161041,156884],{"class":78},[68,161043,161044],{"class":302},"# 1,3,5,7,9\n",[170,161046,161047,161048,26104],{},"配合 ",[65,161049,4515],{},[58,161051,161053],{"className":31862,"code":161052,"language":31864,"meta":63,"style":63},"for i in range(1, 6):\n    print(i)\n",[65,161054,161055,161075],{"__ignoreMap":63},[68,161056,161057,161059,161061,161063,161065,161067,161069,161071,161073],{"class":70,"line":71},[68,161058,4515],{"class":316},[68,161060,10926],{"class":78},[68,161062,27529],{"class":316},[68,161064,33927],{"class":85},[68,161066,1640],{"class":78},[68,161068,1846],{"class":85},[68,161070,13923],{"class":78},[68,161072,1973],{"class":85},[68,161074,32270],{"class":78},[68,161076,161077,161079],{"class":70,"line":82},[68,161078,32783],{"class":85},[68,161080,160453],{"class":78},[170,161082,1106,161083,161085],{},[65,161084,34900],{}," 的结束值不包含在内。",[14,161087,161089],{"id":161088},"_48-for循环求和","4.8 for循环求和",[58,161091,161093],{"className":31862,"code":161092,"language":31864,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[65,161094,161095,161103,161107,161127,161135,161139],{"__ignoreMap":63},[68,161096,161097,161099,161101],{"class":70,"line":71},[68,161098,158483],{"class":78},[68,161100,1685],{"class":316},[68,161102,48817],{"class":85},[68,161104,161105],{"class":70,"line":82},[68,161106,3890],{"emptyLinePlaceholder":1567},[68,161108,161109,161111,161113,161115,161117,161119,161121,161123,161125],{"class":70,"line":98},[68,161110,4515],{"class":316},[68,161112,10926],{"class":78},[68,161114,27529],{"class":316},[68,161116,33927],{"class":85},[68,161118,1640],{"class":78},[68,161120,1846],{"class":85},[68,161122,13923],{"class":78},[68,161124,1966],{"class":85},[68,161126,32270],{"class":78},[68,161128,161129,161131,161133],{"class":70,"line":104},[68,161130,160530],{"class":78},[68,161132,10965],{"class":316},[68,161134,160535],{"class":78},[68,161136,161137],{"class":70,"line":112},[68,161138,3890],{"emptyLinePlaceholder":1567},[68,161140,161141,161143],{"class":70,"line":124},[68,161142,31899],{"class":85},[68,161144,160554],{"class":78},[170,161146,161147],{},"求偶数和：",[58,161149,161151],{"className":31862,"code":161150,"language":31864,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[65,161152,161153,161161,161165,161185,161201,161210,161214],{"__ignoreMap":63},[68,161154,161155,161157,161159],{"class":70,"line":71},[68,161156,158483],{"class":78},[68,161158,1685],{"class":316},[68,161160,48817],{"class":85},[68,161162,161163],{"class":70,"line":82},[68,161164,3890],{"emptyLinePlaceholder":1567},[68,161166,161167,161169,161171,161173,161175,161177,161179,161181,161183],{"class":70,"line":98},[68,161168,4515],{"class":316},[68,161170,10926],{"class":78},[68,161172,27529],{"class":316},[68,161174,33927],{"class":85},[68,161176,1640],{"class":78},[68,161178,1846],{"class":85},[68,161180,13923],{"class":78},[68,161182,1966],{"class":85},[68,161184,32270],{"class":78},[68,161186,161187,161189,161191,161193,161195,161197,161199],{"class":70,"line":104},[68,161188,4591],{"class":316},[68,161190,10926],{"class":78},[68,161192,1957],{"class":316},[68,161194,16243],{"class":85},[68,161196,103034],{"class":316},[68,161198,5583],{"class":85},[68,161200,5229],{"class":78},[68,161202,161203,161206,161208],{"class":70,"line":112},[68,161204,161205],{"class":78},"        total ",[68,161207,10965],{"class":316},[68,161209,160535],{"class":78},[68,161211,161212],{"class":70,"line":124},[68,161213,3890],{"emptyLinePlaceholder":1567},[68,161215,161216,161218],{"class":70,"line":1496},[68,161217,31899],{"class":85},[68,161219,160554],{"class":78},[170,161221,161222],{},"也可以：",[58,161224,161226],{"className":31862,"code":161225,"language":31864,"meta":63,"style":63},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[65,161227,161228,161236,161240,161264,161272,161276],{"__ignoreMap":63},[68,161229,161230,161232,161234],{"class":70,"line":71},[68,161231,158483],{"class":78},[68,161233,1685],{"class":316},[68,161235,48817],{"class":85},[68,161237,161238],{"class":70,"line":82},[68,161239,3890],{"emptyLinePlaceholder":1567},[68,161241,161242,161244,161246,161248,161250,161252,161254,161256,161258,161260,161262],{"class":70,"line":98},[68,161243,4515],{"class":316},[68,161245,10926],{"class":78},[68,161247,27529],{"class":316},[68,161249,33927],{"class":85},[68,161251,1640],{"class":78},[68,161253,1715],{"class":85},[68,161255,13923],{"class":78},[68,161257,1966],{"class":85},[68,161259,13923],{"class":78},[68,161261,1715],{"class":85},[68,161263,32270],{"class":78},[68,161265,161266,161268,161270],{"class":70,"line":104},[68,161267,160530],{"class":78},[68,161269,10965],{"class":316},[68,161271,160535],{"class":78},[68,161273,161274],{"class":70,"line":112},[68,161275,3890],{"emptyLinePlaceholder":1567},[68,161277,161278,161280],{"class":70,"line":124},[68,161279,31899],{"class":85},[68,161281,160554],{"class":78},[14,161283,161285],{"id":161284},"_49-循环嵌套","4.9 循环嵌套",[170,161287,161288],{},"嵌套循环就是循环里面再写循环。",[58,161290,161292],{"className":31862,"code":161291,"language":31864,"meta":63,"style":63},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[65,161293,161294,161314,161334],{"__ignoreMap":63},[68,161295,161296,161298,161300,161302,161304,161306,161308,161310,161312],{"class":70,"line":71},[68,161297,4515],{"class":316},[68,161299,10926],{"class":78},[68,161301,27529],{"class":316},[68,161303,33927],{"class":85},[68,161305,1640],{"class":78},[68,161307,1846],{"class":85},[68,161309,13923],{"class":78},[68,161311,1922],{"class":85},[68,161313,32270],{"class":78},[68,161315,161316,161318,161320,161322,161324,161326,161328,161330,161332],{"class":70,"line":82},[68,161317,4691],{"class":316},[68,161319,10988],{"class":78},[68,161321,27529],{"class":316},[68,161323,33927],{"class":85},[68,161325,1640],{"class":78},[68,161327,1846],{"class":85},[68,161329,13923],{"class":78},[68,161331,1922],{"class":85},[68,161333,32270],{"class":78},[68,161335,161336,161338,161340,161342,161345,161347,161349,161351,161354,161356,161358,161360,161362],{"class":70,"line":98},[68,161337,33935],{"class":85},[68,161339,1640],{"class":78},[68,161341,1691],{"class":316},[68,161343,161344],{"class":1742},"\"i=",[68,161346,2523],{"class":85},[68,161348,2070],{"class":78},[68,161350,2573],{"class":85},[68,161352,161353],{"class":1742},", j=",[68,161355,2523],{"class":85},[68,161357,2095],{"class":78},[68,161359,2573],{"class":85},[68,161361,1880],{"class":1742},[68,161363,1646],{"class":78},[170,161365,161366],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161368,161370],{"id":161369},"_410-九九乘法表","4.10 九九乘法表",[58,161372,161374],{"className":31862,"code":161373,"language":31864,"meta":63,"style":63},"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",[65,161375,161376,161396,161419,161471],{"__ignoreMap":63},[68,161377,161378,161380,161382,161384,161386,161388,161390,161392,161394],{"class":70,"line":71},[68,161379,4515],{"class":316},[68,161381,10926],{"class":78},[68,161383,27529],{"class":316},[68,161385,33927],{"class":85},[68,161387,1640],{"class":78},[68,161389,1846],{"class":85},[68,161391,13923],{"class":78},[68,161393,313],{"class":85},[68,161395,32270],{"class":78},[68,161397,161398,161400,161402,161404,161406,161408,161410,161413,161415,161417],{"class":70,"line":82},[68,161399,4691],{"class":316},[68,161401,10988],{"class":78},[68,161403,27529],{"class":316},[68,161405,33927],{"class":85},[68,161407,1640],{"class":78},[68,161409,1846],{"class":85},[68,161411,161412],{"class":78},", i ",[68,161414,2109],{"class":316},[68,161416,26604],{"class":85},[68,161418,32270],{"class":78},[68,161420,161421,161423,161425,161427,161429,161431,161433,161435,161437,161439,161441,161443,161445,161447,161449,161451,161453,161455,161457,161459,161461,161463,161465,161467,161469],{"class":70,"line":98},[68,161422,33935],{"class":85},[68,161424,1640],{"class":78},[68,161426,1691],{"class":316},[68,161428,1880],{"class":1742},[68,161430,2523],{"class":85},[68,161432,2095],{"class":78},[68,161434,2573],{"class":85},[68,161436,2083],{"class":1742},[68,161438,2523],{"class":85},[68,161440,2070],{"class":78},[68,161442,2573],{"class":85},[68,161444,1685],{"class":1742},[68,161446,2523],{"class":85},[68,161448,101623],{"class":78},[68,161450,2083],{"class":316},[68,161452,4900],{"class":78},[68,161454,2573],{"class":85},[68,161456,1880],{"class":1742},[68,161458,13923],{"class":78},[68,161460,47285],{"class":6705},[68,161462,1685],{"class":316},[68,161464,1880],{"class":1742},[68,161466,2727],{"class":85},[68,161468,1880],{"class":1742},[68,161470,1646],{"class":78},[68,161472,161473,161475],{"class":70,"line":104},[68,161474,32783],{"class":85},[68,161476,3466],{"class":78},[170,161478,161479],{},"关键点：",[263,161481,161482,161488,161494,161500],{},[27,161483,161484,161485,161487],{},"外层 ",[65,161486,2070],{}," 控制行。",[27,161489,161490,161491,161493],{},"内层 ",[65,161492,2095],{}," 控制列。",[27,161495,161496,161497,161499],{},"每行结束后用 ",[65,161498,147695],{}," 换行。",[27,161501,161502,161505],{},[65,161503,161504],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161507,161509],{"id":161508},"_411-循环else","4.11 循环else",[170,161511,161512,161513,161515,161516,161518,161519,161521],{},"Python 的循环可以带 ",[65,161514,3192],{},"。当循环正常结束时执行 ",[65,161517,3192],{},"，如果被 ",[65,161520,3543],{}," 打断，则不执行。",[58,161523,161525],{"className":31862,"code":161524,"language":31864,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,161526,161527,161547,161559,161570,161574,161580],{"__ignoreMap":63},[68,161528,161529,161531,161533,161535,161537,161539,161541,161543,161545],{"class":70,"line":71},[68,161530,4515],{"class":316},[68,161532,10926],{"class":78},[68,161534,27529],{"class":316},[68,161536,33927],{"class":85},[68,161538,1640],{"class":78},[68,161540,1846],{"class":85},[68,161542,13923],{"class":78},[68,161544,1973],{"class":85},[68,161546,32270],{"class":78},[68,161548,161549,161551,161553,161555,161557],{"class":70,"line":82},[68,161550,4591],{"class":316},[68,161552,10926],{"class":78},[68,161554,4439],{"class":316},[68,161556,3528],{"class":85},[68,161558,5229],{"class":78},[68,161560,161561,161563,161565,161568],{"class":70,"line":98},[68,161562,33935],{"class":85},[68,161564,1640],{"class":78},[68,161566,161567],{"class":1742},"\"找到了\"",[68,161569,1646],{"class":78},[68,161571,161572],{"class":70,"line":104},[68,161573,33111],{"class":316},[68,161575,161576,161578],{"class":70,"line":112},[68,161577,3192],{"class":316},[68,161579,5229],{"class":78},[68,161581,161582,161584,161586,161589],{"class":70,"line":124},[68,161583,32783],{"class":85},[68,161585,1640],{"class":78},[68,161587,161588],{"class":1742},"\"没找到\"",[68,161590,1646],{"class":78},[170,161592,161593],{},"常用于搜索。",[58,161595,161597],{"className":31862,"code":161596,"language":31864,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,161598,161599,161620,161629,161633,161645,161656,161666,161670,161676],{"__ignoreMap":63},[68,161600,161601,161604,161606,161608,161610,161612,161614,161616,161618],{"class":70,"line":71},[68,161602,161603],{"class":78},"names ",[68,161605,1685],{"class":316},[68,161607,53708],{"class":78},[68,161609,151111],{"class":1742},[68,161611,13923],{"class":78},[68,161613,152159],{"class":1742},[68,161615,13923],{"class":78},[68,161617,160954],{"class":1742},[68,161619,34730],{"class":78},[68,161621,161622,161624,161626],{"class":70,"line":82},[68,161623,113052],{"class":78},[68,161625,1685],{"class":316},[68,161627,161628],{"class":1742}," \"小李\"\n",[68,161630,161631],{"class":70,"line":98},[68,161632,3890],{"emptyLinePlaceholder":1567},[68,161634,161635,161637,161640,161642],{"class":70,"line":104},[68,161636,4515],{"class":316},[68,161638,161639],{"class":78}," name ",[68,161641,27529],{"class":316},[68,161643,161644],{"class":78}," names:\n",[68,161646,161647,161649,161651,161653],{"class":70,"line":112},[68,161648,4591],{"class":316},[68,161650,161639],{"class":78},[68,161652,4439],{"class":316},[68,161654,161655],{"class":78}," target:\n",[68,161657,161658,161660,161662,161664],{"class":70,"line":124},[68,161659,33935],{"class":85},[68,161661,1640],{"class":78},[68,161663,161567],{"class":1742},[68,161665,1646],{"class":78},[68,161667,161668],{"class":70,"line":1496},[68,161669,33111],{"class":316},[68,161671,161672,161674],{"class":70,"line":1502},[68,161673,3192],{"class":316},[68,161675,5229],{"class":78},[68,161677,161678,161680,161682,161684],{"class":70,"line":1510},[68,161679,32783],{"class":85},[68,161681,1640],{"class":78},[68,161683,161588],{"class":1742},[68,161685,1646],{"class":78},[14,161687,161689],{"id":161688},"_412-小案例登录重试","4.12 小案例：登录重试",[170,161691,124766],{},[263,161693,161694,161697,161700],{},[27,161695,161696],{},"用户最多输入 3 次密码。",[27,161698,161699],{},"密码正确则登录成功。",[27,161701,161702],{},"3 次都错误则锁定账号。",[170,161704,11523],{},[58,161706,161708],{"className":31862,"code":161707,"language":31864,"meta":63,"style":63},"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",[65,161709,161710,161720,161724,161740,161756,161760,161772,161783,161787,161793,161818,161824],{"__ignoreMap":63},[68,161711,161712,161715,161717],{"class":70,"line":71},[68,161713,161714],{"class":78},"password ",[68,161716,1685],{"class":316},[68,161718,161719],{"class":1742}," \"123456\"\n",[68,161721,161722],{"class":70,"line":82},[68,161723,3890],{"emptyLinePlaceholder":1567},[68,161725,161726,161728,161730,161732,161734,161736,161738],{"class":70,"line":98},[68,161727,4515],{"class":316},[68,161729,10926],{"class":78},[68,161731,27529],{"class":316},[68,161733,33927],{"class":85},[68,161735,1640],{"class":78},[68,161737,1709],{"class":85},[68,161739,32270],{"class":78},[68,161741,161742,161745,161747,161749,161751,161754],{"class":70,"line":104},[68,161743,161744],{"class":78},"    user_password ",[68,161746,1685],{"class":316},[68,161748,62083],{"class":85},[68,161750,1640],{"class":78},[68,161752,161753],{"class":1742},"\"请输入密码:\"",[68,161755,1646],{"class":78},[68,161757,161758],{"class":70,"line":112},[68,161759,3890],{"emptyLinePlaceholder":1567},[68,161761,161762,161764,161767,161769],{"class":70,"line":124},[68,161763,4591],{"class":316},[68,161765,161766],{"class":78}," user_password ",[68,161768,4439],{"class":316},[68,161770,161771],{"class":78}," password:\n",[68,161773,161774,161776,161778,161781],{"class":70,"line":1496},[68,161775,33935],{"class":85},[68,161777,1640],{"class":78},[68,161779,161780],{"class":1742},"\"登录成功\"",[68,161782,1646],{"class":78},[68,161784,161785],{"class":70,"line":1502},[68,161786,33111],{"class":316},[68,161788,161789,161791],{"class":70,"line":1510},[68,161790,159245],{"class":316},[68,161792,5229],{"class":78},[68,161794,161795,161797,161799,161801,161804,161807,161809,161811,161813,161816],{"class":70,"line":1521},[68,161796,33935],{"class":85},[68,161798,1640],{"class":78},[68,161800,1691],{"class":316},[68,161802,161803],{"class":1742},"\"密码错误，还剩",[68,161805,161806],{"class":85},"{2",[68,161808,53753],{"class":316},[68,161810,4522],{"class":78},[68,161812,2573],{"class":85},[68,161814,161815],{"class":1742},"次机会\"",[68,161817,1646],{"class":78},[68,161819,161820,161822],{"class":70,"line":3103},[68,161821,3192],{"class":316},[68,161823,5229],{"class":78},[68,161825,161826,161828,161830,161833],{"class":70,"line":3108},[68,161827,32783],{"class":85},[68,161829,1640],{"class":78},[68,161831,161832],{"class":1742},"\"账号已锁定\"",[68,161834,1646],{"class":78},[14,161836,161838],{"id":161837},"_413-小案例菜单程序","4.13 小案例：菜单程序",[58,161840,161842],{"className":31862,"code":161841,"language":31864,"meta":63,"style":63},"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",[65,161843,161844,161852,161863,161874,161885,161896,161907,161911,161926,161930,161942,161953,161965,161976,161988,161999,162011,162021,162025,162031],{"__ignoreMap":63},[68,161845,161846,161848,161850],{"class":70,"line":71},[68,161847,110137],{"class":316},[68,161849,96767],{"class":85},[68,161851,5229],{"class":78},[68,161853,161854,161856,161858,161861],{"class":70,"line":82},[68,161855,32783],{"class":85},[68,161857,1640],{"class":78},[68,161859,161860],{"class":1742},"\"====== 菜单 ======\"",[68,161862,1646],{"class":78},[68,161864,161865,161867,161869,161872],{"class":70,"line":98},[68,161866,32783],{"class":85},[68,161868,1640],{"class":78},[68,161870,161871],{"class":1742},"\"1. 查询余额\"",[68,161873,1646],{"class":78},[68,161875,161876,161878,161880,161883],{"class":70,"line":104},[68,161877,32783],{"class":85},[68,161879,1640],{"class":78},[68,161881,161882],{"class":1742},"\"2. 存款\"",[68,161884,1646],{"class":78},[68,161886,161887,161889,161891,161894],{"class":70,"line":112},[68,161888,32783],{"class":85},[68,161890,1640],{"class":78},[68,161892,161893],{"class":1742},"\"3. 取款\"",[68,161895,1646],{"class":78},[68,161897,161898,161900,161902,161905],{"class":70,"line":124},[68,161899,32783],{"class":85},[68,161901,1640],{"class":78},[68,161903,161904],{"class":1742},"\"0. 退出\"",[68,161906,1646],{"class":78},[68,161908,161909],{"class":70,"line":1496},[68,161910,3890],{"emptyLinePlaceholder":1567},[68,161912,161913,161916,161918,161920,161922,161924],{"class":70,"line":1502},[68,161914,161915],{"class":78},"    choice ",[68,161917,1685],{"class":316},[68,161919,62083],{"class":85},[68,161921,1640],{"class":78},[68,161923,154296],{"class":1742},[68,161925,1646],{"class":78},[68,161927,161928],{"class":70,"line":1510},[68,161929,3890],{"emptyLinePlaceholder":1567},[68,161931,161932,161934,161936,161938,161940],{"class":70,"line":1521},[68,161933,4591],{"class":316},[68,161935,154309],{"class":78},[68,161937,4439],{"class":316},[68,161939,154314],{"class":1742},[68,161941,5229],{"class":78},[68,161943,161944,161946,161948,161951],{"class":70,"line":3103},[68,161945,33935],{"class":85},[68,161947,1640],{"class":78},[68,161949,161950],{"class":1742},"\"余额为1000元\"",[68,161952,1646],{"class":78},[68,161954,161955,161957,161959,161961,161963],{"class":70,"line":3108},[68,161956,40777],{"class":316},[68,161958,154309],{"class":78},[68,161960,4439],{"class":316},[68,161962,154333],{"class":1742},[68,161964,5229],{"class":78},[68,161966,161967,161969,161971,161974],{"class":70,"line":3114},[68,161968,33935],{"class":85},[68,161970,1640],{"class":78},[68,161972,161973],{"class":1742},"\"存款功能\"",[68,161975,1646],{"class":78},[68,161977,161978,161980,161982,161984,161986],{"class":70,"line":3119},[68,161979,40777],{"class":316},[68,161981,154309],{"class":78},[68,161983,4439],{"class":316},[68,161985,154351],{"class":1742},[68,161987,5229],{"class":78},[68,161989,161990,161992,161994,161997],{"class":70,"line":3133},[68,161991,33935],{"class":85},[68,161993,1640],{"class":78},[68,161995,161996],{"class":1742},"\"取款功能\"",[68,161998,1646],{"class":78},[68,162000,162001,162003,162005,162007,162009],{"class":70,"line":3138},[68,162002,40777],{"class":316},[68,162004,154309],{"class":78},[68,162006,4439],{"class":316},[68,162008,154405],{"class":1742},[68,162010,5229],{"class":78},[68,162012,162013,162015,162017,162019],{"class":70,"line":3144},[68,162014,33935],{"class":85},[68,162016,1640],{"class":78},[68,162018,154416],{"class":1742},[68,162020,1646],{"class":78},[68,162022,162023],{"class":70,"line":3165},[68,162024,33111],{"class":316},[68,162026,162027,162029],{"class":70,"line":3170},[68,162028,159245],{"class":316},[68,162030,5229],{"class":78},[68,162032,162033,162035,162037,162039],{"class":70,"line":3184},[68,162034,33935],{"class":85},[68,162036,1640],{"class":78},[68,162038,154437],{"class":1742},[68,162040,1646],{"class":78},[170,162042,162043,162044,162046,162047,29869],{},"菜单类程序通常使用 ",[65,162045,160745],{},"，用户选择退出时 ",[65,162048,3543],{},[14,162050,162052],{"id":162051},"_414-易错点","4.14 易错点",[263,162054,162055,162060,162066,162074,162080],{},[27,162056,162057,162059],{},[65,162058,110137],{}," 循环必须更新控制变量。",[27,162061,162062,162065],{},[65,162063,162064],{},"range(1, 10)"," 不包含 10。",[27,162067,162068,162070,162071,162073],{},[65,162069,3543],{}," 结束整个循环，",[65,162072,155895],{}," 只跳过本轮。",[27,162075,162076,162077,162079],{},"嵌套循环中，",[65,162078,3543],{}," 只跳出当前所在的一层循环。",[27,162081,162082],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162084,162086],{"id":162085},"_415-本章练习","4.15 本章练习",[263,162088,162089,162092,162095,162098,162101],{},[27,162090,162091],{},"输出 1 到 100。",[27,162093,162094],{},"计算 1 到 100 的偶数和。",[27,162096,162097],{},"输出 100 以内能被 3 和 5 同时整除的数。",[27,162099,162100],{},"编写猜数字游戏，限制最多猜 7 次。",[27,162102,162103],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1553,162105,162106],{},"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":63,"searchDepth":82,"depth":82,"links":162108},[162109,162110,162111,162112,162113,162117,162118,162119,162120,162121,162122,162123,162124,162125,162126],{"id":160365,"depth":82,"text":160366},{"id":160395,"depth":82,"text":160396},{"id":160484,"depth":82,"text":160485},{"id":160578,"depth":82,"text":160579},{"id":160752,"depth":82,"text":160753,"children":162114},[162115,162116],{"id":160756,"depth":98,"text":160757},{"id":160820,"depth":98,"text":160821},{"id":160884,"depth":82,"text":160885},{"id":160979,"depth":82,"text":160980},{"id":161088,"depth":82,"text":161089},{"id":161284,"depth":82,"text":161285},{"id":161369,"depth":82,"text":161370},{"id":161508,"depth":82,"text":161509},{"id":161688,"depth":82,"text":161689},{"id":161837,"depth":82,"text":161838},{"id":162051,"depth":82,"text":162052},{"id":162085,"depth":82,"text":162086},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160357,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162133,"title":162134,"body":162135,"description":1564,"extension":1565,"meta":164140,"navigation":1567,"path":164141,"seo":164142,"stem":164143,"__hash__":164144},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162136,"toc":164120},[162137,162140,162144,162147,162150,162164,162167,162181,162185,162187,162206,162208,162255,162257,162271,162275,162349,162352,162356,162359,162418,162426,162429,162482,162485,162489,162494,162549,162557,162607,162611,162616,162624,162723,162729,162733,162738,162741,162752,162793,162806,162810,162813,162849,162852,162865,162868,162928,162932,162936,162939,162990,162994,162997,163044,163050,163116,163119,163123,163126,163242,163245,163249,163252,163358,163362,163365,163403,163406,163448,163451,163511,163514,163518,163982,163985,163989,164016,164022,164083,164087,164117],[10,162138,162134],{"id":162139},"_5-函数基础",[14,162141,162143],{"id":162142},"_51-为什么需要函数","5.1 为什么需要函数",[170,162145,162146],{},"函数用于封装一段可以重复使用的代码。",[170,162148,162149],{},"不使用函数的问题：",[263,162151,162152,162155,162158,162161],{},[27,162153,162154],{},"重复代码多。",[27,162156,162157],{},"修改逻辑时容易漏改。",[27,162159,162160],{},"主流程不清晰。",[27,162162,162163],{},"程序越写越长，难以维护。",[170,162165,162166],{},"使用函数后的好处：",[263,162168,162169,162172,162175,162178],{},[27,162170,162171],{},"提高复用性。",[27,162173,162174],{},"提高可读性。",[27,162176,162177],{},"便于调试。",[27,162179,162180],{},"便于分工。",[14,162182,162184],{"id":162183},"_52-函数定义","5.2 函数定义",[170,162186,409],{},[58,162188,162190],{"className":31862,"code":162189,"language":31864,"meta":63,"style":63},"def 函数名():\n    函数体\n",[65,162191,162192,162201],{"__ignoreMap":63},[68,162193,162194,162196,162199],{"class":70,"line":71},[68,162195,33431],{"class":316},[68,162197,162198],{"class":74}," 函数名",[68,162200,33437],{"class":78},[68,162202,162203],{"class":70,"line":82},[68,162204,162205],{"class":78},"    函数体\n",[170,162207,16623],{},[58,162209,162211],{"className":31862,"code":162210,"language":31864,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[65,162212,162213,162222,162232,162242,162246,162250],{"__ignoreMap":63},[68,162214,162215,162217,162220],{"class":70,"line":71},[68,162216,33431],{"class":316},[68,162218,162219],{"class":74}," say_hello",[68,162221,33437],{"class":78},[68,162223,162224,162226,162228,162230],{"class":70,"line":82},[68,162225,32783],{"class":85},[68,162227,1640],{"class":78},[68,162229,7333],{"class":1742},[68,162231,1646],{"class":78},[68,162233,162234,162236,162238,162240],{"class":70,"line":98},[68,162235,32783],{"class":85},[68,162237,1640],{"class":78},[68,162239,147862],{"class":1742},[68,162241,1646],{"class":78},[68,162243,162244],{"class":70,"line":104},[68,162245,3890],{"emptyLinePlaceholder":1567},[68,162247,162248],{"class":70,"line":112},[68,162249,3890],{"emptyLinePlaceholder":1567},[68,162251,162252],{"class":70,"line":124},[68,162253,162254],{"class":78},"say_hello()\n",[170,162256,1106],{},[263,162258,162259,162262,162265,162268],{},[27,162260,162261],{},"函数必须先定义，再调用。",[27,162263,162264],{},"函数名遵循变量命名规则。",[27,162266,162267],{},"函数体需要缩进。",[27,162269,162270],{},"函数不调用就不会执行。",[14,162272,162274],{"id":162273},"_53-函数调用","5.3 函数调用",[58,162276,162278],{"className":31862,"code":162277,"language":31864,"meta":63,"style":63},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[65,162279,162280,162289,162300,162311,162322,162332,162336,162340,162345],{"__ignoreMap":63},[68,162281,162282,162284,162287],{"class":70,"line":71},[68,162283,33431],{"class":316},[68,162285,162286],{"class":74}," print_menu",[68,162288,33437],{"class":78},[68,162290,162291,162293,162295,162298],{"class":70,"line":82},[68,162292,32783],{"class":85},[68,162294,1640],{"class":78},[68,162296,162297],{"class":1742},"\"1. 查询\"",[68,162299,1646],{"class":78},[68,162301,162302,162304,162306,162309],{"class":70,"line":98},[68,162303,32783],{"class":85},[68,162305,1640],{"class":78},[68,162307,162308],{"class":1742},"\"2. 添加\"",[68,162310,1646],{"class":78},[68,162312,162313,162315,162317,162320],{"class":70,"line":104},[68,162314,32783],{"class":85},[68,162316,1640],{"class":78},[68,162318,162319],{"class":1742},"\"3. 删除\"",[68,162321,1646],{"class":78},[68,162323,162324,162326,162328,162330],{"class":70,"line":112},[68,162325,32783],{"class":85},[68,162327,1640],{"class":78},[68,162329,161904],{"class":1742},[68,162331,1646],{"class":78},[68,162333,162334],{"class":70,"line":124},[68,162335,3890],{"emptyLinePlaceholder":1567},[68,162337,162338],{"class":70,"line":1496},[68,162339,3890],{"emptyLinePlaceholder":1567},[68,162341,162342],{"class":70,"line":1502},[68,162343,162344],{"class":78},"print_menu()\n",[68,162346,162347],{"class":70,"line":1510},[68,162348,162344],{"class":78},[170,162350,162351],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162353,162355],{"id":162354},"_54-参数","5.4 参数",[170,162357,162358],{},"参数用于向函数传递数据。",[58,162360,162362],{"className":31862,"code":162361,"language":31864,"meta":63,"style":63},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[65,162363,162364,162373,162393,162397,162401,162410],{"__ignoreMap":63},[68,162365,162366,162368,162370],{"class":70,"line":71},[68,162367,33431],{"class":316},[68,162369,162219],{"class":74},[68,162371,162372],{"class":78},"(name):\n",[68,162374,162375,162377,162379,162381,162383,162385,162387,162389,162391],{"class":70,"line":82},[68,162376,32783],{"class":85},[68,162378,1640],{"class":78},[68,162380,1691],{"class":316},[68,162382,158277],{"class":1742},[68,162384,2523],{"class":85},[68,162386,81287],{"class":78},[68,162388,2573],{"class":85},[68,162390,1880],{"class":1742},[68,162392,1646],{"class":78},[68,162394,162395],{"class":70,"line":98},[68,162396,3890],{"emptyLinePlaceholder":1567},[68,162398,162399],{"class":70,"line":104},[68,162400,3890],{"emptyLinePlaceholder":1567},[68,162402,162403,162406,162408],{"class":70,"line":112},[68,162404,162405],{"class":78},"say_hello(",[68,162407,151111],{"class":1742},[68,162409,1646],{"class":78},[68,162411,162412,162414,162416],{"class":70,"line":124},[68,162413,162405],{"class":78},[68,162415,152159],{"class":1742},[68,162417,1646],{"class":78},[170,162419,162420,162422,162423,162425],{},[65,162421,81287],{}," 是形参，",[65,162424,151111],{}," 是实参。",[170,162427,162428],{},"多个参数：",[58,162430,162432],{"className":31862,"code":162431,"language":31864,"meta":63,"style":63},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[65,162433,162434,162442,162455,162461,162465,162469],{"__ignoreMap":63},[68,162435,162436,162438,162440],{"class":70,"line":71},[68,162437,33431],{"class":316},[68,162439,6698],{"class":74},[68,162441,152316],{"class":78},[68,162443,162444,162447,162449,162451,162453],{"class":70,"line":82},[68,162445,162446],{"class":78},"    result ",[68,162448,1685],{"class":316},[68,162450,12357],{"class":78},[68,162452,2109],{"class":316},[68,162454,152327],{"class":78},[68,162456,162457,162459],{"class":70,"line":98},[68,162458,32783],{"class":85},[68,162460,78062],{"class":78},[68,162462,162463],{"class":70,"line":104},[68,162464,3890],{"emptyLinePlaceholder":1567},[68,162466,162467],{"class":70,"line":112},[68,162468,3890],{"emptyLinePlaceholder":1567},[68,162470,162471,162474,162476,162478,162480],{"class":70,"line":124},[68,162472,162473],{"class":78},"add(",[68,162475,313],{"class":85},[68,162477,13923],{"class":78},[68,162479,333],{"class":85},[68,162481,1646],{"class":78},[170,162483,162484],{},"调用时参数数量必须匹配。",[14,162486,162488],{"id":162487},"_55-返回值","5.5 返回值",[170,162490,162491,162493],{},[65,162492,18533],{}," 用于把函数内部的结果返回给调用者。",[58,162495,162497],{"className":31862,"code":162496,"language":31864,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[65,162498,162499,162507,162517,162521,162525,162543],{"__ignoreMap":63},[68,162500,162501,162503,162505],{"class":70,"line":71},[68,162502,33431],{"class":316},[68,162504,6698],{"class":74},[68,162506,152316],{"class":78},[68,162508,162509,162511,162513,162515],{"class":70,"line":82},[68,162510,5580],{"class":316},[68,162512,12357],{"class":78},[68,162514,2109],{"class":316},[68,162516,152327],{"class":78},[68,162518,162519],{"class":70,"line":98},[68,162520,3890],{"emptyLinePlaceholder":1567},[68,162522,162523],{"class":70,"line":104},[68,162524,3890],{"emptyLinePlaceholder":1567},[68,162526,162527,162530,162532,162535,162537,162539,162541],{"class":70,"line":112},[68,162528,162529],{"class":78},"result ",[68,162531,1685],{"class":316},[68,162533,162534],{"class":78}," add(",[68,162536,313],{"class":85},[68,162538,13923],{"class":78},[68,162540,333],{"class":85},[68,162542,1646],{"class":78},[68,162544,162545,162547],{"class":70,"line":124},[68,162546,31899],{"class":85},[68,162548,78062],{"class":78},[170,162550,162551,162552,162554,162555,29869],{},"如果函数没有写 ",[65,162553,18533],{},"，默认返回 ",[65,162556,97161],{},[58,162558,162560],{"className":31862,"code":162559,"language":31864,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[65,162561,162562,162570,162580,162584,162588,162597],{"__ignoreMap":63},[68,162563,162564,162566,162568],{"class":70,"line":71},[68,162565,33431],{"class":316},[68,162567,162219],{"class":74},[68,162569,33437],{"class":78},[68,162571,162572,162574,162576,162578],{"class":70,"line":82},[68,162573,32783],{"class":85},[68,162575,1640],{"class":78},[68,162577,7333],{"class":1742},[68,162579,1646],{"class":78},[68,162581,162582],{"class":70,"line":98},[68,162583,3890],{"emptyLinePlaceholder":1567},[68,162585,162586],{"class":70,"line":104},[68,162587,3890],{"emptyLinePlaceholder":1567},[68,162589,162590,162592,162594],{"class":70,"line":112},[68,162591,162529],{"class":78},[68,162593,1685],{"class":316},[68,162595,162596],{"class":78}," say_hello()\n",[68,162598,162599,162601,162604],{"class":70,"line":124},[68,162600,31899],{"class":85},[68,162602,162603],{"class":78},"(result)  ",[68,162605,162606],{"class":302},"# None\n",[14,162608,162610],{"id":162609},"_56-return的作用","5.6 return的作用",[170,162612,162613,162615],{},[65,162614,18533],{}," 有两个作用：",[263,162617,162618,162621],{},[27,162619,162620],{},"返回结果。",[27,162622,162623],{},"结束函数。",[58,162625,162627],{"className":31862,"code":162626,"language":31864,"meta":63,"style":63},"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",[65,162628,162629,162639,162651,162658,162662,162674,162681,162685,162692,162696,162700,162711],{"__ignoreMap":63},[68,162630,162631,162633,162636],{"class":70,"line":71},[68,162632,33431],{"class":316},[68,162634,162635],{"class":74}," check_age",[68,162637,162638],{"class":78},"(age):\n",[68,162640,162641,162643,162645,162647,162649],{"class":70,"line":82},[68,162642,4591],{"class":316},[68,162644,17194],{"class":78},[68,162646,2537],{"class":316},[68,162648,5583],{"class":85},[68,162650,5229],{"class":78},[68,162652,162653,162655],{"class":70,"line":98},[68,162654,16240],{"class":316},[68,162656,162657],{"class":1742}," \"年龄不合法\"\n",[68,162659,162660],{"class":70,"line":104},[68,162661,3890],{"emptyLinePlaceholder":1567},[68,162663,162664,162666,162668,162670,162672],{"class":70,"line":112},[68,162665,4591],{"class":316},[68,162667,17194],{"class":78},[68,162669,3201],{"class":316},[68,162671,157508],{"class":85},[68,162673,5229],{"class":78},[68,162675,162676,162678],{"class":70,"line":124},[68,162677,16240],{"class":316},[68,162679,162680],{"class":1742}," \"成年人\"\n",[68,162682,162683],{"class":70,"line":1496},[68,162684,3890],{"emptyLinePlaceholder":1567},[68,162686,162687,162689],{"class":70,"line":1502},[68,162688,5580],{"class":316},[68,162690,162691],{"class":1742}," \"未成年人\"\n",[68,162693,162694],{"class":70,"line":1510},[68,162695,3890],{"emptyLinePlaceholder":1567},[68,162697,162698],{"class":70,"line":1521},[68,162699,3890],{"emptyLinePlaceholder":1567},[68,162701,162702,162704,162707,162709],{"class":70,"line":3103},[68,162703,31899],{"class":85},[68,162705,162706],{"class":78},"(check_age(",[68,162708,333],{"class":85},[68,162710,31981],{"class":78},[68,162712,162713,162715,162717,162719,162721],{"class":70,"line":3108},[68,162714,31899],{"class":85},[68,162716,162706],{"class":78},[68,162718,2160],{"class":316},[68,162720,1846],{"class":85},[68,162722,31981],{"class":78},[170,162724,162725,162726,162728],{},"函数执行到 ",[65,162727,18533],{}," 后，后面的代码不会继续执行。",[14,162730,162732],{"id":162731},"_57-none","5.7 None",[170,162734,162735,162737],{},[65,162736,97161],{}," 表示空值或没有结果。",[170,162739,162740],{},"常见使用场景：",[263,162742,162743,162746,162749],{},[27,162744,162745],{},"函数没有返回值。",[27,162747,162748],{},"变量暂时没有具体值。",[27,162750,162751],{},"表示查询不到结果。",[58,162753,162755],{"className":31862,"code":162754,"language":31864,"meta":63,"style":63},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[65,162756,162757,162765,162769,162782],{"__ignoreMap":63},[68,162758,162759,162761,162763],{"class":70,"line":71},[68,162760,162529],{"class":78},[68,162762,1685],{"class":316},[68,162764,153395],{"class":85},[68,162766,162767],{"class":70,"line":82},[68,162768,3890],{"emptyLinePlaceholder":1567},[68,162770,162771,162773,162776,162778,162780],{"class":70,"line":98},[68,162772,3023],{"class":316},[68,162774,162775],{"class":78}," result ",[68,162777,40411],{"class":316},[68,162779,40417],{"class":85},[68,162781,5229],{"class":78},[68,162783,162784,162786,162788,162791],{"class":70,"line":104},[68,162785,32783],{"class":85},[68,162787,1640],{"class":78},[68,162789,162790],{"class":1742},"\"没有数据\"",[68,162792,1646],{"class":78},[170,162794,162795,162796,162798,162799,162802,162803,29869],{},"判断 ",[65,162797,97161],{}," 推荐使用 ",[65,162800,162801],{},"is None","，不要写成 ",[65,162804,162805],{},"== None",[14,162807,162809],{"id":162808},"_58-函数文档字符串","5.8 函数文档字符串",[170,162811,162812],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[58,162814,162816],{"className":31862,"code":162815,"language":31864,"meta":63,"style":63},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[65,162817,162818,162828,162833],{"__ignoreMap":63},[68,162819,162820,162822,162825],{"class":70,"line":71},[68,162821,33431],{"class":316},[68,162823,162824],{"class":74}," calculate_bmi",[68,162826,162827],{"class":78},"(weight, height):\n",[68,162829,162830],{"class":70,"line":82},[68,162831,162832],{"class":1742},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[68,162834,162835,162837,162840,162842,162845,162847],{"class":70,"line":98},[68,162836,5580],{"class":316},[68,162838,162839],{"class":78}," weight ",[68,162841,2212],{"class":316},[68,162843,162844],{"class":78}," height ",[68,162846,12149],{"class":316},[68,162848,49207],{"class":85},[170,162850,162851],{},"查看说明：",[58,162853,162855],{"className":31862,"code":162854,"language":31864,"meta":63,"style":63},"help(calculate_bmi)\n",[65,162856,162857],{"__ignoreMap":63},[68,162858,162859,162862],{"class":70,"line":71},[68,162860,162861],{"class":85},"help",[68,162863,162864],{"class":78},"(calculate_bmi)\n",[170,162866,162867],{},"较完整的写法：",[58,162869,162871],{"className":31862,"code":162870,"language":31864,"meta":63,"style":63},"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",[65,162872,162873,162881,162886,162891,162895,162900,162905,162910,162914],{"__ignoreMap":63},[68,162874,162875,162877,162879],{"class":70,"line":71},[68,162876,33431],{"class":316},[68,162878,162824],{"class":74},[68,162880,162827],{"class":78},[68,162882,162883],{"class":70,"line":82},[68,162884,162885],{"class":1742},"    \"\"\"\n",[68,162887,162888],{"class":70,"line":98},[68,162889,162890],{"class":1742},"    计算BMI。\n",[68,162892,162893],{"class":70,"line":104},[68,162894,3890],{"emptyLinePlaceholder":1567},[68,162896,162897],{"class":70,"line":112},[68,162898,162899],{"class":1742},"    :param weight: 体重，单位kg\n",[68,162901,162902],{"class":70,"line":124},[68,162903,162904],{"class":1742},"    :param height: 身高，单位m\n",[68,162906,162907],{"class":70,"line":1496},[68,162908,162909],{"class":1742},"    :return: BMI数值\n",[68,162911,162912],{"class":70,"line":1502},[68,162913,162885],{"class":1742},[68,162915,162916,162918,162920,162922,162924,162926],{"class":70,"line":1510},[68,162917,5580],{"class":316},[68,162919,162839],{"class":78},[68,162921,2212],{"class":316},[68,162923,162844],{"class":78},[68,162925,12149],{"class":316},[68,162927,49207],{"class":85},[14,162929,162931],{"id":162930},"_59-变量作用域","5.9 变量作用域",[19,162933,162935],{"id":162934},"_591-局部变量","5.9.1 局部变量",[170,162937,162938],{},"在函数内部定义的变量，只能在函数内部使用。",[58,162940,162942],{"className":31862,"code":162941,"language":31864,"meta":63,"style":63},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[65,162943,162944,162953,162961,162967,162971,162975,162980],{"__ignoreMap":63},[68,162945,162946,162948,162951],{"class":70,"line":71},[68,162947,33431],{"class":316},[68,162949,162950],{"class":74}," test",[68,162952,33437],{"class":78},[68,162954,162955,162957,162959],{"class":70,"line":82},[68,162956,47077],{"class":78},[68,162958,1685],{"class":316},[68,162960,59906],{"class":85},[68,162962,162963,162965],{"class":70,"line":98},[68,162964,32783],{"class":85},[68,162966,1653],{"class":78},[68,162968,162969],{"class":70,"line":104},[68,162970,3890],{"emptyLinePlaceholder":1567},[68,162972,162973],{"class":70,"line":112},[68,162974,3890],{"emptyLinePlaceholder":1567},[68,162976,162977],{"class":70,"line":124},[68,162978,162979],{"class":78},"test()\n",[68,162981,162982,162984,162987],{"class":70,"line":1496},[68,162983,31899],{"class":85},[68,162985,162986],{"class":78},"(num)  ",[68,162988,162989],{"class":302},"# 报错\n",[19,162991,162993],{"id":162992},"_592-全局变量","5.9.2 全局变量",[170,162995,162996],{},"在函数外部定义的变量，可以在函数内部读取。",[58,162998,163000],{"className":31862,"code":162999,"language":31864,"meta":63,"style":63},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[65,163001,163002,163010,163014,163018,163026,163032,163036,163040],{"__ignoreMap":63},[68,163003,163004,163006,163008],{"class":70,"line":71},[68,163005,147759],{"class":78},[68,163007,1685],{"class":316},[68,163009,150576],{"class":1742},[68,163011,163012],{"class":70,"line":82},[68,163013,3890],{"emptyLinePlaceholder":1567},[68,163015,163016],{"class":70,"line":98},[68,163017,3890],{"emptyLinePlaceholder":1567},[68,163019,163020,163022,163024],{"class":70,"line":104},[68,163021,33431],{"class":316},[68,163023,162219],{"class":74},[68,163025,33437],{"class":78},[68,163027,163028,163030],{"class":70,"line":112},[68,163029,32783],{"class":85},[68,163031,151883],{"class":78},[68,163033,163034],{"class":70,"line":124},[68,163035,3890],{"emptyLinePlaceholder":1567},[68,163037,163038],{"class":70,"line":1496},[68,163039,3890],{"emptyLinePlaceholder":1567},[68,163041,163042],{"class":70,"line":1502},[68,163043,162254],{"class":78},[170,163045,163046,163047,29869],{},"如果要在函数内部修改全局变量，需要 ",[65,163048,163049],{},"global",[58,163051,163053],{"className":31862,"code":163052,"language":31864,"meta":63,"style":63},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[65,163054,163055,163063,163067,163071,163080,163088,163096,163100,163104,163109],{"__ignoreMap":63},[68,163056,163057,163059,163061],{"class":70,"line":71},[68,163058,147914],{"class":78},[68,163060,1685],{"class":316},[68,163062,48817],{"class":85},[68,163064,163065],{"class":70,"line":82},[68,163066,3890],{"emptyLinePlaceholder":1567},[68,163068,163069],{"class":70,"line":98},[68,163070,3890],{"emptyLinePlaceholder":1567},[68,163072,163073,163075,163078],{"class":70,"line":104},[68,163074,33431],{"class":316},[68,163076,163077],{"class":74}," add_count",[68,163079,33437],{"class":78},[68,163081,163082,163085],{"class":70,"line":112},[68,163083,163084],{"class":316},"    global",[68,163086,163087],{"class":78}," count\n",[68,163089,163090,163092,163094],{"class":70,"line":124},[68,163091,160656],{"class":78},[68,163093,10965],{"class":316},[68,163095,57177],{"class":85},[68,163097,163098],{"class":70,"line":1496},[68,163099,3890],{"emptyLinePlaceholder":1567},[68,163101,163102],{"class":70,"line":1502},[68,163103,3890],{"emptyLinePlaceholder":1567},[68,163105,163106],{"class":70,"line":1510},[68,163107,163108],{"class":78},"add_count()\n",[68,163110,163111,163113],{"class":70,"line":1521},[68,163112,31899],{"class":85},[68,163114,163115],{"class":78},"(count)\n",[170,163117,163118],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163120,163122],{"id":163121},"_510-函数嵌套调用","5.10 函数嵌套调用",[170,163124,163125],{},"一个函数中可以调用另一个函数。",[58,163127,163129],{"className":31862,"code":163128,"language":31864,"meta":63,"style":63},"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",[65,163130,163131,163140,163154,163158,163162,163171,163176,163196,163217,163221,163225,163229],{"__ignoreMap":63},[68,163132,163133,163135,163138],{"class":70,"line":71},[68,163134,33431],{"class":316},[68,163136,163137],{"class":74}," print_line",[68,163139,33437],{"class":78},[68,163141,163142,163144,163146,163148,163150,163152],{"class":70,"line":82},[68,163143,32783],{"class":85},[68,163145,1640],{"class":78},[68,163147,33967],{"class":1742},[68,163149,8007],{"class":316},[68,163151,80142],{"class":85},[68,163153,1646],{"class":78},[68,163155,163156],{"class":70,"line":98},[68,163157,3890],{"emptyLinePlaceholder":1567},[68,163159,163160],{"class":70,"line":104},[68,163161,3890],{"emptyLinePlaceholder":1567},[68,163163,163164,163166,163169],{"class":70,"line":112},[68,163165,33431],{"class":316},[68,163167,163168],{"class":74}," print_info",[68,163170,150598],{"class":78},[68,163172,163173],{"class":70,"line":124},[68,163174,163175],{"class":78},"    print_line()\n",[68,163177,163178,163180,163182,163184,163186,163188,163190,163192,163194],{"class":70,"line":1496},[68,163179,32783],{"class":85},[68,163181,1640],{"class":78},[68,163183,1691],{"class":316},[68,163185,157905],{"class":1742},[68,163187,2523],{"class":85},[68,163189,81287],{"class":78},[68,163191,2573],{"class":85},[68,163193,1880],{"class":1742},[68,163195,1646],{"class":78},[68,163197,163198,163200,163202,163204,163207,163209,163211,163213,163215],{"class":70,"line":1502},[68,163199,32783],{"class":85},[68,163201,1640],{"class":78},[68,163203,1691],{"class":316},[68,163205,163206],{"class":1742},"\"年龄:",[68,163208,2523],{"class":85},[68,163210,71699],{"class":78},[68,163212,2573],{"class":85},[68,163214,1880],{"class":1742},[68,163216,1646],{"class":78},[68,163218,163219],{"class":70,"line":1510},[68,163220,163175],{"class":78},[68,163222,163223],{"class":70,"line":1521},[68,163224,3890],{"emptyLinePlaceholder":1567},[68,163226,163227],{"class":70,"line":3103},[68,163228,3890],{"emptyLinePlaceholder":1567},[68,163230,163231,163234,163236,163238,163240],{"class":70,"line":3108},[68,163232,163233],{"class":78},"print_info(",[68,163235,151111],{"class":1742},[68,163237,13923],{"class":78},[68,163239,2278],{"class":85},[68,163241,1646],{"class":78},[170,163243,163244],{},"这种方式可以把小功能组合成大功能。",[14,163246,163248],{"id":163247},"_511-参数检查","5.11 参数检查",[170,163250,163251],{},"函数内部可以检查参数是否合法。",[58,163253,163255],{"className":31862,"code":163254,"language":31864,"meta":63,"style":63},"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",[65,163256,163257,163266,163278,163284,163294,163298,163302,163319,163323,163335,163346,163352],{"__ignoreMap":63},[68,163258,163259,163261,163264],{"class":70,"line":71},[68,163260,33431],{"class":316},[68,163262,163263],{"class":74}," divide",[68,163265,152316],{"class":78},[68,163267,163268,163270,163272,163274,163276],{"class":70,"line":82},[68,163269,4591],{"class":316},[68,163271,12370],{"class":78},[68,163273,4439],{"class":316},[68,163275,5583],{"class":85},[68,163277,5229],{"class":78},[68,163279,163280,163282],{"class":70,"line":98},[68,163281,16240],{"class":316},[68,163283,153395],{"class":85},[68,163285,163286,163288,163290,163292],{"class":70,"line":104},[68,163287,5580],{"class":316},[68,163289,12357],{"class":78},[68,163291,2212],{"class":316},[68,163293,152327],{"class":78},[68,163295,163296],{"class":70,"line":112},[68,163297,3890],{"emptyLinePlaceholder":1567},[68,163299,163300],{"class":70,"line":124},[68,163301,3890],{"emptyLinePlaceholder":1567},[68,163303,163304,163306,163308,163311,163313,163315,163317],{"class":70,"line":1496},[68,163305,162529],{"class":78},[68,163307,1685],{"class":316},[68,163309,163310],{"class":78}," divide(",[68,163312,313],{"class":85},[68,163314,13923],{"class":78},[68,163316,1248],{"class":85},[68,163318,1646],{"class":78},[68,163320,163321],{"class":70,"line":1502},[68,163322,3890],{"emptyLinePlaceholder":1567},[68,163324,163325,163327,163329,163331,163333],{"class":70,"line":1510},[68,163326,3023],{"class":316},[68,163328,162775],{"class":78},[68,163330,40411],{"class":316},[68,163332,40417],{"class":85},[68,163334,5229],{"class":78},[68,163336,163337,163339,163341,163344],{"class":70,"line":1521},[68,163338,32783],{"class":85},[68,163340,1640],{"class":78},[68,163342,163343],{"class":1742},"\"除数不能为0\"",[68,163345,1646],{"class":78},[68,163347,163348,163350],{"class":70,"line":3103},[68,163349,3192],{"class":316},[68,163351,5229],{"class":78},[68,163353,163354,163356],{"class":70,"line":3108},[68,163355,32783],{"class":85},[68,163357,78062],{"class":78},[14,163359,163361],{"id":163360},"_512-类型提示","5.12 类型提示",[170,163363,163364],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[58,163366,163368],{"className":31862,"code":163367,"language":31864,"meta":63,"style":63},"def add(a: int, b: int) -> int:\n    return a + b\n",[65,163369,163370,163393],{"__ignoreMap":63},[68,163371,163372,163374,163376,163379,163381,163384,163386,163389,163391],{"class":70,"line":71},[68,163373,33431],{"class":316},[68,163375,6698],{"class":74},[68,163377,163378],{"class":78},"(a: ",[68,163380,1643],{"class":85},[68,163382,163383],{"class":78},", b: ",[68,163385,1643],{"class":85},[68,163387,163388],{"class":78},") -> ",[68,163390,1643],{"class":85},[68,163392,5229],{"class":78},[68,163394,163395,163397,163399,163401],{"class":70,"line":82},[68,163396,5580],{"class":316},[68,163398,12357],{"class":78},[68,163400,2109],{"class":316},[68,163402,152327],{"class":78},[170,163404,163405],{},"字符串参数：",[58,163407,163409],{"className":31862,"code":163408,"language":31864,"meta":63,"style":63},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[65,163410,163411,163428],{"__ignoreMap":63},[68,163412,163413,163415,163417,163420,163422,163424,163426],{"class":70,"line":71},[68,163414,33431],{"class":316},[68,163416,162219],{"class":74},[68,163418,163419],{"class":78},"(name: ",[68,163421,2795],{"class":85},[68,163423,163388],{"class":78},[68,163425,97161],{"class":85},[68,163427,5229],{"class":78},[68,163429,163430,163432,163434,163436,163438,163440,163442,163444,163446],{"class":70,"line":82},[68,163431,32783],{"class":85},[68,163433,1640],{"class":78},[68,163435,1691],{"class":316},[68,163437,158277],{"class":1742},[68,163439,2523],{"class":85},[68,163441,81287],{"class":78},[68,163443,2573],{"class":85},[68,163445,1880],{"class":1742},[68,163447,1646],{"class":78},[170,163449,163450],{},"列表参数：",[58,163452,163454],{"className":31862,"code":163453,"language":31864,"meta":63,"style":63},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[65,163455,163456,163475,163483,163495,163504],{"__ignoreMap":63},[68,163457,163458,163460,163463,163466,163468,163471,163473],{"class":70,"line":71},[68,163459,33431],{"class":316},[68,163461,163462],{"class":74}," get_total",[68,163464,163465],{"class":78},"(numbers: list[",[68,163467,1643],{"class":85},[68,163469,163470],{"class":78},"]) -> ",[68,163472,1643],{"class":85},[68,163474,5229],{"class":78},[68,163476,163477,163479,163481],{"class":70,"line":82},[68,163478,160530],{"class":78},[68,163480,1685],{"class":316},[68,163482,48817],{"class":85},[68,163484,163485,163487,163490,163492],{"class":70,"line":98},[68,163486,4691],{"class":316},[68,163488,163489],{"class":78}," number ",[68,163491,27529],{"class":316},[68,163493,163494],{"class":78}," numbers:\n",[68,163496,163497,163499,163501],{"class":70,"line":104},[68,163498,161205],{"class":78},[68,163500,10965],{"class":316},[68,163502,163503],{"class":78}," number\n",[68,163505,163506,163508],{"class":70,"line":112},[68,163507,5580],{"class":316},[68,163509,163510],{"class":78}," total\n",[170,163512,163513],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163515,163517],{"id":163516},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[58,163519,163521],{"className":31862,"code":163520,"language":31864,"meta":63,"style":63},"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",[65,163522,163523,163533,163537,163541,163549,163560,163570,163580,163590,163600,163604,163608,163617,163639,163643,163647,163656,163662,163682,163694,163705,163709,163718,163729,163734,163738,163742,163751,163757,163776,163788,163798,163802,163813,163823,163827,163835,163846,163850,163854,163858,163866,163871,163885,163889,163901,163906,163918,163923,163935,163940,163952,163962,163966,163972],{"__ignoreMap":63},[68,163524,163525,163528,163530],{"class":70,"line":71},[68,163526,163527],{"class":78},"balance ",[68,163529,1685],{"class":316},[68,163531,163532],{"class":85}," 1000\n",[68,163534,163535],{"class":70,"line":82},[68,163536,3890],{"emptyLinePlaceholder":1567},[68,163538,163539],{"class":70,"line":98},[68,163540,3890],{"emptyLinePlaceholder":1567},[68,163542,163543,163545,163547],{"class":70,"line":104},[68,163544,33431],{"class":316},[68,163546,153256],{"class":74},[68,163548,33437],{"class":78},[68,163550,163551,163553,163555,163558],{"class":70,"line":112},[68,163552,32783],{"class":85},[68,163554,1640],{"class":78},[68,163556,163557],{"class":1742},"\"====== ATM ======\"",[68,163559,1646],{"class":78},[68,163561,163562,163564,163566,163568],{"class":70,"line":124},[68,163563,32783],{"class":85},[68,163565,1640],{"class":78},[68,163567,161871],{"class":1742},[68,163569,1646],{"class":78},[68,163571,163572,163574,163576,163578],{"class":70,"line":1496},[68,163573,32783],{"class":85},[68,163575,1640],{"class":78},[68,163577,161882],{"class":1742},[68,163579,1646],{"class":78},[68,163581,163582,163584,163586,163588],{"class":70,"line":1502},[68,163583,32783],{"class":85},[68,163585,1640],{"class":78},[68,163587,161893],{"class":1742},[68,163589,1646],{"class":78},[68,163591,163592,163594,163596,163598],{"class":70,"line":1510},[68,163593,32783],{"class":85},[68,163595,1640],{"class":78},[68,163597,161904],{"class":1742},[68,163599,1646],{"class":78},[68,163601,163602],{"class":70,"line":1521},[68,163603,3890],{"emptyLinePlaceholder":1567},[68,163605,163606],{"class":70,"line":3103},[68,163607,3890],{"emptyLinePlaceholder":1567},[68,163609,163610,163612,163615],{"class":70,"line":3108},[68,163611,33431],{"class":316},[68,163613,163614],{"class":74}," show_balance",[68,163616,33437],{"class":78},[68,163618,163619,163621,163623,163625,163628,163630,163633,163635,163637],{"class":70,"line":3114},[68,163620,32783],{"class":85},[68,163622,1640],{"class":78},[68,163624,1691],{"class":316},[68,163626,163627],{"class":1742},"\"当前余额:",[68,163629,2523],{"class":85},[68,163631,163632],{"class":78},"balance",[68,163634,2573],{"class":85},[68,163636,158235],{"class":1742},[68,163638,1646],{"class":78},[68,163640,163641],{"class":70,"line":3119},[68,163642,3890],{"emptyLinePlaceholder":1567},[68,163644,163645],{"class":70,"line":3133},[68,163646,3890],{"emptyLinePlaceholder":1567},[68,163648,163649,163651,163654],{"class":70,"line":3138},[68,163650,33431],{"class":316},[68,163652,163653],{"class":74}," save_money",[68,163655,33437],{"class":78},[68,163657,163658,163660],{"class":70,"line":3144},[68,163659,163084],{"class":316},[68,163661,151322],{"class":78},[68,163663,163664,163667,163669,163671,163673,163675,163677,163680],{"class":70,"line":3165},[68,163665,163666],{"class":78},"    money ",[68,163668,1685],{"class":316},[68,163670,111271],{"class":85},[68,163672,1640],{"class":78},[68,163674,55302],{"class":85},[68,163676,1640],{"class":78},[68,163678,163679],{"class":1742},"\"请输入存款金额:\"",[68,163681,31981],{"class":78},[68,163683,163684,163686,163688,163690,163692],{"class":70,"line":3170},[68,163685,4591],{"class":316},[68,163687,151365],{"class":78},[68,163689,3079],{"class":316},[68,163691,5583],{"class":85},[68,163693,5229],{"class":78},[68,163695,163696,163698,163700,163703],{"class":70,"line":3184},[68,163697,33935],{"class":85},[68,163699,1640],{"class":78},[68,163701,163702],{"class":1742},"\"金额必须大于0\"",[68,163704,1646],{"class":78},[68,163706,163707],{"class":70,"line":3189},[68,163708,153584],{"class":316},[68,163710,163711,163714,163716],{"class":70,"line":3218},[68,163712,163713],{"class":78},"    balance ",[68,163715,10965],{"class":316},[68,163717,151398],{"class":78},[68,163719,163720,163722,163724,163727],{"class":70,"line":3223},[68,163721,32783],{"class":85},[68,163723,1640],{"class":78},[68,163725,163726],{"class":1742},"\"存款成功\"",[68,163728,1646],{"class":78},[68,163730,163731],{"class":70,"line":3240},[68,163732,163733],{"class":78},"    show_balance()\n",[68,163735,163736],{"class":70,"line":3245},[68,163737,3890],{"emptyLinePlaceholder":1567},[68,163739,163740],{"class":70,"line":3250},[68,163741,3890],{"emptyLinePlaceholder":1567},[68,163743,163744,163746,163749],{"class":70,"line":3255},[68,163745,33431],{"class":316},[68,163747,163748],{"class":74}," withdraw_money",[68,163750,33437],{"class":78},[68,163752,163753,163755],{"class":70,"line":3269},[68,163754,163084],{"class":316},[68,163756,151322],{"class":78},[68,163758,163759,163761,163763,163765,163767,163769,163771,163774],{"class":70,"line":3274},[68,163760,163666],{"class":78},[68,163762,1685],{"class":316},[68,163764,111271],{"class":85},[68,163766,1640],{"class":78},[68,163768,55302],{"class":85},[68,163770,1640],{"class":78},[68,163772,163773],{"class":1742},"\"请输入取款金额:\"",[68,163775,31981],{"class":78},[68,163777,163778,163780,163782,163784,163786],{"class":70,"line":4067},[68,163779,4591],{"class":316},[68,163781,151365],{"class":78},[68,163783,3079],{"class":316},[68,163785,5583],{"class":85},[68,163787,5229],{"class":78},[68,163789,163790,163792,163794,163796],{"class":70,"line":4081},[68,163791,33935],{"class":85},[68,163793,1640],{"class":78},[68,163795,163702],{"class":1742},[68,163797,1646],{"class":78},[68,163799,163800],{"class":70,"line":4089},[68,163801,153584],{"class":316},[68,163803,163804,163806,163808,163810],{"class":70,"line":4094},[68,163805,4591],{"class":316},[68,163807,151365],{"class":78},[68,163809,2587],{"class":316},[68,163811,163812],{"class":78}," balance:\n",[68,163814,163815,163817,163819,163821],{"class":70,"line":4100},[68,163816,33935],{"class":85},[68,163818,1640],{"class":78},[68,163820,151460],{"class":1742},[68,163822,1646],{"class":78},[68,163824,163825],{"class":70,"line":4106},[68,163826,153584],{"class":316},[68,163828,163829,163831,163833],{"class":70,"line":4111},[68,163830,163713],{"class":78},[68,163832,151475],{"class":316},[68,163834,151398],{"class":78},[68,163836,163837,163839,163841,163844],{"class":70,"line":9437},[68,163838,32783],{"class":85},[68,163840,1640],{"class":78},[68,163842,163843],{"class":1742},"\"取款成功\"",[68,163845,1646],{"class":78},[68,163847,163848],{"class":70,"line":9461},[68,163849,163733],{"class":78},[68,163851,163852],{"class":70,"line":9466},[68,163853,3890],{"emptyLinePlaceholder":1567},[68,163855,163856],{"class":70,"line":9472},[68,163857,3890],{"emptyLinePlaceholder":1567},[68,163859,163860,163862,163864],{"class":70,"line":9499},[68,163861,110137],{"class":316},[68,163863,96767],{"class":85},[68,163865,5229],{"class":78},[68,163867,163868],{"class":70,"line":9504},[68,163869,163870],{"class":78},"    show_menu()\n",[68,163872,163873,163875,163877,163879,163881,163883],{"class":70,"line":9510},[68,163874,161915],{"class":78},[68,163876,1685],{"class":316},[68,163878,62083],{"class":85},[68,163880,1640],{"class":78},[68,163882,154296],{"class":1742},[68,163884,1646],{"class":78},[68,163886,163887],{"class":70,"line":9522},[68,163888,3890],{"emptyLinePlaceholder":1567},[68,163890,163891,163893,163895,163897,163899],{"class":70,"line":9534},[68,163892,4591],{"class":316},[68,163894,154309],{"class":78},[68,163896,4439],{"class":316},[68,163898,154314],{"class":1742},[68,163900,5229],{"class":78},[68,163902,163903],{"class":70,"line":9546},[68,163904,163905],{"class":78},"        show_balance()\n",[68,163907,163908,163910,163912,163914,163916],{"class":70,"line":11204},[68,163909,40777],{"class":316},[68,163911,154309],{"class":78},[68,163913,4439],{"class":316},[68,163915,154333],{"class":1742},[68,163917,5229],{"class":78},[68,163919,163920],{"class":70,"line":11229},[68,163921,163922],{"class":78},"        save_money()\n",[68,163924,163925,163927,163929,163931,163933],{"class":70,"line":11252},[68,163926,40777],{"class":316},[68,163928,154309],{"class":78},[68,163930,4439],{"class":316},[68,163932,154351],{"class":1742},[68,163934,5229],{"class":78},[68,163936,163937],{"class":70,"line":11276},[68,163938,163939],{"class":78},"        withdraw_money()\n",[68,163941,163942,163944,163946,163948,163950],{"class":70,"line":11281},[68,163943,40777],{"class":316},[68,163945,154309],{"class":78},[68,163947,4439],{"class":316},[68,163949,154405],{"class":1742},[68,163951,5229],{"class":78},[68,163953,163954,163956,163958,163960],{"class":70,"line":11286},[68,163955,33935],{"class":85},[68,163957,1640],{"class":78},[68,163959,154416],{"class":1742},[68,163961,1646],{"class":78},[68,163963,163964],{"class":70,"line":11291},[68,163965,33111],{"class":316},[68,163967,163968,163970],{"class":70,"line":11300},[68,163969,159245],{"class":316},[68,163971,5229],{"class":78},[68,163973,163974,163976,163978,163980],{"class":70,"line":11305},[68,163975,33935],{"class":85},[68,163977,1640],{"class":78},[68,163979,154437],{"class":1742},[68,163981,1646],{"class":78},[170,163983,163984],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163986,163988],{"id":163987},"_514-易错点","5.14 易错点",[263,163990,163991,163994,163997,164002,164007,164010],{},[27,163992,163993],{},"函数定义后必须调用才会执行。",[27,163995,163996],{},"函数名后面有括号才是调用。",[27,163998,163999,164001],{},[65,164000,18533],{}," 后面的代码不会执行。",[27,164003,164004,164005,29869],{},"没有返回值的函数默认返回 ",[65,164006,97161],{},[27,164008,164009],{},"局部变量不能在函数外部访问。",[27,164011,164012,164013,164015],{},"不要滥用 ",[65,164014,163049],{},"，更好的方式是让函数返回新值。",[170,164017,164018,164019,164021],{},"例如不用 ",[65,164020,163049],{}," 改写存款：",[58,164023,164025],{"className":31862,"code":164024,"language":31864,"meta":63,"style":63},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[65,164026,164027,164036,164047,164051,164055,164063,164076],{"__ignoreMap":63},[68,164028,164029,164031,164033],{"class":70,"line":71},[68,164030,33431],{"class":316},[68,164032,163653],{"class":74},[68,164034,164035],{"class":78},"(balance, money):\n",[68,164037,164038,164040,164043,164045],{"class":70,"line":82},[68,164039,5580],{"class":316},[68,164041,164042],{"class":78}," balance ",[68,164044,2109],{"class":316},[68,164046,151398],{"class":78},[68,164048,164049],{"class":70,"line":98},[68,164050,3890],{"emptyLinePlaceholder":1567},[68,164052,164053],{"class":70,"line":104},[68,164054,3890],{"emptyLinePlaceholder":1567},[68,164056,164057,164059,164061],{"class":70,"line":112},[68,164058,163527],{"class":78},[68,164060,1685],{"class":316},[68,164062,163532],{"class":85},[68,164064,164065,164067,164069,164072,164074],{"class":70,"line":124},[68,164066,163527],{"class":78},[68,164068,1685],{"class":316},[68,164070,164071],{"class":78}," save_money(balance, ",[68,164073,3213],{"class":85},[68,164075,1646],{"class":78},[68,164077,164078,164080],{"class":70,"line":1496},[68,164079,31899],{"class":85},[68,164081,164082],{"class":78},"(balance)\n",[14,164084,164086],{"id":164085},"_515-本章练习","5.15 本章练习",[263,164088,164089,164096,164102,164108,164114],{},[27,164090,164091,164092,164095],{},"定义函数 ",[65,164093,164094],{},"print_student(name, age)","，输出学生信息。",[27,164097,164091,164098,164101],{},[65,164099,164100],{},"get_max(a, b, c)","，返回三个数中的最大值。",[27,164103,164091,164104,164107],{},[65,164105,164106],{},"is_even(num)","，判断一个数是否为偶数。",[27,164109,164091,164110,164113],{},[65,164111,164112],{},"calculate_bmi(weight, height)","，返回 BMI。",[27,164115,164116],{},"把第 4 章的菜单程序拆分成多个函数。",[1553,164118,164119],{},"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":63,"searchDepth":82,"depth":82,"links":164121},[164122,164123,164124,164125,164126,164127,164128,164129,164130,164134,164135,164136,164137,164138,164139],{"id":162142,"depth":82,"text":162143},{"id":162183,"depth":82,"text":162184},{"id":162273,"depth":82,"text":162274},{"id":162354,"depth":82,"text":162355},{"id":162487,"depth":82,"text":162488},{"id":162609,"depth":82,"text":162610},{"id":162731,"depth":82,"text":162732},{"id":162808,"depth":82,"text":162809},{"id":162930,"depth":82,"text":162931,"children":164131},[164132,164133],{"id":162934,"depth":98,"text":162935},{"id":162992,"depth":98,"text":162993},{"id":163121,"depth":82,"text":163122},{"id":163247,"depth":82,"text":163248},{"id":163360,"depth":82,"text":163361},{"id":163516,"depth":82,"text":163517},{"id":163987,"depth":82,"text":163988},{"id":164085,"depth":82,"text":164086},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162134,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164146,"title":164147,"body":164148,"description":1564,"extension":1565,"meta":167192,"navigation":1567,"path":167193,"seo":167194,"stem":167195,"__hash__":167196},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164149,"toc":167173},[164150,164153,164157,164160,164163,164267,164270,164274,164277,164357,164360,164364,164367,164427,164430,164466,164469,164484,164488,164561,164564,164619,164622,164692,164695,164779,164789,164847,164851,164896,164899,164925,164928,165034,165038,165041,165083,165086,165150,165153,165157,165160,165221,165224,165254,165257,165295,165299,165302,165311,165314,165438,165441,165482,165486,165489,165500,165540,165543,165558,165563,165566,165633,165636,165726,165730,165733,165781,165784,165811,165813,165843,165846,165866,165869,165900,165903,165936,165940,165943,165967,165970,165994,165997,166021,166025,166028,166158,166161,166241,166244,166319,166323,166326,166376,166379,166421,166424,166448,166450,166474,166477,166532,166535,166601,166605,166608,166611,166649,166652,166705,166708,166754,166757,166790,166793,166797,167116,167120,167149,167153,167170],[10,164151,164147],{"id":164152},"_6-数据容器",[14,164154,164156],{"id":164155},"_61-什么是数据容器","6.1 什么是数据容器",[170,164158,164159],{},"数据容器用于一次保存多个数据。",[170,164161,164162],{},"常见容器：",[128,164164,164165,164182],{},[131,164166,164167],{},[134,164168,164169,164171,164174,164177,164180],{},[137,164170,27257],{},[137,164172,164173],{},"是否有序",[137,164175,164176],{},"是否可变",[137,164178,164179],{},"是否允许重复",[137,164181,1055],{},[144,164183,164184,164202,164218,164233,164250],{},[134,164185,164186,164189,164192,164195,164198],{},[149,164187,164188],{},"list列表",[149,164190,164191],{},"有序",[149,164193,164194],{},"可变",[149,164196,164197],{},"允许",[149,164199,164200],{},[65,164201,156480],{},[134,164203,164204,164207,164209,164212,164214],{},[149,164205,164206],{},"tuple元组",[149,164208,164191],{},[149,164210,164211],{},"不可变",[149,164213,164197],{},[149,164215,164216],{},[65,164217,156493],{},[134,164219,164220,164223,164225,164227,164229],{},[149,164221,164222],{},"str字符串",[149,164224,164191],{},[149,164226,164211],{},[149,164228,164197],{},[149,164230,164231],{},[65,164232,157103],{},[134,164234,164235,164238,164241,164243,164246],{},[149,164236,164237],{},"set集合",[149,164239,164240],{},"无序",[149,164242,164194],{},[149,164244,164245],{},"不允许",[149,164247,164248],{},[65,164249,156518],{},[134,164251,164252,164255,164257,164259,164262],{},[149,164253,164254],{},"dict字典",[149,164256,164191],{},[149,164258,164194],{},[149,164260,164261],{},"key不允许重复",[149,164263,164264],{},[65,164265,164266],{},"{\"name\": \"小明\"}",[170,164268,164269],{},"Python 3.7 之后，字典保持插入顺序。",[14,164271,164273],{"id":164272},"_62-列表list","6.2 列表list",[170,164275,164276],{},"列表用于保存一组有顺序的数据。",[58,164278,164280],{"className":31862,"code":164279,"language":31864,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[65,164281,164282,164302,164327,164348],{"__ignoreMap":63},[68,164283,164284,164286,164288,164290,164292,164294,164296,164298,164300],{"class":70,"line":71},[68,164285,161603],{"class":78},[68,164287,1685],{"class":316},[68,164289,53708],{"class":78},[68,164291,151111],{"class":1742},[68,164293,13923],{"class":78},[68,164295,152159],{"class":1742},[68,164297,13923],{"class":78},[68,164299,160954],{"class":1742},[68,164301,34730],{"class":78},[68,164303,164304,164307,164309,164311,164313,164315,164317,164319,164321,164323,164325],{"class":70,"line":82},[68,164305,164306],{"class":78},"numbers ",[68,164308,1685],{"class":316},[68,164310,53708],{"class":78},[68,164312,1846],{"class":85},[68,164314,13923],{"class":78},[68,164316,1715],{"class":85},[68,164318,13923],{"class":78},[68,164320,1709],{"class":85},[68,164322,13923],{"class":78},[68,164324,1922],{"class":85},[68,164326,34730],{"class":78},[68,164328,164329,164332,164334,164336,164338,164340,164342,164344,164346],{"class":70,"line":98},[68,164330,164331],{"class":78},"mixed ",[68,164333,1685],{"class":316},[68,164335,53708],{"class":78},[68,164337,151111],{"class":1742},[68,164339,13923],{"class":78},[68,164341,2278],{"class":85},[68,164343,13923],{"class":78},[68,164345,32960],{"class":85},[68,164347,34730],{"class":78},[68,164349,164350,164353,164355],{"class":70,"line":104},[68,164351,164352],{"class":78},"empty ",[68,164354,1685],{"class":316},[68,164356,53320],{"class":78},[170,164358,164359],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164361,164363],{"id":164362},"_63-列表索引","6.3 列表索引",[170,164365,164366],{},"正向索引从 0 开始：",[58,164368,164370],{"className":31862,"code":164369,"language":31864,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[65,164371,164372,164392,164396,164407,164417],{"__ignoreMap":63},[68,164373,164374,164376,164378,164380,164382,164384,164386,164388,164390],{"class":70,"line":71},[68,164375,161603],{"class":78},[68,164377,1685],{"class":316},[68,164379,53708],{"class":78},[68,164381,151111],{"class":1742},[68,164383,13923],{"class":78},[68,164385,152159],{"class":1742},[68,164387,13923],{"class":78},[68,164389,160954],{"class":1742},[68,164391,34730],{"class":78},[68,164393,164394],{"class":70,"line":82},[68,164395,3890],{"emptyLinePlaceholder":1567},[68,164397,164398,164400,164403,164405],{"class":70,"line":98},[68,164399,31899],{"class":85},[68,164401,164402],{"class":78},"(names[",[68,164404,1248],{"class":85},[68,164406,6147],{"class":78},[68,164408,164409,164411,164413,164415],{"class":70,"line":104},[68,164410,31899],{"class":85},[68,164412,164402],{"class":78},[68,164414,1846],{"class":85},[68,164416,6147],{"class":78},[68,164418,164419,164421,164423,164425],{"class":70,"line":112},[68,164420,31899],{"class":85},[68,164422,164402],{"class":78},[68,164424,1715],{"class":85},[68,164426,6147],{"class":78},[170,164428,164429],{},"反向索引从 -1 开始：",[58,164431,164433],{"className":31862,"code":164432,"language":31864,"meta":63,"style":63},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[65,164434,164435,164451],{"__ignoreMap":63},[68,164436,164437,164439,164441,164443,164445,164448],{"class":70,"line":71},[68,164438,31899],{"class":85},[68,164440,164402],{"class":78},[68,164442,2160],{"class":316},[68,164444,1846],{"class":85},[68,164446,164447],{"class":78},"])  ",[68,164449,164450],{"class":302},"# 小刚\n",[68,164452,164453,164455,164457,164459,164461,164463],{"class":70,"line":82},[68,164454,31899],{"class":85},[68,164456,164402],{"class":78},[68,164458,2160],{"class":316},[68,164460,1715],{"class":85},[68,164462,164447],{"class":78},[68,164464,164465],{"class":302},"# 小红\n",[170,164467,164468],{},"索引越界会报错：",[58,164470,164472],{"className":31862,"code":164471,"language":31864,"meta":63,"style":63},"print(names[3])\n",[65,164473,164474],{"__ignoreMap":63},[68,164475,164476,164478,164480,164482],{"class":70,"line":71},[68,164477,31899],{"class":85},[68,164479,164402],{"class":78},[68,164481,1709],{"class":85},[68,164483,6147],{"class":78},[14,164485,164487],{"id":164486},"_64-列表常用方法","6.4 列表常用方法",[58,164489,164491],{"className":31862,"code":164490,"language":31864,"meta":63,"style":63},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[65,164492,164493,164509,164513,164522,164536,164550,164554],{"__ignoreMap":63},[68,164494,164495,164497,164499,164501,164503,164505,164507],{"class":70,"line":71},[68,164496,161603],{"class":78},[68,164498,1685],{"class":316},[68,164500,53708],{"class":78},[68,164502,151111],{"class":1742},[68,164504,13923],{"class":78},[68,164506,152159],{"class":1742},[68,164508,34730],{"class":78},[68,164510,164511],{"class":70,"line":82},[68,164512,3890],{"emptyLinePlaceholder":1567},[68,164514,164515,164518,164520],{"class":70,"line":98},[68,164516,164517],{"class":78},"names.append(",[68,164519,160954],{"class":1742},[68,164521,1646],{"class":78},[68,164523,164524,164527,164529,164531,164534],{"class":70,"line":104},[68,164525,164526],{"class":78},"names.insert(",[68,164528,1846],{"class":85},[68,164530,13923],{"class":78},[68,164532,164533],{"class":1742},"\"小李\"",[68,164535,1646],{"class":78},[68,164537,164538,164541,164543,164545,164548],{"class":70,"line":112},[68,164539,164540],{"class":78},"names.extend([",[68,164542,10172],{"class":1742},[68,164544,13923],{"class":78},[68,164546,164547],{"class":1742},"\"小赵\"",[68,164549,6147],{"class":78},[68,164551,164552],{"class":70,"line":124},[68,164553,3890],{"emptyLinePlaceholder":1567},[68,164555,164556,164558],{"class":70,"line":1496},[68,164557,31899],{"class":85},[68,164559,164560],{"class":78},"(names)\n",[170,164562,164563],{},"删除元素：",[58,164565,164567],{"className":31862,"code":164566,"language":31864,"meta":63,"style":63},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[65,164568,164569,164578,164588,164602,164614],{"__ignoreMap":63},[68,164570,164571,164574,164576],{"class":70,"line":71},[68,164572,164573],{"class":78},"names.remove(",[68,164575,152159],{"class":1742},[68,164577,1646],{"class":78},[68,164579,164580,164583,164585],{"class":70,"line":82},[68,164581,164582],{"class":78},"last ",[68,164584,1685],{"class":316},[68,164586,164587],{"class":78}," names.pop()\n",[68,164589,164590,164593,164595,164598,164600],{"class":70,"line":98},[68,164591,164592],{"class":78},"first ",[68,164594,1685],{"class":316},[68,164596,164597],{"class":78}," names.pop(",[68,164599,1248],{"class":85},[68,164601,1646],{"class":78},[68,164603,164604,164607,164610,164612],{"class":70,"line":104},[68,164605,164606],{"class":316},"del",[68,164608,164609],{"class":78}," names[",[68,164611,1248],{"class":85},[68,164613,34730],{"class":78},[68,164615,164616],{"class":70,"line":112},[68,164617,164618],{"class":78},"names.clear()\n",[170,164620,164621],{},"查询和统计：",[58,164623,164625],{"className":31862,"code":164624,"language":31864,"meta":63,"style":63},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[65,164626,164627,164655,164659,164670,164681],{"__ignoreMap":63},[68,164628,164629,164631,164633,164635,164637,164639,164641,164643,164645,164647,164649,164651,164653],{"class":70,"line":71},[68,164630,164306],{"class":78},[68,164632,1685],{"class":316},[68,164634,53708],{"class":78},[68,164636,1846],{"class":85},[68,164638,13923],{"class":78},[68,164640,1715],{"class":85},[68,164642,13923],{"class":78},[68,164644,1709],{"class":85},[68,164646,13923],{"class":78},[68,164648,1715],{"class":85},[68,164650,13923],{"class":78},[68,164652,1922],{"class":85},[68,164654,34730],{"class":78},[68,164656,164657],{"class":70,"line":82},[68,164658,3890],{"emptyLinePlaceholder":1567},[68,164660,164661,164663,164666,164668],{"class":70,"line":98},[68,164662,31899],{"class":85},[68,164664,164665],{"class":78},"(numbers.index(",[68,164667,1709],{"class":85},[68,164669,31981],{"class":78},[68,164671,164672,164674,164677,164679],{"class":70,"line":104},[68,164673,31899],{"class":85},[68,164675,164676],{"class":78},"(numbers.count(",[68,164678,1715],{"class":85},[68,164680,31981],{"class":78},[68,164682,164683,164685,164687,164689],{"class":70,"line":112},[68,164684,31899],{"class":85},[68,164686,1640],{"class":78},[68,164688,8847],{"class":85},[68,164690,164691],{"class":78},"(numbers))\n",[170,164693,164694],{},"排序：",[58,164696,164698],{"className":31862,"code":164697,"language":31864,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[65,164699,164700,164724,164728,164733,164740,164744,164758,164764,164768,164773],{"__ignoreMap":63},[68,164701,164702,164704,164706,164708,164710,164712,164714,164716,164718,164720,164722],{"class":70,"line":71},[68,164703,164306],{"class":78},[68,164705,1685],{"class":316},[68,164707,53708],{"class":78},[68,164709,1709],{"class":85},[68,164711,13923],{"class":78},[68,164713,1846],{"class":85},[68,164715,13923],{"class":78},[68,164717,1948],{"class":85},[68,164719,13923],{"class":78},[68,164721,1715],{"class":85},[68,164723,34730],{"class":78},[68,164725,164726],{"class":70,"line":82},[68,164727,3890],{"emptyLinePlaceholder":1567},[68,164729,164730],{"class":70,"line":98},[68,164731,164732],{"class":78},"numbers.sort()\n",[68,164734,164735,164737],{"class":70,"line":104},[68,164736,31899],{"class":85},[68,164738,164739],{"class":78},"(numbers)\n",[68,164741,164742],{"class":70,"line":112},[68,164743,3890],{"emptyLinePlaceholder":1567},[68,164745,164746,164749,164752,164754,164756],{"class":70,"line":124},[68,164747,164748],{"class":78},"numbers.sort(",[68,164750,164751],{"class":6705},"reverse",[68,164753,1685],{"class":316},[68,164755,32960],{"class":85},[68,164757,1646],{"class":78},[68,164759,164760,164762],{"class":70,"line":1496},[68,164761,31899],{"class":85},[68,164763,164739],{"class":78},[68,164765,164766],{"class":70,"line":1502},[68,164767,3890],{"emptyLinePlaceholder":1567},[68,164769,164770],{"class":70,"line":1510},[68,164771,164772],{"class":78},"numbers.reverse()\n",[68,164774,164775,164777],{"class":70,"line":1521},[68,164776,31899],{"class":85},[68,164778,164739],{"class":78},[170,164780,164781,164784,164785,164788],{},[65,164782,164783],{},"sort()"," 会修改原列表，",[65,164786,164787],{},"sorted()"," 返回新列表。",[58,164790,164792],{"className":31862,"code":164791,"language":31864,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[65,164793,164794,164818,164830,164834,164840],{"__ignoreMap":63},[68,164795,164796,164798,164800,164802,164804,164806,164808,164810,164812,164814,164816],{"class":70,"line":71},[68,164797,164306],{"class":78},[68,164799,1685],{"class":316},[68,164801,53708],{"class":78},[68,164803,1709],{"class":85},[68,164805,13923],{"class":78},[68,164807,1846],{"class":85},[68,164809,13923],{"class":78},[68,164811,1948],{"class":85},[68,164813,13923],{"class":78},[68,164815,1715],{"class":85},[68,164817,34730],{"class":78},[68,164819,164820,164823,164825,164828],{"class":70,"line":82},[68,164821,164822],{"class":78},"new_numbers ",[68,164824,1685],{"class":316},[68,164826,164827],{"class":85}," sorted",[68,164829,164739],{"class":78},[68,164831,164832],{"class":70,"line":98},[68,164833,3890],{"emptyLinePlaceholder":1567},[68,164835,164836,164838],{"class":70,"line":104},[68,164837,31899],{"class":85},[68,164839,164739],{"class":78},[68,164841,164842,164844],{"class":70,"line":112},[68,164843,31899],{"class":85},[68,164845,164846],{"class":78},"(new_numbers)\n",[14,164848,164850],{"id":164849},"_65-列表遍历","6.5 列表遍历",[58,164852,164854],{"className":31862,"code":164853,"language":31864,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[65,164855,164856,164876,164880,164890],{"__ignoreMap":63},[68,164857,164858,164860,164862,164864,164866,164868,164870,164872,164874],{"class":70,"line":71},[68,164859,161603],{"class":78},[68,164861,1685],{"class":316},[68,164863,53708],{"class":78},[68,164865,151111],{"class":1742},[68,164867,13923],{"class":78},[68,164869,152159],{"class":1742},[68,164871,13923],{"class":78},[68,164873,160954],{"class":1742},[68,164875,34730],{"class":78},[68,164877,164878],{"class":70,"line":82},[68,164879,3890],{"emptyLinePlaceholder":1567},[68,164881,164882,164884,164886,164888],{"class":70,"line":98},[68,164883,4515],{"class":316},[68,164885,161639],{"class":78},[68,164887,27529],{"class":316},[68,164889,161644],{"class":78},[68,164891,164892,164894],{"class":70,"line":104},[68,164893,32783],{"class":85},[68,164895,151883],{"class":78},[170,164897,164898],{},"需要索引时：",[58,164900,164902],{"className":31862,"code":164901,"language":31864,"meta":63,"style":63},"for index, name in enumerate(names):\n    print(index, name)\n",[65,164903,164904,164918],{"__ignoreMap":63},[68,164905,164906,164908,164911,164913,164915],{"class":70,"line":71},[68,164907,4515],{"class":316},[68,164909,164910],{"class":78}," index, name ",[68,164912,27529],{"class":316},[68,164914,33090],{"class":85},[68,164916,164917],{"class":78},"(names):\n",[68,164919,164920,164922],{"class":70,"line":82},[68,164921,32783],{"class":85},[68,164923,164924],{"class":78},"(index, name)\n",[170,164926,164927],{},"统计总分：",[58,164929,164931],{"className":31862,"code":164930,"language":31864,"meta":63,"style":63},"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",[65,164932,164933,164958,164966,164970,164981,164989,164993,165010],{"__ignoreMap":63},[68,164934,164935,164938,164940,164942,164944,164946,164948,164950,164952,164954,164956],{"class":70,"line":71},[68,164936,164937],{"class":78},"scores ",[68,164939,1685],{"class":316},[68,164941,53708],{"class":78},[68,164943,2489],{"class":85},[68,164945,13923],{"class":78},[68,164947,2363],{"class":85},[68,164949,13923],{"class":78},[68,164951,1883],{"class":85},[68,164953,13923],{"class":78},[68,164955,2189],{"class":85},[68,164957,34730],{"class":78},[68,164959,164960,164962,164964],{"class":70,"line":82},[68,164961,158483],{"class":78},[68,164963,1685],{"class":316},[68,164965,48817],{"class":85},[68,164967,164968],{"class":70,"line":98},[68,164969,3890],{"emptyLinePlaceholder":1567},[68,164971,164972,164974,164976,164978],{"class":70,"line":104},[68,164973,4515],{"class":316},[68,164975,159006],{"class":78},[68,164977,27529],{"class":316},[68,164979,164980],{"class":78}," scores:\n",[68,164982,164983,164985,164987],{"class":70,"line":112},[68,164984,160530],{"class":78},[68,164986,10965],{"class":316},[68,164988,3070],{"class":78},[68,164990,164991],{"class":70,"line":124},[68,164992,3890],{"emptyLinePlaceholder":1567},[68,164994,164995,164998,165000,165003,165005,165007],{"class":70,"line":1496},[68,164996,164997],{"class":78},"avg ",[68,164999,1685],{"class":316},[68,165001,165002],{"class":78}," total ",[68,165004,2212],{"class":316},[68,165006,8820],{"class":85},[68,165008,165009],{"class":78},"(scores)\n",[68,165011,165012,165014,165016,165018,165021,165023,165026,165028,165030,165032],{"class":70,"line":1502},[68,165013,31899],{"class":85},[68,165015,1640],{"class":78},[68,165017,1691],{"class":316},[68,165019,165020],{"class":1742},"\"平均分:",[68,165022,2523],{"class":85},[68,165024,165025],{"class":78},"avg",[68,165027,158382],{"class":316},[68,165029,2573],{"class":85},[68,165031,1880],{"class":1742},[68,165033,1646],{"class":78},[14,165035,165037],{"id":165036},"_66-元组tuple","6.6 元组tuple",[170,165039,165040],{},"元组和列表类似，但不可修改。",[58,165042,165044],{"className":31862,"code":165043,"language":31864,"meta":63,"style":63},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[65,165045,165046,165063],{"__ignoreMap":63},[68,165047,165048,165051,165053,165055,165057,165059,165061],{"class":70,"line":71},[68,165049,165050],{"class":78},"point ",[68,165052,1685],{"class":316},[68,165054,3149],{"class":78},[68,165056,313],{"class":85},[68,165058,13923],{"class":78},[68,165060,333],{"class":85},[68,165062,1646],{"class":78},[68,165064,165065,165067,165069,165071,165073,165075,165077,165079,165081],{"class":70,"line":82},[68,165066,117788],{"class":78},[68,165068,1685],{"class":316},[68,165070,3149],{"class":78},[68,165072,151111],{"class":1742},[68,165074,13923],{"class":78},[68,165076,2278],{"class":85},[68,165078,13923],{"class":78},[68,165080,70747],{"class":1742},[68,165082,1646],{"class":78},[170,165084,165085],{},"单元素元组必须加逗号：",[58,165087,165089],{"className":31862,"code":165088,"language":31864,"meta":63,"style":63},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[65,165090,165091,165105,165118,165122,165136],{"__ignoreMap":63},[68,165092,165093,165096,165098,165100,165102],{"class":70,"line":71},[68,165094,165095],{"class":78},"t1 ",[68,165097,1685],{"class":316},[68,165099,3149],{"class":78},[68,165101,313],{"class":85},[68,165103,165104],{"class":78},",)\n",[68,165106,165107,165110,165112,165114,165116],{"class":70,"line":82},[68,165108,165109],{"class":78},"t2 ",[68,165111,1685],{"class":316},[68,165113,3149],{"class":78},[68,165115,313],{"class":85},[68,165117,1646],{"class":78},[68,165119,165120],{"class":70,"line":98},[68,165121,3890],{"emptyLinePlaceholder":1567},[68,165123,165124,165126,165128,165130,165133],{"class":70,"line":104},[68,165125,31899],{"class":85},[68,165127,1640],{"class":78},[68,165129,104582],{"class":85},[68,165131,165132],{"class":78},"(t1))  ",[68,165134,165135],{"class":302},"# tuple\n",[68,165137,165138,165140,165142,165144,165147],{"class":70,"line":112},[68,165139,31899],{"class":85},[68,165141,1640],{"class":78},[68,165143,104582],{"class":85},[68,165145,165146],{"class":78},"(t2))  ",[68,165148,165149],{"class":302},"# int\n",[170,165151,165152],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165154,165156],{"id":165155},"_67-字符串str","6.7 字符串str",[170,165158,165159],{},"字符串也是序列，可以索引、切片和遍历。",[58,165161,165163],{"className":31862,"code":165162,"language":31864,"meta":63,"style":63},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[65,165164,165165,165173,165177,165188,165200,165204,165215],{"__ignoreMap":63},[68,165166,165167,165169,165171],{"class":70,"line":71},[68,165168,157667],{"class":78},[68,165170,1685],{"class":316},[68,165172,160904],{"class":1742},[68,165174,165175],{"class":70,"line":82},[68,165176,3890],{"emptyLinePlaceholder":1567},[68,165178,165179,165181,165184,165186],{"class":70,"line":98},[68,165180,31899],{"class":85},[68,165182,165183],{"class":78},"(text[",[68,165185,1248],{"class":85},[68,165187,6147],{"class":78},[68,165189,165190,165192,165194,165196,165198],{"class":70,"line":104},[68,165191,31899],{"class":85},[68,165193,165183],{"class":78},[68,165195,2160],{"class":316},[68,165197,1846],{"class":85},[68,165199,6147],{"class":78},[68,165201,165202],{"class":70,"line":112},[68,165203,3890],{"emptyLinePlaceholder":1567},[68,165205,165206,165208,165210,165212],{"class":70,"line":124},[68,165207,4515],{"class":316},[68,165209,160915],{"class":78},[68,165211,27529],{"class":316},[68,165213,165214],{"class":78}," text:\n",[68,165216,165217,165219],{"class":70,"line":1496},[68,165218,32783],{"class":85},[68,165220,160926],{"class":78},[170,165222,165223],{},"字符串不可变：",[58,165225,165227],{"className":31862,"code":165226,"language":31864,"meta":63,"style":63},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[65,165228,165229,165237],{"__ignoreMap":63},[68,165230,165231,165233,165235],{"class":70,"line":71},[68,165232,157667],{"class":78},[68,165234,1685],{"class":316},[68,165236,160904],{"class":1742},[68,165238,165239,165242,165244,165246,165248,165251],{"class":70,"line":82},[68,165240,165241],{"class":78},"text[",[68,165243,1248],{"class":85},[68,165245,5933],{"class":78},[68,165247,1685],{"class":316},[68,165249,165250],{"class":1742}," \"P\"",[68,165252,165253],{"class":302},"  # 报错\n",[170,165255,165256],{},"如果要得到新字符串：",[58,165258,165260],{"className":31862,"code":165259,"language":31864,"meta":63,"style":63},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[65,165261,165262,165270,165288],{"__ignoreMap":63},[68,165263,165264,165266,165268],{"class":70,"line":71},[68,165265,157667],{"class":78},[68,165267,1685],{"class":316},[68,165269,160904],{"class":1742},[68,165271,165272,165274,165276,165278,165280,165283,165285],{"class":70,"line":82},[68,165273,157667],{"class":78},[68,165275,1685],{"class":316},[68,165277,165250],{"class":1742},[68,165279,47050],{"class":316},[68,165281,165282],{"class":78}," text[",[68,165284,1846],{"class":85},[68,165286,165287],{"class":78},":]\n",[68,165289,165290,165292],{"class":70,"line":98},[68,165291,31899],{"class":85},[68,165293,165294],{"class":78},"(text)\n",[14,165296,165298],{"id":165297},"_68-切片","6.8 切片",[170,165300,165301],{},"切片用于从序列中取一部分。",[58,165303,165305],{"className":31862,"code":165304,"language":31864,"meta":63,"style":63},"序列[开始:结束:步长]\n",[65,165306,165307],{"__ignoreMap":63},[68,165308,165309],{"class":70,"line":71},[68,165310,165304],{"class":78},[170,165312,165313],{},"结束位置不包含。",[58,165315,165317],{"className":31862,"code":165316,"language":31864,"meta":63,"style":63},"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",[65,165318,165319,165356,165360,165379,165394,165408,165422],{"__ignoreMap":63},[68,165320,165321,165324,165326,165328,165330,165332,165334,165336,165338,165340,165342,165344,165346,165348,165350,165352,165354],{"class":70,"line":71},[68,165322,165323],{"class":78},"nums ",[68,165325,1685],{"class":316},[68,165327,53708],{"class":78},[68,165329,1248],{"class":85},[68,165331,13923],{"class":78},[68,165333,1846],{"class":85},[68,165335,13923],{"class":78},[68,165337,1715],{"class":85},[68,165339,13923],{"class":78},[68,165341,1709],{"class":85},[68,165343,13923],{"class":78},[68,165345,1922],{"class":85},[68,165347,13923],{"class":78},[68,165349,1948],{"class":85},[68,165351,13923],{"class":78},[68,165353,1973],{"class":85},[68,165355,34730],{"class":78},[68,165357,165358],{"class":70,"line":82},[68,165359,3890],{"emptyLinePlaceholder":1567},[68,165361,165362,165364,165367,165369,165371,165373,165376],{"class":70,"line":98},[68,165363,31899],{"class":85},[68,165365,165366],{"class":78},"(nums[",[68,165368,1846],{"class":85},[68,165370,2486],{"class":78},[68,165372,1922],{"class":85},[68,165374,165375],{"class":78},"])    ",[68,165377,165378],{"class":302},"# [1, 2, 3]\n",[68,165380,165381,165383,165386,165388,165391],{"class":70,"line":104},[68,165382,31899],{"class":85},[68,165384,165385],{"class":78},"(nums[:",[68,165387,1709],{"class":85},[68,165389,165390],{"class":78},"])     ",[68,165392,165393],{"class":302},"# [0, 1, 2]\n",[68,165395,165396,165398,165400,165402,165405],{"class":70,"line":112},[68,165397,31899],{"class":85},[68,165399,165366],{"class":78},[68,165401,1709],{"class":85},[68,165403,165404],{"class":78},":])     ",[68,165406,165407],{"class":302},"# [3, 4, 5, 6]\n",[68,165409,165410,165412,165415,165417,165419],{"class":70,"line":124},[68,165411,31899],{"class":85},[68,165413,165414],{"class":78},"(nums[::",[68,165416,1715],{"class":85},[68,165418,165375],{"class":78},[68,165420,165421],{"class":302},"# [0, 2, 4, 6]\n",[68,165423,165424,165426,165428,165430,165432,165435],{"class":70,"line":1496},[68,165425,31899],{"class":85},[68,165427,165414],{"class":78},[68,165429,2160],{"class":316},[68,165431,1846],{"class":85},[68,165433,165434],{"class":78},"])   ",[68,165436,165437],{"class":302},"# 反转\n",[170,165439,165440],{},"字符串切片：",[58,165442,165444],{"className":31862,"code":165443,"language":31864,"meta":63,"style":63},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[65,165445,165446,165455,165469],{"__ignoreMap":63},[68,165447,165448,165450,165452],{"class":70,"line":71},[68,165449,157667],{"class":78},[68,165451,1685],{"class":316},[68,165453,165454],{"class":1742}," \"abcdef\"\n",[68,165456,165457,165459,165461,165463,165465,165467],{"class":70,"line":82},[68,165458,31899],{"class":85},[68,165460,165183],{"class":78},[68,165462,1846],{"class":85},[68,165464,2486],{"class":78},[68,165466,1922],{"class":85},[68,165468,6147],{"class":78},[68,165470,165471,165473,165476,165478,165480],{"class":70,"line":98},[68,165472,31899],{"class":85},[68,165474,165475],{"class":78},"(text[::",[68,165477,2160],{"class":316},[68,165479,1846],{"class":85},[68,165481,6147],{"class":78},[14,165483,165485],{"id":165484},"_69-集合set","6.9 集合set",[170,165487,165488],{},"集合特点：",[263,165490,165491,165494,165497],{},[27,165492,165493],{},"无序。",[27,165495,165496],{},"元素不重复。",[27,165498,165499],{},"可以做交集、并集、差集。",[58,165501,165503],{"className":31862,"code":165502,"language":31864,"meta":63,"style":63},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[65,165504,165505,165533],{"__ignoreMap":63},[68,165506,165507,165509,165511,165513,165515,165517,165519,165521,165523,165525,165527,165529,165531],{"class":70,"line":71},[68,165508,165323],{"class":78},[68,165510,1685],{"class":316},[68,165512,5938],{"class":78},[68,165514,1846],{"class":85},[68,165516,13923],{"class":78},[68,165518,1715],{"class":85},[68,165520,13923],{"class":78},[68,165522,1709],{"class":85},[68,165524,13923],{"class":78},[68,165526,1709],{"class":85},[68,165528,13923],{"class":78},[68,165530,1922],{"class":85},[68,165532,101],{"class":78},[68,165534,165535,165537],{"class":70,"line":82},[68,165536,31899],{"class":85},[68,165538,165539],{"class":78},"(nums)\n",[170,165541,165542],{},"创建空集合：",[58,165544,165546],{"className":31862,"code":165545,"language":31864,"meta":63,"style":63},"s = set()\n",[65,165547,165548],{"__ignoreMap":63},[68,165549,165550,165552,165554,165556],{"class":70,"line":71},[68,165551,12067],{"class":78},[68,165553,1685],{"class":316},[68,165555,121196],{"class":85},[68,165557,3466],{"class":78},[170,165559,1106,165560,165562],{},[65,165561,33943],{}," 是空字典，不是空集合。",[170,165564,165565],{},"集合常用操作：",[58,165567,165569],{"className":31862,"code":165568,"language":31864,"meta":63,"style":63},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[65,165570,165571,165591,165595,165604,165613,165622],{"__ignoreMap":63},[68,165572,165573,165575,165577,165579,165581,165583,165585,165587,165589],{"class":70,"line":71},[68,165574,12067],{"class":78},[68,165576,1685],{"class":316},[68,165578,5938],{"class":78},[68,165580,1846],{"class":85},[68,165582,13923],{"class":78},[68,165584,1715],{"class":85},[68,165586,13923],{"class":78},[68,165588,1709],{"class":85},[68,165590,101],{"class":78},[68,165592,165593],{"class":70,"line":82},[68,165594,3890],{"emptyLinePlaceholder":1567},[68,165596,165597,165600,165602],{"class":70,"line":98},[68,165598,165599],{"class":78},"s.add(",[68,165601,1922],{"class":85},[68,165603,1646],{"class":78},[68,165605,165606,165609,165611],{"class":70,"line":104},[68,165607,165608],{"class":78},"s.remove(",[68,165610,1715],{"class":85},[68,165612,1646],{"class":78},[68,165614,165615,165618,165620],{"class":70,"line":112},[68,165616,165617],{"class":78},"s.discard(",[68,165619,313],{"class":85},[68,165621,1646],{"class":78},[68,165623,165624,165626,165628,165630],{"class":70,"line":124},[68,165625,31899],{"class":85},[68,165627,1640],{"class":78},[68,165629,8847],{"class":85},[68,165631,165632],{"class":78},"(s))\n",[170,165634,165635],{},"交并差：",[58,165637,165639],{"className":31862,"code":165638,"language":31864,"meta":63,"style":63},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[65,165640,165641,165661,165681,165685,165700,165713],{"__ignoreMap":63},[68,165642,165643,165645,165647,165649,165651,165653,165655,165657,165659],{"class":70,"line":71},[68,165644,12407],{"class":78},[68,165646,1685],{"class":316},[68,165648,5938],{"class":78},[68,165650,1846],{"class":85},[68,165652,13923],{"class":78},[68,165654,1715],{"class":85},[68,165656,13923],{"class":78},[68,165658,1709],{"class":85},[68,165660,101],{"class":78},[68,165662,165663,165665,165667,165669,165671,165673,165675,165677,165679],{"class":70,"line":82},[68,165664,12433],{"class":78},[68,165666,1685],{"class":316},[68,165668,5938],{"class":78},[68,165670,1709],{"class":85},[68,165672,13923],{"class":78},[68,165674,1922],{"class":85},[68,165676,13923],{"class":78},[68,165678,1948],{"class":85},[68,165680,101],{"class":78},[68,165682,165683],{"class":70,"line":98},[68,165684,3890],{"emptyLinePlaceholder":1567},[68,165686,165687,165689,165692,165694,165697],{"class":70,"line":104},[68,165688,31899],{"class":85},[68,165690,165691],{"class":78},"(a ",[68,165693,1982],{"class":316},[68,165695,165696],{"class":78}," b)  ",[68,165698,165699],{"class":302},"# 交集\n",[68,165701,165702,165704,165706,165708,165710],{"class":70,"line":112},[68,165703,31899],{"class":85},[68,165705,165691],{"class":78},[68,165707,2548],{"class":316},[68,165709,165696],{"class":78},[68,165711,165712],{"class":302},"# 并集\n",[68,165714,165715,165717,165719,165721,165723],{"class":70,"line":124},[68,165716,31899],{"class":85},[68,165718,165691],{"class":78},[68,165720,2160],{"class":316},[68,165722,165696],{"class":78},[68,165724,165725],{"class":302},"# 差集\n",[14,165727,165729],{"id":165728},"_610-字典dict","6.10 字典dict",[170,165731,165732],{},"字典通过 key-value 保存数据。",[58,165734,165736],{"className":31862,"code":165735,"language":31864,"meta":63,"style":63},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[65,165737,165738,165746,165756,165767,165777],{"__ignoreMap":63},[68,165739,165740,165742,165744],{"class":70,"line":71},[68,165741,150704],{"class":78},[68,165743,1685],{"class":316},[68,165745,79],{"class":78},[68,165747,165748,165750,165752,165754],{"class":70,"line":82},[68,165749,148243],{"class":1742},[68,165751,89],{"class":78},[68,165753,151111],{"class":1742},[68,165755,32950],{"class":78},[68,165757,165758,165761,165763,165765],{"class":70,"line":98},[68,165759,165760],{"class":1742},"    \"age\"",[68,165762,89],{"class":78},[68,165764,2278],{"class":85},[68,165766,32950],{"class":78},[68,165768,165769,165772,165774],{"class":70,"line":104},[68,165770,165771],{"class":1742},"    \"score\"",[68,165773,89],{"class":78},[68,165775,165776],{"class":85},"95\n",[68,165778,165779],{"class":70,"line":112},[68,165780,101],{"class":78},[170,165782,165783],{},"获取值：",[58,165785,165787],{"className":31862,"code":165786,"language":31864,"meta":63,"style":63},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[65,165788,165789,165800],{"__ignoreMap":63},[68,165790,165791,165793,165796,165798],{"class":70,"line":71},[68,165792,31899],{"class":85},[68,165794,165795],{"class":78},"(student[",[68,165797,64157],{"class":1742},[68,165799,6147],{"class":78},[68,165801,165802,165804,165807,165809],{"class":70,"line":82},[68,165803,31899],{"class":85},[68,165805,165806],{"class":78},"(student.get(",[68,165808,64157],{"class":1742},[68,165810,31981],{"class":78},[170,165812,16876],{},[58,165814,165816],{"className":31862,"code":165815,"language":31864,"meta":63,"style":63},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[65,165817,165818,165831],{"__ignoreMap":63},[68,165819,165820,165822,165825,165828],{"class":70,"line":71},[68,165821,154082],{"class":78},[68,165823,165824],{"class":1742},"\"address\"",[68,165826,165827],{"class":78},"]     ",[68,165829,165830],{"class":302},"# key不存在会报错\n",[68,165832,165833,165836,165838,165840],{"class":70,"line":82},[68,165834,165835],{"class":78},"student.get(",[68,165837,165824],{"class":1742},[68,165839,15202],{"class":78},[68,165841,165842],{"class":302},"# key不存在返回None\n",[170,165844,165845],{},"设置默认值：",[58,165847,165849],{"className":31862,"code":165848,"language":31864,"meta":63,"style":63},"print(student.get(\"address\", \"未知\"))\n",[65,165850,165851],{"__ignoreMap":63},[68,165852,165853,165855,165857,165859,165861,165864],{"class":70,"line":71},[68,165854,31899],{"class":85},[68,165856,165806],{"class":78},[68,165858,165824],{"class":1742},[68,165860,13923],{"class":78},[68,165862,165863],{"class":1742},"\"未知\"",[68,165865,31981],{"class":78},[170,165867,165868],{},"新增和修改：",[58,165870,165872],{"className":31862,"code":165871,"language":31864,"meta":63,"style":63},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[65,165873,165874,165887],{"__ignoreMap":63},[68,165875,165876,165878,165880,165882,165884],{"class":70,"line":71},[68,165877,154082],{"class":78},[68,165879,70602],{"class":1742},[68,165881,5933],{"class":78},[68,165883,1685],{"class":316},[68,165885,165886],{"class":85}," 19\n",[68,165888,165889,165891,165893,165895,165897],{"class":70,"line":82},[68,165890,154082],{"class":78},[68,165892,165824],{"class":1742},[68,165894,5933],{"class":78},[68,165896,1685],{"class":316},[68,165898,165899],{"class":1742}," \"北京\"\n",[170,165901,165902],{},"删除：",[58,165904,165906],{"className":31862,"code":165905,"language":31864,"meta":63,"style":63},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[65,165907,165908,165921,165931],{"__ignoreMap":63},[68,165909,165910,165912,165914,165917,165919],{"class":70,"line":71},[68,165911,156581],{"class":78},[68,165913,1685],{"class":316},[68,165915,165916],{"class":78}," student.pop(",[68,165918,152695],{"class":1742},[68,165920,1646],{"class":78},[68,165922,165923,165925,165927,165929],{"class":70,"line":82},[68,165924,164606],{"class":316},[68,165926,153372],{"class":78},[68,165928,70602],{"class":1742},[68,165930,34730],{"class":78},[68,165932,165933],{"class":70,"line":98},[68,165934,165935],{"class":78},"student.clear()\n",[14,165937,165939],{"id":165938},"_611-字典遍历","6.11 字典遍历",[170,165941,165942],{},"遍历 key：",[58,165944,165946],{"className":31862,"code":165945,"language":31864,"meta":63,"style":63},"for key in student:\n    print(key, student[key])\n",[65,165947,165948,165960],{"__ignoreMap":63},[68,165949,165950,165952,165955,165957],{"class":70,"line":71},[68,165951,4515],{"class":316},[68,165953,165954],{"class":78}," key ",[68,165956,27529],{"class":316},[68,165958,165959],{"class":78}," student:\n",[68,165961,165962,165964],{"class":70,"line":82},[68,165963,32783],{"class":85},[68,165965,165966],{"class":78},"(key, student[key])\n",[170,165968,165969],{},"遍历 value：",[58,165971,165973],{"className":31862,"code":165972,"language":31864,"meta":63,"style":63},"for value in student.values():\n    print(value)\n",[65,165974,165975,165987],{"__ignoreMap":63},[68,165976,165977,165979,165982,165984],{"class":70,"line":71},[68,165978,4515],{"class":316},[68,165980,165981],{"class":78}," value ",[68,165983,27529],{"class":316},[68,165985,165986],{"class":78}," student.values():\n",[68,165988,165989,165991],{"class":70,"line":82},[68,165990,32783],{"class":85},[68,165992,165993],{"class":78},"(value)\n",[170,165995,165996],{},"遍历 key 和 value：",[58,165998,166000],{"className":31862,"code":165999,"language":31864,"meta":63,"style":63},"for key, value in student.items():\n    print(key, value)\n",[65,166001,166002,166014],{"__ignoreMap":63},[68,166003,166004,166006,166009,166011],{"class":70,"line":71},[68,166005,4515],{"class":316},[68,166007,166008],{"class":78}," key, value ",[68,166010,27529],{"class":316},[68,166012,166013],{"class":78}," student.items():\n",[68,166015,166016,166018],{"class":70,"line":82},[68,166017,32783],{"class":85},[68,166019,166020],{"class":78},"(key, value)\n",[14,166022,166024],{"id":166023},"_612-嵌套容器","6.12 嵌套容器",[170,166026,166027],{},"列表中保存字典，是项目中最常见的结构之一。",[58,166029,166031],{"className":31862,"code":166030,"language":31864,"meta":63,"style":63},"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",[65,166032,166033,166041,166069,166097,166125,166129,166133,166143],{"__ignoreMap":63},[68,166034,166035,166037,166039],{"class":70,"line":71},[68,166036,160939],{"class":78},[68,166038,1685],{"class":316},[68,166040,56925],{"class":78},[68,166042,166043,166045,166047,166049,166051,166053,166055,166057,166059,166061,166063,166065,166067],{"class":70,"line":82},[68,166044,149608],{"class":78},[68,166046,64157],{"class":1742},[68,166048,89],{"class":78},[68,166050,151111],{"class":1742},[68,166052,13923],{"class":78},[68,166054,70602],{"class":1742},[68,166056,89],{"class":78},[68,166058,2278],{"class":85},[68,166060,13923],{"class":78},[68,166062,152695],{"class":1742},[68,166064,89],{"class":78},[68,166066,2616],{"class":85},[68,166068,6420],{"class":78},[68,166070,166071,166073,166075,166077,166079,166081,166083,166085,166087,166089,166091,166093,166095],{"class":70,"line":98},[68,166072,149608],{"class":78},[68,166074,64157],{"class":1742},[68,166076,89],{"class":78},[68,166078,152159],{"class":1742},[68,166080,13923],{"class":78},[68,166082,70602],{"class":1742},[68,166084,89],{"class":78},[68,166086,2253],{"class":85},[68,166088,13923],{"class":78},[68,166090,152695],{"class":1742},[68,166092,89],{"class":78},[68,166094,2438],{"class":85},[68,166096,6420],{"class":78},[68,166098,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121,166123],{"class":70,"line":104},[68,166100,149608],{"class":78},[68,166102,64157],{"class":1742},[68,166104,89],{"class":78},[68,166106,160954],{"class":1742},[68,166108,13923],{"class":78},[68,166110,70602],{"class":1742},[68,166112,89],{"class":78},[68,166114,2303],{"class":85},[68,166116,13923],{"class":78},[68,166118,152695],{"class":1742},[68,166120,89],{"class":78},[68,166122,2035],{"class":85},[68,166124,6420],{"class":78},[68,166126,166127],{"class":70,"line":112},[68,166128,34730],{"class":78},[68,166130,166131],{"class":70,"line":124},[68,166132,3890],{"emptyLinePlaceholder":1567},[68,166134,166135,166137,166139,166141],{"class":70,"line":1496},[68,166136,4515],{"class":316},[68,166138,153360],{"class":78},[68,166140,27529],{"class":316},[68,166142,153365],{"class":78},[68,166144,166145,166147,166149,166151,166154,166156],{"class":70,"line":1502},[68,166146,32783],{"class":85},[68,166148,165795],{"class":78},[68,166150,64157],{"class":1742},[68,166152,166153],{"class":78},"], student[",[68,166155,152695],{"class":1742},[68,166157,6147],{"class":78},[170,166159,166160],{},"统计平均分：",[58,166162,166164],{"className":31862,"code":166163,"language":31864,"meta":63,"style":63},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[65,166165,166166,166174,166178,166188,166200,166204,166219],{"__ignoreMap":63},[68,166167,166168,166170,166172],{"class":70,"line":71},[68,166169,158483],{"class":78},[68,166171,1685],{"class":316},[68,166173,48817],{"class":85},[68,166175,166176],{"class":70,"line":82},[68,166177,3890],{"emptyLinePlaceholder":1567},[68,166179,166180,166182,166184,166186],{"class":70,"line":98},[68,166181,4515],{"class":316},[68,166183,153360],{"class":78},[68,166185,27529],{"class":316},[68,166187,153365],{"class":78},[68,166189,166190,166192,166194,166196,166198],{"class":70,"line":104},[68,166191,160530],{"class":78},[68,166193,10965],{"class":316},[68,166195,153372],{"class":78},[68,166197,152695],{"class":1742},[68,166199,34730],{"class":78},[68,166201,166202],{"class":70,"line":112},[68,166203,3890],{"emptyLinePlaceholder":1567},[68,166205,166206,166208,166210,166212,166214,166216],{"class":70,"line":124},[68,166207,164997],{"class":78},[68,166209,1685],{"class":316},[68,166211,165002],{"class":78},[68,166213,2212],{"class":316},[68,166215,8820],{"class":85},[68,166217,166218],{"class":78},"(students)\n",[68,166220,166221,166223,166225,166227,166229,166231,166233,166235,166237,166239],{"class":70,"line":1496},[68,166222,31899],{"class":85},[68,166224,1640],{"class":78},[68,166226,1691],{"class":316},[68,166228,165020],{"class":1742},[68,166230,2523],{"class":85},[68,166232,165025],{"class":78},[68,166234,158382],{"class":316},[68,166236,2573],{"class":85},[68,166238,1880],{"class":1742},[68,166240,1646],{"class":78},[170,166242,166243],{},"查找学生：",[58,166245,166247],{"className":31862,"code":166246,"language":31864,"meta":63,"style":63},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[65,166248,166249,166264,166268,166278,166292,166298,166302,166308],{"__ignoreMap":63},[68,166250,166251,166253,166255,166257,166259,166262],{"class":70,"line":71},[68,166252,113052],{"class":78},[68,166254,1685],{"class":316},[68,166256,62083],{"class":85},[68,166258,1640],{"class":78},[68,166260,166261],{"class":1742},"\"请输入学生姓名:\"",[68,166263,1646],{"class":78},[68,166265,166266],{"class":70,"line":82},[68,166267,3890],{"emptyLinePlaceholder":1567},[68,166269,166270,166272,166274,166276],{"class":70,"line":98},[68,166271,4515],{"class":316},[68,166273,153360],{"class":78},[68,166275,27529],{"class":316},[68,166277,153365],{"class":78},[68,166279,166280,166282,166284,166286,166288,166290],{"class":70,"line":104},[68,166281,4591],{"class":316},[68,166283,153372],{"class":78},[68,166285,64157],{"class":1742},[68,166287,5933],{"class":78},[68,166289,4439],{"class":316},[68,166291,161655],{"class":78},[68,166293,166294,166296],{"class":70,"line":112},[68,166295,33935],{"class":85},[68,166297,151265],{"class":78},[68,166299,166300],{"class":70,"line":124},[68,166301,33111],{"class":316},[68,166303,166304,166306],{"class":70,"line":1496},[68,166305,3192],{"class":316},[68,166307,5229],{"class":78},[68,166309,166310,166312,166314,166317],{"class":70,"line":1502},[68,166311,32783],{"class":85},[68,166313,1640],{"class":78},[68,166315,166316],{"class":1742},"\"没有找到\"",[68,166318,1646],{"class":78},[14,166320,166322],{"id":166321},"_613-容器通用操作","6.13 容器通用操作",[170,166324,166325],{},"长度：",[58,166327,166329],{"className":31862,"code":166328,"language":31864,"meta":63,"style":63},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[65,166330,166331,166350,166360],{"__ignoreMap":63},[68,166332,166333,166335,166338,166340,166342,166344,166346,166348],{"class":70,"line":71},[68,166334,8847],{"class":85},[68,166336,166337],{"class":78},"([",[68,166339,1846],{"class":85},[68,166341,13923],{"class":78},[68,166343,1715],{"class":85},[68,166345,13923],{"class":78},[68,166347,1709],{"class":85},[68,166349,6147],{"class":78},[68,166351,166352,166354,166356,166358],{"class":70,"line":82},[68,166353,8847],{"class":85},[68,166355,1640],{"class":78},[68,166357,157103],{"class":1742},[68,166359,1646],{"class":78},[68,166361,166362,166364,166367,166369,166371,166373],{"class":70,"line":98},[68,166363,8847],{"class":85},[68,166365,166366],{"class":78},"({",[68,166368,64157],{"class":1742},[68,166370,89],{"class":78},[68,166372,151111],{"class":1742},[68,166374,166375],{"class":78},"})\n",[170,166377,166378],{},"最大最小：",[58,166380,166382],{"className":31862,"code":166381,"language":31864,"meta":63,"style":63},"max([1, 2, 3])\nmin([1, 2, 3])\n",[65,166383,166384,166402],{"__ignoreMap":63},[68,166385,166386,166388,166390,166392,166394,166396,166398,166400],{"class":70,"line":71},[68,166387,7504],{"class":85},[68,166389,166337],{"class":78},[68,166391,1846],{"class":85},[68,166393,13923],{"class":78},[68,166395,1715],{"class":85},[68,166397,13923],{"class":78},[68,166399,1709],{"class":85},[68,166401,6147],{"class":78},[68,166403,166404,166407,166409,166411,166413,166415,166417,166419],{"class":70,"line":82},[68,166405,166406],{"class":85},"min",[68,166408,166337],{"class":78},[68,166410,1846],{"class":85},[68,166412,13923],{"class":78},[68,166414,1715],{"class":85},[68,166416,13923],{"class":78},[68,166418,1709],{"class":85},[68,166420,6147],{"class":78},[170,166422,166423],{},"求和：",[58,166425,166427],{"className":31862,"code":166426,"language":31864,"meta":63,"style":63},"sum([1, 2, 3])\n",[65,166428,166429],{"__ignoreMap":63},[68,166430,166431,166434,166436,166438,166440,166442,166444,166446],{"class":70,"line":71},[68,166432,166433],{"class":85},"sum",[68,166435,166337],{"class":78},[68,166437,1846],{"class":85},[68,166439,13923],{"class":78},[68,166441,1715],{"class":85},[68,166443,13923],{"class":78},[68,166445,1709],{"class":85},[68,166447,6147],{"class":78},[170,166449,164694],{},[58,166451,166453],{"className":31862,"code":166452,"language":31864,"meta":63,"style":63},"sorted([3, 1, 2])\n",[65,166454,166455],{"__ignoreMap":63},[68,166456,166457,166460,166462,166464,166466,166468,166470,166472],{"class":70,"line":71},[68,166458,166459],{"class":85},"sorted",[68,166461,166337],{"class":78},[68,166463,1709],{"class":85},[68,166465,13923],{"class":78},[68,166467,1846],{"class":85},[68,166469,13923],{"class":78},[68,166471,1715],{"class":85},[68,166473,6147],{"class":78},[170,166475,166476],{},"类型转换：",[58,166478,166480],{"className":31862,"code":166479,"language":31864,"meta":63,"style":63},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[65,166481,166482,166492,166510],{"__ignoreMap":63},[68,166483,166484,166486,166488,166490],{"class":70,"line":71},[68,166485,155293],{"class":85},[68,166487,1640],{"class":78},[68,166489,157103],{"class":1742},[68,166491,1646],{"class":78},[68,166493,166494,166496,166498,166500,166502,166504,166506,166508],{"class":70,"line":82},[68,166495,156488],{"class":85},[68,166497,166337],{"class":78},[68,166499,1846],{"class":85},[68,166501,13923],{"class":78},[68,166503,1715],{"class":85},[68,166505,13923],{"class":78},[68,166507,1709],{"class":85},[68,166509,6147],{"class":78},[68,166511,166512,166514,166516,166518,166520,166522,166524,166526,166528,166530],{"class":70,"line":98},[68,166513,156513],{"class":85},[68,166515,166337],{"class":78},[68,166517,1846],{"class":85},[68,166519,13923],{"class":78},[68,166521,1846],{"class":85},[68,166523,13923],{"class":78},[68,166525,1715],{"class":85},[68,166527,13923],{"class":78},[68,166529,1709],{"class":85},[68,166531,6147],{"class":78},[170,166533,166534],{},"成员判断：",[58,166536,166538],{"className":31862,"code":166537,"language":31864,"meta":63,"style":63},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[65,166539,166540,166557,166581],{"__ignoreMap":63},[68,166541,166542,166544,166546,166549,166552,166555],{"class":70,"line":71},[68,166543,31899],{"class":85},[68,166545,1640],{"class":78},[68,166547,166548],{"class":1742},"\"a\"",[68,166550,166551],{"class":316}," in",[68,166553,166554],{"class":1742}," \"abc\"",[68,166556,1646],{"class":78},[68,166558,166559,166561,166563,166565,166567,166569,166571,166573,166575,166577,166579],{"class":70,"line":82},[68,166560,31899],{"class":85},[68,166562,1640],{"class":78},[68,166564,1846],{"class":85},[68,166566,166551],{"class":316},[68,166568,53708],{"class":78},[68,166570,1846],{"class":85},[68,166572,13923],{"class":78},[68,166574,1715],{"class":85},[68,166576,13923],{"class":78},[68,166578,1709],{"class":85},[68,166580,6147],{"class":78},[68,166582,166583,166585,166587,166589,166591,166593,166595,166597,166599],{"class":70,"line":98},[68,166584,31899],{"class":85},[68,166586,1640],{"class":78},[68,166588,64157],{"class":1742},[68,166590,166551],{"class":316},[68,166592,5938],{"class":78},[68,166594,64157],{"class":1742},[68,166596,89],{"class":78},[68,166598,151111],{"class":1742},[68,166600,166375],{"class":78},[14,166602,166604],{"id":166603},"_614-推导式","6.14 推导式",[170,166606,166607],{},"推导式用于快速生成容器。",[170,166609,166610],{},"列表推导式：",[58,166612,166614],{"className":31862,"code":166613,"language":31864,"meta":63,"style":63},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[65,166615,166616,166643],{"__ignoreMap":63},[68,166617,166618,166620,166622,166625,166627,166629,166631,166633,166635,166637,166639,166641],{"class":70,"line":71},[68,166619,165323],{"class":78},[68,166621,1685],{"class":316},[68,166623,166624],{"class":78}," [i ",[68,166626,4515],{"class":316},[68,166628,10926],{"class":78},[68,166630,27529],{"class":316},[68,166632,33927],{"class":85},[68,166634,1640],{"class":78},[68,166636,1846],{"class":85},[68,166638,13923],{"class":78},[68,166640,1973],{"class":85},[68,166642,98775],{"class":78},[68,166644,166645,166647],{"class":70,"line":82},[68,166646,31899],{"class":85},[68,166648,165539],{"class":78},[170,166650,166651],{},"带条件：",[58,166653,166655],{"className":31862,"code":166654,"language":31864,"meta":63,"style":63},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[65,166656,166657,166698],{"__ignoreMap":63},[68,166658,166659,166662,166664,166666,166668,166670,166672,166674,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696],{"class":70,"line":71},[68,166660,166661],{"class":78},"even_nums ",[68,166663,1685],{"class":316},[68,166665,166624],{"class":78},[68,166667,4515],{"class":316},[68,166669,10926],{"class":78},[68,166671,27529],{"class":316},[68,166673,33927],{"class":85},[68,166675,1640],{"class":78},[68,166677,1846],{"class":85},[68,166679,13923],{"class":78},[68,166681,1966],{"class":85},[68,166683,15202],{"class":78},[68,166685,3023],{"class":316},[68,166687,10926],{"class":78},[68,166689,1957],{"class":316},[68,166691,16243],{"class":85},[68,166693,103034],{"class":316},[68,166695,5583],{"class":85},[68,166697,34730],{"class":78},[68,166699,166700,166702],{"class":70,"line":82},[68,166701,31899],{"class":85},[68,166703,166704],{"class":78},"(even_nums)\n",[170,166706,166707],{},"字典推导式：",[58,166709,166711],{"className":31862,"code":166710,"language":31864,"meta":63,"style":63},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[65,166712,166713,166747],{"__ignoreMap":63},[68,166714,166715,166718,166720,166723,166725,166727,166730,166732,166734,166736,166738,166740,166742,166744],{"class":70,"line":71},[68,166716,166717],{"class":78},"squares ",[68,166719,1685],{"class":316},[68,166721,166722],{"class":78}," {i: i ",[68,166724,12149],{"class":316},[68,166726,16243],{"class":85},[68,166728,166729],{"class":316}," for",[68,166731,10926],{"class":78},[68,166733,27529],{"class":316},[68,166735,33927],{"class":85},[68,166737,1640],{"class":78},[68,166739,1846],{"class":85},[68,166741,13923],{"class":78},[68,166743,1973],{"class":85},[68,166745,166746],{"class":78},")}\n",[68,166748,166749,166751],{"class":70,"line":82},[68,166750,31899],{"class":85},[68,166752,166753],{"class":78},"(squares)\n",[170,166755,166756],{},"集合推导式：",[58,166758,166760],{"className":31862,"code":166759,"language":31864,"meta":63,"style":63},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[65,166761,166762,166783],{"__ignoreMap":63},[68,166763,166764,166767,166769,166772,166774,166776,166778,166781],{"class":70,"line":71},[68,166765,166766],{"class":78},"chars ",[68,166768,1685],{"class":316},[68,166770,166771],{"class":78}," {ch ",[68,166773,4515],{"class":316},[68,166775,160915],{"class":78},[68,166777,27529],{"class":316},[68,166779,166780],{"class":1742}," \"hello\"",[68,166782,101],{"class":78},[68,166784,166785,166787],{"class":70,"line":82},[68,166786,31899],{"class":85},[68,166788,166789],{"class":78},"(chars)\n",[170,166791,166792],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166794,166796],{"id":166795},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[58,166798,166800],{"className":31862,"code":166799,"language":31864,"meta":63,"style":63},"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",[65,166801,166802,166810,166830,166850,166870,166890,166894,166898,166906,166920,166929,166933,166943,166955,166959,166979,166988,166992,167008,167013,167017,167031,167035,167057,167093],{"__ignoreMap":63},[68,166803,166804,166806,166808],{"class":70,"line":71},[68,166805,160939],{"class":78},[68,166807,1685],{"class":316},[68,166809,56925],{"class":78},[68,166811,166812,166814,166816,166818,166820,166822,166824,166826,166828],{"class":70,"line":82},[68,166813,149608],{"class":78},[68,166815,64157],{"class":1742},[68,166817,89],{"class":78},[68,166819,151111],{"class":1742},[68,166821,13923],{"class":78},[68,166823,152695],{"class":1742},[68,166825,89],{"class":78},[68,166827,2616],{"class":85},[68,166829,6420],{"class":78},[68,166831,166832,166834,166836,166838,166840,166842,166844,166846,166848],{"class":70,"line":98},[68,166833,149608],{"class":78},[68,166835,64157],{"class":1742},[68,166837,89],{"class":78},[68,166839,152159],{"class":1742},[68,166841,13923],{"class":78},[68,166843,152695],{"class":1742},[68,166845,89],{"class":78},[68,166847,2438],{"class":85},[68,166849,6420],{"class":78},[68,166851,166852,166854,166856,166858,166860,166862,166864,166866,166868],{"class":70,"line":104},[68,166853,149608],{"class":78},[68,166855,64157],{"class":1742},[68,166857,89],{"class":78},[68,166859,160954],{"class":1742},[68,166861,13923],{"class":78},[68,166863,152695],{"class":1742},[68,166865,89],{"class":78},[68,166867,2035],{"class":85},[68,166869,6420],{"class":78},[68,166871,166872,166874,166876,166878,166880,166882,166884,166886,166888],{"class":70,"line":112},[68,166873,149608],{"class":78},[68,166875,64157],{"class":1742},[68,166877,89],{"class":78},[68,166879,164533],{"class":1742},[68,166881,13923],{"class":78},[68,166883,152695],{"class":1742},[68,166885,89],{"class":78},[68,166887,2509],{"class":85},[68,166889,6420],{"class":78},[68,166891,166892],{"class":70,"line":124},[68,166893,34730],{"class":78},[68,166895,166896],{"class":70,"line":1496},[68,166897,3890],{"emptyLinePlaceholder":1567},[68,166899,166900,166902,166904],{"class":70,"line":1502},[68,166901,158483],{"class":78},[68,166903,1685],{"class":316},[68,166905,48817],{"class":85},[68,166907,166908,166911,166913,166916,166918],{"class":70,"line":1510},[68,166909,166910],{"class":78},"max_student ",[68,166912,1685],{"class":316},[68,166914,166915],{"class":78}," students[",[68,166917,1248],{"class":85},[68,166919,34730],{"class":78},[68,166921,166922,166925,166927],{"class":70,"line":1521},[68,166923,166924],{"class":78},"passed ",[68,166926,1685],{"class":316},[68,166928,53320],{"class":78},[68,166930,166931],{"class":70,"line":3103},[68,166932,3890],{"emptyLinePlaceholder":1567},[68,166934,166935,166937,166939,166941],{"class":70,"line":3108},[68,166936,4515],{"class":316},[68,166938,153360],{"class":78},[68,166940,27529],{"class":316},[68,166942,153365],{"class":78},[68,166944,166945,166947,166949,166951,166953],{"class":70,"line":3114},[68,166946,160530],{"class":78},[68,166948,10965],{"class":316},[68,166950,153372],{"class":78},[68,166952,152695],{"class":1742},[68,166954,34730],{"class":78},[68,166956,166957],{"class":70,"line":3119},[68,166958,3890],{"emptyLinePlaceholder":1567},[68,166960,166961,166963,166965,166967,166969,166971,166974,166976],{"class":70,"line":3133},[68,166962,4591],{"class":316},[68,166964,153372],{"class":78},[68,166966,152695],{"class":1742},[68,166968,5933],{"class":78},[68,166970,2587],{"class":316},[68,166972,166973],{"class":78}," max_student[",[68,166975,152695],{"class":1742},[68,166977,166978],{"class":78},"]:\n",[68,166980,166981,166984,166986],{"class":70,"line":3138},[68,166982,166983],{"class":78},"        max_student ",[68,166985,1685],{"class":316},[68,166987,153388],{"class":78},[68,166989,166990],{"class":70,"line":3144},[68,166991,3890],{"emptyLinePlaceholder":1567},[68,166993,166994,166996,166998,167000,167002,167004,167006],{"class":70,"line":3165},[68,166995,4591],{"class":316},[68,166997,153372],{"class":78},[68,166999,152695],{"class":1742},[68,167001,5933],{"class":78},[68,167003,3201],{"class":316},[68,167005,159060],{"class":85},[68,167007,5229],{"class":78},[68,167009,167010],{"class":70,"line":3170},[68,167011,167012],{"class":78},"        passed.append(student)\n",[68,167014,167015],{"class":70,"line":3184},[68,167016,3890],{"emptyLinePlaceholder":1567},[68,167018,167019,167021,167023,167025,167027,167029],{"class":70,"line":3189},[68,167020,164997],{"class":78},[68,167022,1685],{"class":316},[68,167024,165002],{"class":78},[68,167026,2212],{"class":316},[68,167028,8820],{"class":85},[68,167030,166218],{"class":78},[68,167032,167033],{"class":70,"line":3218},[68,167034,3890],{"emptyLinePlaceholder":1567},[68,167036,167037,167039,167041,167043,167045,167047,167049,167051,167053,167055],{"class":70,"line":3223},[68,167038,31899],{"class":85},[68,167040,1640],{"class":78},[68,167042,1691],{"class":316},[68,167044,165020],{"class":1742},[68,167046,2523],{"class":85},[68,167048,165025],{"class":78},[68,167050,158382],{"class":316},[68,167052,2573],{"class":85},[68,167054,1880],{"class":1742},[68,167056,1646],{"class":78},[68,167058,167059,167061,167063,167065,167068,167070,167073,167075,167077,167079,167081,167083,167085,167087,167089,167091],{"class":70,"line":3240},[68,167060,31899],{"class":85},[68,167062,1640],{"class":78},[68,167064,1691],{"class":316},[68,167066,167067],{"class":1742},"\"最高分学生:",[68,167069,2523],{"class":85},[68,167071,167072],{"class":78},"max_student[",[68,167074,154105],{"class":1742},[68,167076,2567],{"class":78},[68,167078,2573],{"class":85},[68,167080,5938],{"class":85},[68,167082,167072],{"class":78},[68,167084,154143],{"class":1742},[68,167086,2567],{"class":78},[68,167088,2573],{"class":85},[68,167090,1880],{"class":1742},[68,167092,1646],{"class":78},[68,167094,167095,167097,167099,167101,167104,167107,167110,167112,167114],{"class":70,"line":3245},[68,167096,31899],{"class":85},[68,167098,1640],{"class":78},[68,167100,1691],{"class":316},[68,167102,167103],{"class":1742},"\"及格人数:",[68,167105,167106],{"class":85},"{len",[68,167108,167109],{"class":78},"(passed)",[68,167111,2573],{"class":85},[68,167113,1880],{"class":1742},[68,167115,1646],{"class":78},[14,167117,167119],{"id":167118},"_616-易错点","6.16 易错点",[263,167121,167122,167125,167128,167131,167137,167146],{},[27,167123,167124],{},"列表可变，元组和字符串不可变。",[27,167126,167127],{},"切片结束位置不包含。",[27,167129,167130],{},"字典通过 key 取值，不是通过索引。",[27,167132,167133,167134,29869],{},"空集合要用 ",[65,167135,167136],{},"set()",[27,167138,105841,167139,167142,167143,29869],{},[65,167140,167141],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[65,167144,167145],{},"get()",[27,167147,167148],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167150,167152],{"id":167151},"_617-本章练习","6.17 本章练习",[263,167154,167155,167158,167161,167164,167167],{},[27,167156,167157],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[27,167159,167160],{},"输入一句话，统计每个字符出现次数。",[27,167162,167163],{},"使用集合去除列表中的重复元素。",[27,167165,167166],{},"使用字典保存一个学生的信息，并实现修改成绩。",[27,167168,167169],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1553,167171,167172],{},"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":63,"searchDepth":82,"depth":82,"links":167174},[167175,167176,167177,167178,167179,167180,167181,167182,167183,167184,167185,167186,167187,167188,167189,167190,167191],{"id":164155,"depth":82,"text":164156},{"id":164272,"depth":82,"text":164273},{"id":164362,"depth":82,"text":164363},{"id":164486,"depth":82,"text":164487},{"id":164849,"depth":82,"text":164850},{"id":165036,"depth":82,"text":165037},{"id":165155,"depth":82,"text":165156},{"id":165297,"depth":82,"text":165298},{"id":165484,"depth":82,"text":165485},{"id":165728,"depth":82,"text":165729},{"id":165938,"depth":82,"text":165939},{"id":166023,"depth":82,"text":166024},{"id":166321,"depth":82,"text":166322},{"id":166603,"depth":82,"text":166604},{"id":166795,"depth":82,"text":166796},{"id":167118,"depth":82,"text":167119},{"id":167151,"depth":82,"text":167152},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164147,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167198,"title":167199,"body":167200,"description":1564,"extension":1565,"meta":169372,"navigation":1567,"path":169373,"seo":169374,"stem":169375,"__hash__":169376},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167201,"toc":169347},[167202,167205,167209,167212,167292,167295,167316,167319,167323,167326,167388,167391,167408,167412,167415,167460,167462,167470,167474,167477,167559,167562,167565,167590,167593,167616,167620,167623,167625,167687,167690,167692,167743,167747,167751,167757,167862,167866,167872,167943,167947,167950,168018,168021,168101,168105,168111,168147,168150,168153,168263,168269,168273,168276,168348,168351,168355,168359,168364,168426,168430,168435,168503,168507,168512,168628,168632,168635,168715,168718,168722,168725,168829,168831,168846,168849,168853,168991,168999,169003,169005,169016,169018,169276,169280,169312,169316,169344],[10,167203,167199],{"id":167204},"_7-函数进阶",[14,167206,167208],{"id":167207},"_71-多返回值","7.1 多返回值",[170,167210,167211],{},"Python 函数可以返回多个值，本质上返回的是元组。",[58,167213,167215],{"className":31862,"code":167214,"language":31864,"meta":63,"style":63},"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",[65,167216,167217,167226,167234,167242,167251,167258,167262,167266,167275,167281],{"__ignoreMap":63},[68,167218,167219,167221,167224],{"class":70,"line":71},[68,167220,33431],{"class":316},[68,167222,167223],{"class":74}," get_info",[68,167225,33437],{"class":78},[68,167227,167228,167230,167232],{"class":70,"line":82},[68,167229,153593],{"class":78},[68,167231,1685],{"class":316},[68,167233,150576],{"class":1742},[68,167235,167236,167238,167240],{"class":70,"line":98},[68,167237,153609],{"class":78},[68,167239,1685],{"class":316},[68,167241,147774],{"class":85},[68,167243,167244,167246,167248],{"class":70,"line":104},[68,167245,153624],{"class":78},[68,167247,1685],{"class":316},[68,167249,167250],{"class":85}," 95\n",[68,167252,167253,167255],{"class":70,"line":112},[68,167254,5580],{"class":316},[68,167256,167257],{"class":78}," name, age, score\n",[68,167259,167260],{"class":70,"line":124},[68,167261,3890],{"emptyLinePlaceholder":1567},[68,167263,167264],{"class":70,"line":1496},[68,167265,3890],{"emptyLinePlaceholder":1567},[68,167267,167268,167270,167272],{"class":70,"line":1502},[68,167269,162529],{"class":78},[68,167271,1685],{"class":316},[68,167273,167274],{"class":78}," get_info()\n",[68,167276,167277,167279],{"class":70,"line":1510},[68,167278,31899],{"class":85},[68,167280,78062],{"class":78},[68,167282,167283,167285,167287,167289],{"class":70,"line":1521},[68,167284,31899],{"class":85},[68,167286,1640],{"class":78},[68,167288,104582],{"class":85},[68,167290,167291],{"class":78},"(result))\n",[170,167293,167294],{},"可以直接解包：",[58,167296,167298],{"className":31862,"code":167297,"language":31864,"meta":63,"style":63},"name, age, score = get_info()\nprint(name, age, score)\n",[65,167299,167300,167309],{"__ignoreMap":63},[68,167301,167302,167305,167307],{"class":70,"line":71},[68,167303,167304],{"class":78},"name, age, score ",[68,167306,1685],{"class":316},[68,167308,167274],{"class":78},[68,167310,167311,167313],{"class":70,"line":82},[68,167312,31899],{"class":85},[68,167314,167315],{"class":78},"(name, age, score)\n",[170,167317,167318],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167320,167322],{"id":167321},"_72-位置参数","7.2 位置参数",[170,167324,167325],{},"位置参数按顺序传递。",[58,167327,167329],{"className":31862,"code":167328,"language":31864,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[65,167330,167331,167339,167367,167371,167375],{"__ignoreMap":63},[68,167332,167333,167335,167337],{"class":70,"line":71},[68,167334,33431],{"class":316},[68,167336,150595],{"class":74},[68,167338,150598],{"class":78},[68,167340,167341,167343,167345,167347,167349,167351,167353,167355,167357,167359,167361,167363,167365],{"class":70,"line":82},[68,167342,32783],{"class":85},[68,167344,1640],{"class":78},[68,167346,1691],{"class":316},[68,167348,150609],{"class":1742},[68,167350,2523],{"class":85},[68,167352,81287],{"class":78},[68,167354,2573],{"class":85},[68,167356,150618],{"class":1742},[68,167358,2523],{"class":85},[68,167360,71699],{"class":78},[68,167362,2573],{"class":85},[68,167364,150627],{"class":1742},[68,167366,1646],{"class":78},[68,167368,167369],{"class":70,"line":98},[68,167370,3890],{"emptyLinePlaceholder":1567},[68,167372,167373],{"class":70,"line":104},[68,167374,3890],{"emptyLinePlaceholder":1567},[68,167376,167377,167380,167382,167384,167386],{"class":70,"line":112},[68,167378,167379],{"class":78},"introduce(",[68,167381,151111],{"class":1742},[68,167383,13923],{"class":78},[68,167385,2278],{"class":85},[68,167387,1646],{"class":78},[170,167389,167390],{},"顺序错了就会得到错误含义：",[58,167392,167394],{"className":31862,"code":167393,"language":31864,"meta":63,"style":63},"introduce(18, \"小明\")\n",[65,167395,167396],{"__ignoreMap":63},[68,167397,167398,167400,167402,167404,167406],{"class":70,"line":71},[68,167399,167379],{"class":78},[68,167401,2278],{"class":85},[68,167403,13923],{"class":78},[68,167405,151111],{"class":1742},[68,167407,1646],{"class":78},[14,167409,167411],{"id":167410},"_73-关键字参数","7.3 关键字参数",[170,167413,167414],{},"关键字参数按参数名传递。",[58,167416,167418],{"className":31862,"code":167417,"language":31864,"meta":63,"style":63},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[65,167419,167420,167440],{"__ignoreMap":63},[68,167421,167422,167424,167426,167428,167430,167432,167434,167436,167438],{"class":70,"line":71},[68,167423,167379],{"class":78},[68,167425,81287],{"class":6705},[68,167427,1685],{"class":316},[68,167429,151111],{"class":1742},[68,167431,13923],{"class":78},[68,167433,71699],{"class":6705},[68,167435,1685],{"class":316},[68,167437,2278],{"class":85},[68,167439,1646],{"class":78},[68,167441,167442,167444,167446,167448,167450,167452,167454,167456,167458],{"class":70,"line":82},[68,167443,167379],{"class":78},[68,167445,71699],{"class":6705},[68,167447,1685],{"class":316},[68,167449,2278],{"class":85},[68,167451,13923],{"class":78},[68,167453,81287],{"class":6705},[68,167455,1685],{"class":316},[68,167457,151111],{"class":1742},[68,167459,1646],{"class":78},[170,167461,119408],{},[263,167463,167464,167467],{},[27,167465,167466],{},"顺序不容易错。",[27,167468,167469],{},"调用时可读性更强。",[14,167471,167473],{"id":167472},"_74-默认参数","7.4 默认参数",[170,167475,167476],{},"默认参数给参数设置默认值。",[58,167478,167480],{"className":31862,"code":167479,"language":31864,"meta":63,"style":63},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[65,167481,167482,167498,167528,167532,167536,167546],{"__ignoreMap":63},[68,167483,167484,167486,167488,167491,167493,167496],{"class":70,"line":71},[68,167485,33431],{"class":316},[68,167487,123567],{"class":74},[68,167489,167490],{"class":78},"(host, port",[68,167492,1685],{"class":316},[68,167494,167495],{"class":85},"3306",[68,167497,32270],{"class":78},[68,167499,167500,167502,167504,167506,167509,167511,167513,167515,167517,167519,167522,167524,167526],{"class":70,"line":82},[68,167501,32783],{"class":85},[68,167503,1640],{"class":78},[68,167505,1691],{"class":316},[68,167507,167508],{"class":1742},"\"连接",[68,167510,2523],{"class":85},[68,167512,28881],{"class":78},[68,167514,2573],{"class":85},[68,167516,2486],{"class":1742},[68,167518,2523],{"class":85},[68,167520,167521],{"class":78},"port",[68,167523,2573],{"class":85},[68,167525,1880],{"class":1742},[68,167527,1646],{"class":78},[68,167529,167530],{"class":70,"line":98},[68,167531,3890],{"emptyLinePlaceholder":1567},[68,167533,167534],{"class":70,"line":104},[68,167535,3890],{"emptyLinePlaceholder":1567},[68,167537,167538,167541,167544],{"class":70,"line":112},[68,167539,167540],{"class":78},"connect(",[68,167542,167543],{"class":1742},"\"localhost\"",[68,167545,1646],{"class":78},[68,167547,167548,167550,167552,167554,167557],{"class":70,"line":124},[68,167549,167540],{"class":78},[68,167551,167543],{"class":1742},[68,167553,13923],{"class":78},[68,167555,167556],{"class":85},"6379",[68,167558,1646],{"class":78},[170,167560,167561],{},"注意：默认参数必须放在非默认参数后面。",[170,167563,167564],{},"错误：",[58,167566,167568],{"className":31862,"code":167567,"language":31864,"meta":63,"style":63},"def connect(port=3306, host):\n    pass\n",[65,167569,167570,167586],{"__ignoreMap":63},[68,167571,167572,167574,167576,167579,167581,167583],{"class":70,"line":71},[68,167573,33431],{"class":316},[68,167575,123567],{"class":74},[68,167577,167578],{"class":78},"(port",[68,167580,1685],{"class":316},[68,167582,167495],{"class":85},[68,167584,167585],{"class":78},", host):\n",[68,167587,167588],{"class":70,"line":82},[68,167589,150760],{"class":316},[170,167591,167592],{},"正确：",[58,167594,167596],{"className":31862,"code":167595,"language":31864,"meta":63,"style":63},"def connect(host, port=3306):\n    pass\n",[65,167597,167598,167612],{"__ignoreMap":63},[68,167599,167600,167602,167604,167606,167608,167610],{"class":70,"line":71},[68,167601,33431],{"class":316},[68,167603,123567],{"class":74},[68,167605,167490],{"class":78},[68,167607,1685],{"class":316},[68,167609,167495],{"class":85},[68,167611,32270],{"class":78},[68,167613,167614],{"class":70,"line":82},[68,167615,150760],{"class":316},[14,167617,167619],{"id":167618},"_75-默认参数的坑","7.5 默认参数的坑",[170,167621,167622],{},"不要使用可变对象作为默认参数。",[170,167624,158846],{},[58,167626,167628],{"className":31862,"code":167627,"language":31864,"meta":63,"style":63},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[65,167629,167630,167645,167650,167657,167661,167665,167676],{"__ignoreMap":63},[68,167631,167632,167634,167637,167640,167642],{"class":70,"line":71},[68,167633,33431],{"class":316},[68,167635,167636],{"class":74}," add_item",[68,167638,167639],{"class":78},"(item, items",[68,167641,1685],{"class":316},[68,167643,167644],{"class":78},"[]):\n",[68,167646,167647],{"class":70,"line":82},[68,167648,167649],{"class":78},"    items.append(item)\n",[68,167651,167652,167654],{"class":70,"line":98},[68,167653,5580],{"class":316},[68,167655,167656],{"class":78}," items\n",[68,167658,167659],{"class":70,"line":104},[68,167660,3890],{"emptyLinePlaceholder":1567},[68,167662,167663],{"class":70,"line":112},[68,167664,3890],{"emptyLinePlaceholder":1567},[68,167666,167667,167669,167672,167674],{"class":70,"line":124},[68,167668,31899],{"class":85},[68,167670,167671],{"class":78},"(add_item(",[68,167673,166548],{"class":1742},[68,167675,31981],{"class":78},[68,167677,167678,167680,167682,167685],{"class":70,"line":1496},[68,167679,31899],{"class":85},[68,167681,167671],{"class":78},[68,167683,167684],{"class":1742},"\"b\"",[68,167686,31981],{"class":78},[170,167688,167689],{},"第二次调用会复用第一次的列表。",[170,167691,157111],{},[58,167693,167695],{"className":31862,"code":167694,"language":31864,"meta":63,"style":63},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[65,167696,167697,167711,167724,167733,167737],{"__ignoreMap":63},[68,167698,167699,167701,167703,167705,167707,167709],{"class":70,"line":71},[68,167700,33431],{"class":316},[68,167702,167636],{"class":74},[68,167704,167639],{"class":78},[68,167706,1685],{"class":316},[68,167708,97161],{"class":85},[68,167710,32270],{"class":78},[68,167712,167713,167715,167718,167720,167722],{"class":70,"line":82},[68,167714,4591],{"class":316},[68,167716,167717],{"class":78}," items ",[68,167719,40411],{"class":316},[68,167721,40417],{"class":85},[68,167723,5229],{"class":78},[68,167725,167726,167729,167731],{"class":70,"line":98},[68,167727,167728],{"class":78},"        items ",[68,167730,1685],{"class":316},[68,167732,53320],{"class":78},[68,167734,167735],{"class":70,"line":104},[68,167736,167649],{"class":78},[68,167738,167739,167741],{"class":70,"line":112},[68,167740,5580],{"class":316},[68,167742,167656],{"class":78},[14,167744,167746],{"id":167745},"_76-不定长参数","7.6 不定长参数",[19,167748,167750],{"id":167749},"_761-args","7.6.1 *args",[170,167752,167753,167756],{},[65,167754,167755],{},"*args"," 接收任意数量的位置参数，得到元组。",[58,167758,167760],{"className":31862,"code":167759,"language":31864,"meta":63,"style":63},"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",[65,167761,167762,167775,167783,167794,167803,167809,167813,167817,167836],{"__ignoreMap":63},[68,167763,167764,167766,167768,167770,167772],{"class":70,"line":71},[68,167765,33431],{"class":316},[68,167767,6698],{"class":74},[68,167769,1640],{"class":78},[68,167771,2083],{"class":316},[68,167773,167774],{"class":78},"args):\n",[68,167776,167777,167779,167781],{"class":70,"line":82},[68,167778,160530],{"class":78},[68,167780,1685],{"class":316},[68,167782,48817],{"class":85},[68,167784,167785,167787,167789,167791],{"class":70,"line":98},[68,167786,4691],{"class":316},[68,167788,157403],{"class":78},[68,167790,27529],{"class":316},[68,167792,167793],{"class":78}," args:\n",[68,167795,167796,167798,167800],{"class":70,"line":104},[68,167797,161205],{"class":78},[68,167799,10965],{"class":316},[68,167801,167802],{"class":78}," num\n",[68,167804,167805,167807],{"class":70,"line":112},[68,167806,5580],{"class":316},[68,167808,163510],{"class":78},[68,167810,167811],{"class":70,"line":124},[68,167812,3890],{"emptyLinePlaceholder":1567},[68,167814,167815],{"class":70,"line":1496},[68,167816,3890],{"emptyLinePlaceholder":1567},[68,167818,167819,167821,167824,167826,167828,167830,167832,167834],{"class":70,"line":1502},[68,167820,31899],{"class":85},[68,167822,167823],{"class":78},"(add(",[68,167825,1846],{"class":85},[68,167827,13923],{"class":78},[68,167829,1715],{"class":85},[68,167831,13923],{"class":78},[68,167833,1709],{"class":85},[68,167835,31981],{"class":78},[68,167837,167838,167840,167842,167844,167846,167848,167850,167852,167854,167856,167858,167860],{"class":70,"line":1510},[68,167839,31899],{"class":85},[68,167841,167823],{"class":78},[68,167843,1846],{"class":85},[68,167845,13923],{"class":78},[68,167847,1715],{"class":85},[68,167849,13923],{"class":78},[68,167851,1709],{"class":85},[68,167853,13923],{"class":78},[68,167855,1922],{"class":85},[68,167857,13923],{"class":78},[68,167859,1948],{"class":85},[68,167861,31981],{"class":78},[19,167863,167865],{"id":167864},"_762-kwargs","7.6.2 **kwargs",[170,167867,167868,167871],{},[65,167869,167870],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[58,167873,167875],{"className":31862,"code":167874,"language":31864,"meta":63,"style":63},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[65,167876,167877,167890,167901,167907,167911,167915],{"__ignoreMap":63},[68,167878,167879,167881,167883,167885,167887],{"class":70,"line":71},[68,167880,33431],{"class":316},[68,167882,163168],{"class":74},[68,167884,1640],{"class":78},[68,167886,12149],{"class":316},[68,167888,167889],{"class":78},"kwargs):\n",[68,167891,167892,167894,167896,167898],{"class":70,"line":82},[68,167893,4691],{"class":316},[68,167895,166008],{"class":78},[68,167897,27529],{"class":316},[68,167899,167900],{"class":78}," kwargs.items():\n",[68,167902,167903,167905],{"class":70,"line":98},[68,167904,33935],{"class":85},[68,167906,166020],{"class":78},[68,167908,167909],{"class":70,"line":104},[68,167910,3890],{"emptyLinePlaceholder":1567},[68,167912,167913],{"class":70,"line":112},[68,167914,3890],{"emptyLinePlaceholder":1567},[68,167916,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937,167939,167941],{"class":70,"line":124},[68,167918,163233],{"class":78},[68,167920,81287],{"class":6705},[68,167922,1685],{"class":316},[68,167924,151111],{"class":1742},[68,167926,13923],{"class":78},[68,167928,71699],{"class":6705},[68,167930,1685],{"class":316},[68,167932,2278],{"class":85},[68,167934,13923],{"class":78},[68,167936,71750],{"class":6705},[68,167938,1685],{"class":316},[68,167940,70747],{"class":1742},[68,167942,1646],{"class":78},[14,167944,167946],{"id":167945},"_77-参数解包","7.7 参数解包",[170,167948,167949],{},"列表或元组解包为位置参数：",[58,167951,167953],{"className":31862,"code":167952,"language":31864,"meta":63,"style":63},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[65,167954,167955,167964,167979,167983,167987,168007],{"__ignoreMap":63},[68,167956,167957,167959,167961],{"class":70,"line":71},[68,167958,33431],{"class":316},[68,167960,6698],{"class":74},[68,167962,167963],{"class":78},"(a, b, c):\n",[68,167965,167966,167968,167970,167972,167974,167976],{"class":70,"line":82},[68,167967,5580],{"class":316},[68,167969,12357],{"class":78},[68,167971,2109],{"class":316},[68,167973,12370],{"class":78},[68,167975,2109],{"class":316},[68,167977,167978],{"class":78}," c\n",[68,167980,167981],{"class":70,"line":98},[68,167982,3890],{"emptyLinePlaceholder":1567},[68,167984,167985],{"class":70,"line":104},[68,167986,3890],{"emptyLinePlaceholder":1567},[68,167988,167989,167991,167993,167995,167997,167999,168001,168003,168005],{"class":70,"line":112},[68,167990,165323],{"class":78},[68,167992,1685],{"class":316},[68,167994,53708],{"class":78},[68,167996,1846],{"class":85},[68,167998,13923],{"class":78},[68,168000,1715],{"class":85},[68,168002,13923],{"class":78},[68,168004,1709],{"class":85},[68,168006,34730],{"class":78},[68,168008,168009,168011,168013,168015],{"class":70,"line":124},[68,168010,31899],{"class":85},[68,168012,167823],{"class":78},[68,168014,2083],{"class":316},[68,168016,168017],{"class":78},"nums))\n",[170,168019,168020],{},"字典解包为关键字参数：",[58,168022,168024],{"className":31862,"code":168023,"language":31864,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[65,168025,168026,168034,168060,168064,168068,168092],{"__ignoreMap":63},[68,168027,168028,168030,168032],{"class":70,"line":71},[68,168029,33431],{"class":316},[68,168031,150595],{"class":74},[68,168033,150598],{"class":78},[68,168035,168036,168038,168040,168042,168044,168046,168048,168050,168052,168054,168056,168058],{"class":70,"line":82},[68,168037,32783],{"class":85},[68,168039,1640],{"class":78},[68,168041,1691],{"class":316},[68,168043,1880],{"class":1742},[68,168045,2523],{"class":85},[68,168047,81287],{"class":78},[68,168049,2573],{"class":85},[68,168051,5938],{"class":85},[68,168053,71699],{"class":78},[68,168055,2573],{"class":85},[68,168057,1880],{"class":1742},[68,168059,1646],{"class":78},[68,168061,168062],{"class":70,"line":98},[68,168063,3890],{"emptyLinePlaceholder":1567},[68,168065,168066],{"class":70,"line":104},[68,168067,3890],{"emptyLinePlaceholder":1567},[68,168069,168070,168072,168074,168076,168078,168080,168082,168084,168086,168088,168090],{"class":70,"line":112},[68,168071,117788],{"class":78},[68,168073,1685],{"class":316},[68,168075,5938],{"class":78},[68,168077,64157],{"class":1742},[68,168079,89],{"class":78},[68,168081,151111],{"class":1742},[68,168083,13923],{"class":78},[68,168085,70602],{"class":1742},[68,168087,89],{"class":78},[68,168089,2278],{"class":85},[68,168091,101],{"class":78},[68,168093,168094,168096,168098],{"class":70,"line":124},[68,168095,167379],{"class":78},[68,168097,12149],{"class":316},[68,168099,168100],{"class":78},"info)\n",[14,168102,168104],{"id":168103},"_78-匿名函数lambda","7.8 匿名函数lambda",[170,168106,168107,168110],{},[65,168108,168109],{},"lambda"," 用于定义简单匿名函数。",[58,168112,168114],{"className":31862,"code":168113,"language":31864,"meta":63,"style":63},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[65,168115,168116,168133],{"__ignoreMap":63},[68,168117,168118,168121,168123,168126,168129,168131],{"class":70,"line":71},[68,168119,168120],{"class":78},"add ",[68,168122,1685],{"class":316},[68,168124,168125],{"class":316}," lambda",[68,168127,168128],{"class":78}," a, b: a ",[68,168130,2109],{"class":316},[68,168132,152327],{"class":78},[68,168134,168135,168137,168139,168141,168143,168145],{"class":70,"line":82},[68,168136,31899],{"class":85},[68,168138,167823],{"class":78},[68,168140,1846],{"class":85},[68,168142,13923],{"class":78},[68,168144,1715],{"class":85},[68,168146,31981],{"class":78},[170,168148,168149],{},"常和排序、过滤等函数一起使用。",[170,168151,168152],{},"按分数排序：",[58,168154,168156],{"className":31862,"code":168155,"language":31864,"meta":63,"style":63},"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",[65,168157,168158,168166,168186,168206,168226,168230,168234,168257],{"__ignoreMap":63},[68,168159,168160,168162,168164],{"class":70,"line":71},[68,168161,160939],{"class":78},[68,168163,1685],{"class":316},[68,168165,56925],{"class":78},[68,168167,168168,168170,168172,168174,168176,168178,168180,168182,168184],{"class":70,"line":82},[68,168169,149608],{"class":78},[68,168171,64157],{"class":1742},[68,168173,89],{"class":78},[68,168175,151111],{"class":1742},[68,168177,13923],{"class":78},[68,168179,152695],{"class":1742},[68,168181,89],{"class":78},[68,168183,2616],{"class":85},[68,168185,6420],{"class":78},[68,168187,168188,168190,168192,168194,168196,168198,168200,168202,168204],{"class":70,"line":98},[68,168189,149608],{"class":78},[68,168191,64157],{"class":1742},[68,168193,89],{"class":78},[68,168195,152159],{"class":1742},[68,168197,13923],{"class":78},[68,168199,152695],{"class":1742},[68,168201,89],{"class":78},[68,168203,2438],{"class":85},[68,168205,6420],{"class":78},[68,168207,168208,168210,168212,168214,168216,168218,168220,168222,168224],{"class":70,"line":104},[68,168209,149608],{"class":78},[68,168211,64157],{"class":1742},[68,168213,89],{"class":78},[68,168215,160954],{"class":1742},[68,168217,13923],{"class":78},[68,168219,152695],{"class":1742},[68,168221,89],{"class":78},[68,168223,2035],{"class":85},[68,168225,6420],{"class":78},[68,168227,168228],{"class":70,"line":112},[68,168229,34730],{"class":78},[68,168231,168232],{"class":70,"line":124},[68,168233,3890],{"emptyLinePlaceholder":1567},[68,168235,168236,168239,168241,168243,168245,168247,168249,168251,168253,168255],{"class":70,"line":1496},[68,168237,168238],{"class":78},"students.sort(",[68,168240,155169],{"class":6705},[68,168242,155172],{"class":316},[68,168244,155175],{"class":78},[68,168246,152695],{"class":1742},[68,168248,113676],{"class":78},[68,168250,164751],{"class":6705},[68,168252,1685],{"class":316},[68,168254,32960],{"class":85},[68,168256,1646],{"class":78},[68,168258,168259,168261],{"class":70,"line":1502},[68,168260,31899],{"class":85},[68,168262,166218],{"class":78},[170,168264,168265,168266,168268],{},"如果逻辑复杂，不要硬写 ",[65,168267,168109],{},"，定义普通函数更清晰。",[14,168270,168272],{"id":168271},"_79-函数作为参数","7.9 函数作为参数",[170,168274,168275],{},"函数可以作为参数传给另一个函数。",[58,168277,168279],{"className":31862,"code":168278,"language":31864,"meta":63,"style":63},"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",[65,168280,168281,168289,168299,168303,168307,168317,168324,168328,168332],{"__ignoreMap":63},[68,168282,168283,168285,168287],{"class":70,"line":71},[68,168284,33431],{"class":316},[68,168286,6698],{"class":74},[68,168288,152316],{"class":78},[68,168290,168291,168293,168295,168297],{"class":70,"line":82},[68,168292,5580],{"class":316},[68,168294,12357],{"class":78},[68,168296,2109],{"class":316},[68,168298,152327],{"class":78},[68,168300,168301],{"class":70,"line":98},[68,168302,3890],{"emptyLinePlaceholder":1567},[68,168304,168305],{"class":70,"line":104},[68,168306,3890],{"emptyLinePlaceholder":1567},[68,168308,168309,168311,168314],{"class":70,"line":112},[68,168310,33431],{"class":316},[68,168312,168313],{"class":74}," calculate",[68,168315,168316],{"class":78},"(a, b, func):\n",[68,168318,168319,168321],{"class":70,"line":124},[68,168320,5580],{"class":316},[68,168322,168323],{"class":78}," func(a, b)\n",[68,168325,168326],{"class":70,"line":1496},[68,168327,3890],{"emptyLinePlaceholder":1567},[68,168329,168330],{"class":70,"line":1502},[68,168331,3890],{"emptyLinePlaceholder":1567},[68,168333,168334,168336,168339,168341,168343,168345],{"class":70,"line":1510},[68,168335,31899],{"class":85},[68,168337,168338],{"class":78},"(calculate(",[68,168340,313],{"class":85},[68,168342,13923],{"class":78},[68,168344,333],{"class":85},[68,168346,168347],{"class":78},", add))\n",[170,168349,168350],{},"这种思想在排序、回调、框架中经常出现。",[14,168352,168354],{"id":168353},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,168356,168358],{"id":168357},"_7101-map","7.10.1 map",[170,168360,168361,168363],{},[65,168362,75521],{}," 对每个元素执行函数。",[58,168365,168367],{"className":31862,"code":168366,"language":31864,"meta":63,"style":63},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[65,168368,168369,168393,168416],{"__ignoreMap":63},[68,168370,168371,168373,168375,168377,168379,168381,168383,168385,168387,168389,168391],{"class":70,"line":71},[68,168372,165323],{"class":78},[68,168374,1685],{"class":316},[68,168376,53708],{"class":78},[68,168378,1846],{"class":85},[68,168380,13923],{"class":78},[68,168382,1715],{"class":85},[68,168384,13923],{"class":78},[68,168386,1709],{"class":85},[68,168388,13923],{"class":78},[68,168390,1922],{"class":85},[68,168392,34730],{"class":78},[68,168394,168395,168397,168399,168402,168404,168406,168409,168411,168413],{"class":70,"line":82},[68,168396,162529],{"class":78},[68,168398,1685],{"class":316},[68,168400,168401],{"class":85}," map",[68,168403,1640],{"class":78},[68,168405,168109],{"class":316},[68,168407,168408],{"class":78}," x: x ",[68,168410,2083],{"class":316},[68,168412,16243],{"class":85},[68,168414,168415],{"class":78},", nums)\n",[68,168417,168418,168420,168422,168424],{"class":70,"line":98},[68,168419,31899],{"class":85},[68,168421,1640],{"class":78},[68,168423,155293],{"class":85},[68,168425,167291],{"class":78},[19,168427,168429],{"id":168428},"_7102-filter","7.10.2 filter",[170,168431,168432,168434],{},[65,168433,81528],{}," 保留满足条件的元素。",[58,168436,168438],{"className":31862,"code":168437,"language":31864,"meta":63,"style":63},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[65,168439,168440,168468,168493],{"__ignoreMap":63},[68,168441,168442,168444,168446,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466],{"class":70,"line":71},[68,168443,165323],{"class":78},[68,168445,1685],{"class":316},[68,168447,53708],{"class":78},[68,168449,1846],{"class":85},[68,168451,13923],{"class":78},[68,168453,1715],{"class":85},[68,168455,13923],{"class":78},[68,168457,1709],{"class":85},[68,168459,13923],{"class":78},[68,168461,1922],{"class":85},[68,168463,13923],{"class":78},[68,168465,1948],{"class":85},[68,168467,34730],{"class":78},[68,168469,168470,168472,168474,168477,168479,168481,168483,168485,168487,168489,168491],{"class":70,"line":82},[68,168471,162529],{"class":78},[68,168473,1685],{"class":316},[68,168475,168476],{"class":85}," filter",[68,168478,1640],{"class":78},[68,168480,168109],{"class":316},[68,168482,168408],{"class":78},[68,168484,1957],{"class":316},[68,168486,16243],{"class":85},[68,168488,103034],{"class":316},[68,168490,5583],{"class":85},[68,168492,168415],{"class":78},[68,168494,168495,168497,168499,168501],{"class":70,"line":98},[68,168496,31899],{"class":85},[68,168498,1640],{"class":78},[68,168500,155293],{"class":85},[68,168502,167291],{"class":78},[19,168504,168506],{"id":168505},"_7103-sorted","7.10.3 sorted",[170,168508,168509,168511],{},[65,168510,166459],{}," 返回排序后的新列表。",[58,168513,168515],{"className":31862,"code":168514,"language":31864,"meta":63,"style":63},"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",[65,168516,168517,168525,168545,168565,168585,168589,168593,168622],{"__ignoreMap":63},[68,168518,168519,168521,168523],{"class":70,"line":71},[68,168520,160939],{"class":78},[68,168522,1685],{"class":316},[68,168524,56925],{"class":78},[68,168526,168527,168529,168531,168533,168535,168537,168539,168541,168543],{"class":70,"line":82},[68,168528,149608],{"class":78},[68,168530,64157],{"class":1742},[68,168532,89],{"class":78},[68,168534,151111],{"class":1742},[68,168536,13923],{"class":78},[68,168538,152695],{"class":1742},[68,168540,89],{"class":78},[68,168542,2616],{"class":85},[68,168544,6420],{"class":78},[68,168546,168547,168549,168551,168553,168555,168557,168559,168561,168563],{"class":70,"line":98},[68,168548,149608],{"class":78},[68,168550,64157],{"class":1742},[68,168552,89],{"class":78},[68,168554,152159],{"class":1742},[68,168556,13923],{"class":78},[68,168558,152695],{"class":1742},[68,168560,89],{"class":78},[68,168562,2438],{"class":85},[68,168564,6420],{"class":78},[68,168566,168567,168569,168571,168573,168575,168577,168579,168581,168583],{"class":70,"line":104},[68,168568,149608],{"class":78},[68,168570,64157],{"class":1742},[68,168572,89],{"class":78},[68,168574,160954],{"class":1742},[68,168576,13923],{"class":78},[68,168578,152695],{"class":1742},[68,168580,89],{"class":78},[68,168582,2035],{"class":85},[68,168584,6420],{"class":78},[68,168586,168587],{"class":70,"line":112},[68,168588,34730],{"class":78},[68,168590,168591],{"class":70,"line":124},[68,168592,3890],{"emptyLinePlaceholder":1567},[68,168594,168595,168597,168599,168601,168604,168606,168608,168610,168612,168614,168616,168618,168620],{"class":70,"line":1496},[68,168596,162529],{"class":78},[68,168598,1685],{"class":316},[68,168600,164827],{"class":85},[68,168602,168603],{"class":78},"(students, ",[68,168605,155169],{"class":6705},[68,168607,155172],{"class":316},[68,168609,155175],{"class":78},[68,168611,152695],{"class":1742},[68,168613,113676],{"class":78},[68,168615,164751],{"class":6705},[68,168617,1685],{"class":316},[68,168619,32960],{"class":85},[68,168621,1646],{"class":78},[68,168623,168624,168626],{"class":70,"line":1502},[68,168625,31899],{"class":85},[68,168627,78062],{"class":78},[14,168629,168631],{"id":168630},"_711-闭包入门","7.11 闭包入门",[170,168633,168634],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[58,168636,168638],{"className":31862,"code":168637,"language":31864,"meta":63,"style":63},"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",[65,168639,168640,168650,168660,168671,168675,168682,168686,168690,168704],{"__ignoreMap":63},[68,168641,168642,168644,168647],{"class":70,"line":71},[68,168643,33431],{"class":316},[68,168645,168646],{"class":74}," outer",[68,168648,168649],{"class":78},"(base):\n",[68,168651,168652,168654,168657],{"class":70,"line":82},[68,168653,32285],{"class":316},[68,168655,168656],{"class":74}," inner",[68,168658,168659],{"class":78},"(num):\n",[68,168661,168662,168664,168667,168669],{"class":70,"line":98},[68,168663,16240],{"class":316},[68,168665,168666],{"class":78}," base ",[68,168668,2109],{"class":316},[68,168670,167802],{"class":78},[68,168672,168673],{"class":70,"line":104},[68,168674,3890],{"emptyLinePlaceholder":1567},[68,168676,168677,168679],{"class":70,"line":112},[68,168678,5580],{"class":316},[68,168680,168681],{"class":78}," inner\n",[68,168683,168684],{"class":70,"line":124},[68,168685,3890],{"emptyLinePlaceholder":1567},[68,168687,168688],{"class":70,"line":1496},[68,168689,3890],{"emptyLinePlaceholder":1567},[68,168691,168692,168695,168697,168700,168702],{"class":70,"line":1502},[68,168693,168694],{"class":78},"add_10 ",[68,168696,1685],{"class":316},[68,168698,168699],{"class":78}," outer(",[68,168701,313],{"class":85},[68,168703,1646],{"class":78},[68,168705,168706,168708,168711,168713],{"class":70,"line":1510},[68,168707,31899],{"class":85},[68,168709,168710],{"class":78},"(add_10(",[68,168712,1948],{"class":85},[68,168714,31981],{"class":78},[170,168716,168717],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168719,168721],{"id":168720},"_712-装饰器入门","7.12 装饰器入门",[170,168723,168724],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[58,168726,168728],{"className":31862,"code":168727,"language":31864,"meta":63,"style":63},"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",[65,168729,168730,168739,168748,168759,168764,168775,168779,168786,168790,168794,168799,168807,168817,168821,168825],{"__ignoreMap":63},[68,168731,168732,168734,168736],{"class":70,"line":71},[68,168733,33431],{"class":316},[68,168735,88666],{"class":74},[68,168737,168738],{"class":78},"(func):\n",[68,168740,168741,168743,168746],{"class":70,"line":82},[68,168742,32285],{"class":316},[68,168744,168745],{"class":74}," wrapper",[68,168747,33437],{"class":78},[68,168749,168750,168752,168754,168757],{"class":70,"line":98},[68,168751,33935],{"class":85},[68,168753,1640],{"class":78},[68,168755,168756],{"class":1742},"\"函数开始执行\"",[68,168758,1646],{"class":78},[68,168760,168761],{"class":70,"line":104},[68,168762,168763],{"class":78},"        func()\n",[68,168765,168766,168768,168770,168773],{"class":70,"line":112},[68,168767,33935],{"class":85},[68,168769,1640],{"class":78},[68,168771,168772],{"class":1742},"\"函数执行结束\"",[68,168774,1646],{"class":78},[68,168776,168777],{"class":70,"line":124},[68,168778,3890],{"emptyLinePlaceholder":1567},[68,168780,168781,168783],{"class":70,"line":1496},[68,168782,5580],{"class":316},[68,168784,168785],{"class":78}," wrapper\n",[68,168787,168788],{"class":70,"line":1502},[68,168789,3890],{"emptyLinePlaceholder":1567},[68,168791,168792],{"class":70,"line":1510},[68,168793,3890],{"emptyLinePlaceholder":1567},[68,168795,168796],{"class":70,"line":1521},[68,168797,168798],{"class":74},"@log\n",[68,168800,168801,168803,168805],{"class":70,"line":3103},[68,168802,33431],{"class":316},[68,168804,162219],{"class":74},[68,168806,33437],{"class":78},[68,168808,168809,168811,168813,168815],{"class":70,"line":3108},[68,168810,32783],{"class":85},[68,168812,1640],{"class":78},[68,168814,7333],{"class":1742},[68,168816,1646],{"class":78},[68,168818,168819],{"class":70,"line":3114},[68,168820,3890],{"emptyLinePlaceholder":1567},[68,168822,168823],{"class":70,"line":3119},[68,168824,3890],{"emptyLinePlaceholder":1567},[68,168826,168827],{"class":70,"line":3133},[68,168828,162254],{"class":78},[170,168830,159497],{},[58,168832,168834],{"className":31862,"code":168833,"language":31864,"meta":63,"style":63},"say_hello = log(say_hello)\n",[65,168835,168836],{"__ignoreMap":63},[68,168837,168838,168841,168843],{"class":70,"line":71},[68,168839,168840],{"class":78},"say_hello ",[68,168842,1685],{"class":316},[68,168844,168845],{"class":78}," log(say_hello)\n",[170,168847,168848],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168850,168852],{"id":168851},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[58,168854,168856],{"className":31862,"code":168855,"language":31864,"meta":63,"style":63},"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",[65,168857,168858,168866,168883,168893,168912,168922,168929,168933,168939,168943,168947,168951,168959,168969,168973,168977],{"__ignoreMap":63},[68,168859,168860,168862,168864],{"class":70,"line":71},[68,168861,33431],{"class":316},[68,168863,88666],{"class":74},[68,168865,168738],{"class":78},[68,168867,168868,168870,168872,168874,168876,168879,168881],{"class":70,"line":82},[68,168869,32285],{"class":316},[68,168871,168745],{"class":74},[68,168873,1640],{"class":78},[68,168875,2083],{"class":316},[68,168877,168878],{"class":78},"args, ",[68,168880,12149],{"class":316},[68,168882,167889],{"class":78},[68,168884,168885,168887,168889,168891],{"class":70,"line":98},[68,168886,33935],{"class":85},[68,168888,1640],{"class":78},[68,168890,168756],{"class":1742},[68,168892,1646],{"class":78},[68,168894,168895,168898,168900,168903,168905,168907,168909],{"class":70,"line":104},[68,168896,168897],{"class":78},"        result ",[68,168899,1685],{"class":316},[68,168901,168902],{"class":78}," func(",[68,168904,2083],{"class":316},[68,168906,168878],{"class":78},[68,168908,12149],{"class":316},[68,168910,168911],{"class":78},"kwargs)\n",[68,168913,168914,168916,168918,168920],{"class":70,"line":112},[68,168915,33935],{"class":85},[68,168917,1640],{"class":78},[68,168919,168772],{"class":1742},[68,168921,1646],{"class":78},[68,168923,168924,168926],{"class":70,"line":124},[68,168925,16240],{"class":316},[68,168927,168928],{"class":78}," result\n",[68,168930,168931],{"class":70,"line":1496},[68,168932,3890],{"emptyLinePlaceholder":1567},[68,168934,168935,168937],{"class":70,"line":1502},[68,168936,5580],{"class":316},[68,168938,168785],{"class":78},[68,168940,168941],{"class":70,"line":1510},[68,168942,3890],{"emptyLinePlaceholder":1567},[68,168944,168945],{"class":70,"line":1521},[68,168946,3890],{"emptyLinePlaceholder":1567},[68,168948,168949],{"class":70,"line":3103},[68,168950,168798],{"class":74},[68,168952,168953,168955,168957],{"class":70,"line":3108},[68,168954,33431],{"class":316},[68,168956,6698],{"class":74},[68,168958,152316],{"class":78},[68,168960,168961,168963,168965,168967],{"class":70,"line":3114},[68,168962,5580],{"class":316},[68,168964,12357],{"class":78},[68,168966,2109],{"class":316},[68,168968,152327],{"class":78},[68,168970,168971],{"class":70,"line":3119},[68,168972,3890],{"emptyLinePlaceholder":1567},[68,168974,168975],{"class":70,"line":3133},[68,168976,3890],{"emptyLinePlaceholder":1567},[68,168978,168979,168981,168983,168985,168987,168989],{"class":70,"line":3138},[68,168980,31899],{"class":85},[68,168982,167823],{"class":78},[68,168984,313],{"class":85},[68,168986,13923],{"class":78},[68,168988,333],{"class":85},[68,168990,31981],{"class":78},[170,168992,168993,168994,102493,168996,168998],{},"这个写法使用 ",[65,168995,167755],{},[65,168997,167870],{}," 接收原函数的所有参数。",[14,169000,169002],{"id":169001},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[170,169004,124766],{},[263,169006,169007,169010,169013],{},[27,169008,169009],{},"给定一组学生数据。",[27,169011,169012],{},"封装函数，根据传入规则筛选学生。",[27,169014,169015],{},"筛选及格、优秀、未成年学生。",[170,169017,11523],{},[58,169019,169021],{"className":31862,"code":169020,"language":31864,"meta":63,"style":63},"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",[65,169022,169023,169031,169059,169087,169115,169119,169123,169127,169137,169145,169155,169162,169167,169173,169177,169181,169205,169228,169251,169255,169262,169269],{"__ignoreMap":63},[68,169024,169025,169027,169029],{"class":70,"line":71},[68,169026,160939],{"class":78},[68,169028,1685],{"class":316},[68,169030,56925],{"class":78},[68,169032,169033,169035,169037,169039,169041,169043,169045,169047,169049,169051,169053,169055,169057],{"class":70,"line":82},[68,169034,149608],{"class":78},[68,169036,64157],{"class":1742},[68,169038,89],{"class":78},[68,169040,151111],{"class":1742},[68,169042,13923],{"class":78},[68,169044,70602],{"class":1742},[68,169046,89],{"class":78},[68,169048,2278],{"class":85},[68,169050,13923],{"class":78},[68,169052,152695],{"class":1742},[68,169054,89],{"class":78},[68,169056,2616],{"class":85},[68,169058,6420],{"class":78},[68,169060,169061,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085],{"class":70,"line":98},[68,169062,149608],{"class":78},[68,169064,64157],{"class":1742},[68,169066,89],{"class":78},[68,169068,152159],{"class":1742},[68,169070,13923],{"class":78},[68,169072,70602],{"class":1742},[68,169074,89],{"class":78},[68,169076,2253],{"class":85},[68,169078,13923],{"class":78},[68,169080,152695],{"class":1742},[68,169082,89],{"class":78},[68,169084,2438],{"class":85},[68,169086,6420],{"class":78},[68,169088,169089,169091,169093,169095,169097,169099,169101,169103,169105,169107,169109,169111,169113],{"class":70,"line":104},[68,169090,149608],{"class":78},[68,169092,64157],{"class":1742},[68,169094,89],{"class":78},[68,169096,160954],{"class":1742},[68,169098,13923],{"class":78},[68,169100,70602],{"class":1742},[68,169102,89],{"class":78},[68,169104,2303],{"class":85},[68,169106,13923],{"class":78},[68,169108,152695],{"class":1742},[68,169110,89],{"class":78},[68,169112,2509],{"class":85},[68,169114,6420],{"class":78},[68,169116,169117],{"class":70,"line":112},[68,169118,34730],{"class":78},[68,169120,169121],{"class":70,"line":124},[68,169122,3890],{"emptyLinePlaceholder":1567},[68,169124,169125],{"class":70,"line":1496},[68,169126,3890],{"emptyLinePlaceholder":1567},[68,169128,169129,169131,169134],{"class":70,"line":1502},[68,169130,33431],{"class":316},[68,169132,169133],{"class":74}," filter_students",[68,169135,169136],{"class":78},"(students, condition):\n",[68,169138,169139,169141,169143],{"class":70,"line":1510},[68,169140,162446],{"class":78},[68,169142,1685],{"class":316},[68,169144,53320],{"class":78},[68,169146,169147,169149,169151,169153],{"class":70,"line":1521},[68,169148,4691],{"class":316},[68,169150,153360],{"class":78},[68,169152,27529],{"class":316},[68,169154,153365],{"class":78},[68,169156,169157,169159],{"class":70,"line":3103},[68,169158,3987],{"class":316},[68,169160,169161],{"class":78}," condition(student):\n",[68,169163,169164],{"class":70,"line":3108},[68,169165,169166],{"class":78},"            result.append(student)\n",[68,169168,169169,169171],{"class":70,"line":3114},[68,169170,5580],{"class":316},[68,169172,168928],{"class":78},[68,169174,169175],{"class":70,"line":3119},[68,169176,3890],{"emptyLinePlaceholder":1567},[68,169178,169179],{"class":70,"line":3133},[68,169180,3890],{"emptyLinePlaceholder":1567},[68,169182,169183,169185,169187,169190,169192,169195,169197,169199,169201,169203],{"class":70,"line":3138},[68,169184,166924],{"class":78},[68,169186,1685],{"class":316},[68,169188,169189],{"class":78}," filter_students(students, ",[68,169191,168109],{"class":316},[68,169193,169194],{"class":78}," s: s[",[68,169196,152695],{"class":1742},[68,169198,5933],{"class":78},[68,169200,3201],{"class":316},[68,169202,159060],{"class":85},[68,169204,1646],{"class":78},[68,169206,169207,169210,169212,169214,169216,169218,169220,169222,169224,169226],{"class":70,"line":3144},[68,169208,169209],{"class":78},"excellent ",[68,169211,1685],{"class":316},[68,169213,169189],{"class":78},[68,169215,168109],{"class":316},[68,169217,169194],{"class":78},[68,169219,152695],{"class":1742},[68,169221,5933],{"class":78},[68,169223,3201],{"class":316},[68,169225,159011],{"class":85},[68,169227,1646],{"class":78},[68,169229,169230,169233,169235,169237,169239,169241,169243,169245,169247,169249],{"class":70,"line":3165},[68,169231,169232],{"class":78},"under_age ",[68,169234,1685],{"class":316},[68,169236,169189],{"class":78},[68,169238,168109],{"class":316},[68,169240,169194],{"class":78},[68,169242,70602],{"class":1742},[68,169244,5933],{"class":78},[68,169246,2537],{"class":316},[68,169248,157508],{"class":85},[68,169250,1646],{"class":78},[68,169252,169253],{"class":70,"line":3170},[68,169254,3890],{"emptyLinePlaceholder":1567},[68,169256,169257,169259],{"class":70,"line":3184},[68,169258,31899],{"class":85},[68,169260,169261],{"class":78},"(passed)\n",[68,169263,169264,169266],{"class":70,"line":3189},[68,169265,31899],{"class":85},[68,169267,169268],{"class":78},"(excellent)\n",[68,169270,169271,169273],{"class":70,"line":3218},[68,169272,31899],{"class":85},[68,169274,169275],{"class":78},"(under_age)\n",[14,169277,169279],{"id":169278},"_715-易错点","7.15 易错点",[263,169281,169282,169285,169293,169298,169309],{},[27,169283,169284],{},"默认参数不要写可变对象。",[27,169286,169287,169289,169290,169292],{},[65,169288,167755],{}," 是元组，",[65,169291,167870],{}," 是字典。",[27,169294,169295,169297],{},[65,169296,168109],{}," 只适合简单表达式。",[27,169299,169300,102493,169302,169304,169305,169308],{},[65,169301,75521],{},[65,169303,81528],{}," 的结果是迭代器，常用 ",[65,169306,169307],{},"list()"," 转换查看。",[27,169310,169311],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169313,169315],{"id":169314},"_716-本章练习","7.16 本章练习",[263,169317,169318,169325,169331,169336,169341],{},[27,169319,169320,169321,169324],{},"写函数 ",[65,169322,169323],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[27,169326,169320,169327,169330],{},[65,169328,169329],{},"print_user(**kwargs)","，输出用户所有字段。",[27,169332,105841,169333,169335],{},[65,169334,168109],{}," 对学生列表按年龄排序。",[27,169337,105841,169338,169340],{},[65,169339,81528],{}," 找出成绩不及格的学生。",[27,169342,169343],{},"写一个装饰器，统计函数执行前后的提示信息。",[1553,169345,169346],{},"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":63,"searchDepth":82,"depth":82,"links":169348},[169349,169350,169351,169352,169353,169354,169358,169359,169360,169361,169366,169367,169368,169369,169370,169371],{"id":167207,"depth":82,"text":167208},{"id":167321,"depth":82,"text":167322},{"id":167410,"depth":82,"text":167411},{"id":167472,"depth":82,"text":167473},{"id":167618,"depth":82,"text":167619},{"id":167745,"depth":82,"text":167746,"children":169355},[169356,169357],{"id":167749,"depth":98,"text":167750},{"id":167864,"depth":98,"text":167865},{"id":167945,"depth":82,"text":167946},{"id":168103,"depth":82,"text":168104},{"id":168271,"depth":82,"text":168272},{"id":168353,"depth":82,"text":168354,"children":169362},[169363,169364,169365],{"id":168357,"depth":98,"text":168358},{"id":168428,"depth":98,"text":168429},{"id":168505,"depth":98,"text":168506},{"id":168630,"depth":82,"text":168631},{"id":168720,"depth":82,"text":168721},{"id":168851,"depth":82,"text":168852},{"id":169001,"depth":82,"text":169002},{"id":169278,"depth":82,"text":169279},{"id":169314,"depth":82,"text":169315},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167199,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169378,"title":169379,"body":169380,"description":1564,"extension":1565,"meta":171899,"navigation":1567,"path":171900,"seo":171901,"stem":171902,"__hash__":171903},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169381,"toc":171874},[169382,169385,169389,169392,169395,169426,169430,169434,169437,169464,169468,169471,169522,169525,169540,169543,169578,169582,169584,169608,169611,169671,169675,169679,169682,169739,169742,169762,169766,169769,169832,169836,169839,169895,169902,169926,169930,169933,169996,170000,170005,170056,170059,170063,170068,170135,170138,170220,170224,170229,170280,170283,170287,170290,170293,170301,170304,170350,170353,170399,170403,170409,170453,170456,170502,170505,170545,170548,170609,170613,170616,170706,170709,170851,170854,170921,170925,170928,170931,171072,171075,171153,171156,171332,171336,171338,171349,171351,171550,171554,171798,171802,171836,171840,171871],[10,169383,169379],{"id":169384},"_8-文件操作",[14,169386,169388],{"id":169387},"_81-文件操作的意义","8.1 文件操作的意义",[170,169390,169391],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[170,169393,169394],{},"常见文件类型：",[263,169396,169397,169403,169409,169415,169421],{},[27,169398,169399,169402],{},[65,169400,169401],{},".txt","：普通文本。",[27,169404,169405,169408],{},[65,169406,169407],{},".csv","：表格文本。",[27,169410,169411,169414],{},[65,169412,169413],{},".json","：结构化数据。",[27,169416,169417,169420],{},[65,169418,169419],{},".log","：日志文件。",[27,169422,169423,169425],{},[65,169424,147575],{},"：Python 源代码。",[14,169427,169429],{"id":169428},"_82-路径","8.2 路径",[19,169431,169433],{"id":169432},"_821-相对路径","8.2.1 相对路径",[170,169435,169436],{},"相对当前运行目录：",[58,169438,169440],{"className":31862,"code":169439,"language":31864,"meta":63,"style":63},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[65,169441,169442],{"__ignoreMap":63},[68,169443,169444,169446,169448,169450,169452,169454,169456,169458,169460,169462],{"class":70,"line":71},[68,169445,88390],{"class":85},[68,169447,1640],{"class":78},[68,169449,148019],{"class":1742},[68,169451,13923],{"class":78},[68,169453,148024],{"class":1742},[68,169455,13923],{"class":78},[68,169457,148029],{"class":6705},[68,169459,1685],{"class":316},[68,169461,148034],{"class":1742},[68,169463,1646],{"class":78},[19,169465,169467],{"id":169466},"_822-绝对路径","8.2.2 绝对路径",[170,169469,169470],{},"从根目录或盘符开始：",[58,169472,169474],{"className":31862,"code":169473,"language":31864,"meta":63,"style":63},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[65,169475,169476,169499],{"__ignoreMap":63},[68,169477,169478,169480,169482,169485,169487,169489,169491,169493,169495,169497],{"class":70,"line":71},[68,169479,88390],{"class":85},[68,169481,1640],{"class":78},[68,169483,169484],{"class":1742},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[68,169486,13923],{"class":78},[68,169488,148024],{"class":1742},[68,169490,13923],{"class":78},[68,169492,148029],{"class":6705},[68,169494,1685],{"class":316},[68,169496,148034],{"class":1742},[68,169498,1646],{"class":78},[68,169500,169501,169503,169505,169508,169510,169512,169514,169516,169518,169520],{"class":70,"line":82},[68,169502,88390],{"class":85},[68,169504,1640],{"class":78},[68,169506,169507],{"class":1742},"\"D:\u002Fdata\u002Fdata.txt\"",[68,169509,13923],{"class":78},[68,169511,148024],{"class":1742},[68,169513,13923],{"class":78},[68,169515,148029],{"class":6705},[68,169517,1685],{"class":316},[68,169519,148034],{"class":1742},[68,169521,1646],{"class":78},[170,169523,169524],{},"Windows 路径建议写成：",[58,169526,169528],{"className":31862,"code":169527,"language":31864,"meta":63,"style":63},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[65,169529,169530],{"__ignoreMap":63},[68,169531,169532,169535,169537],{"class":70,"line":71},[68,169533,169534],{"class":78},"path ",[68,169536,1685],{"class":316},[68,169538,169539],{"class":1742}," \"D:\u002Fdata\u002Fdata.txt\"\n",[170,169541,169542],{},"或原始字符串：",[58,169544,169546],{"className":31862,"code":169545,"language":31864,"meta":63,"style":63},"path = r\"D:\\data\\data.txt\"\n",[65,169547,169548],{"__ignoreMap":63},[68,169549,169550,169552,169554,169556,169558,169561,169564,169567,169569,169571,169573,169576],{"class":70,"line":71},[68,169551,169534],{"class":78},[68,169553,1685],{"class":316},[68,169555,18608],{"class":316},[68,169557,1880],{"class":1742},[68,169559,169560],{"class":49461},"D:",[68,169562,169563],{"class":85},"\\d",[68,169565,169566],{"class":49461},"ata",[68,169568,169563],{"class":85},[68,169570,169566],{"class":49461},[68,169572,2186],{"class":85},[68,169574,169575],{"class":49461},"txt",[68,169577,26619],{"class":1742},[14,169579,169581],{"id":169580},"_83-open函数","8.3 open函数",[170,169583,409],{},[58,169585,169587],{"className":31862,"code":169586,"language":31864,"meta":63,"style":63},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[65,169588,169589],{"__ignoreMap":63},[68,169590,169591,169593,169595,169597,169600,169602,169604,169606],{"class":70,"line":71},[68,169592,46838],{"class":6705},[68,169594,15052],{"class":316},[68,169596,148014],{"class":85},[68,169598,169599],{"class":78},"(文件路径, 打开模式, ",[68,169601,148029],{"class":6705},[68,169603,1685],{"class":316},[68,169605,148034],{"class":1742},[68,169607,1646],{"class":78},[170,169609,169610],{},"常见模式：",[128,169612,169613,169622],{},[131,169614,169615],{},[134,169616,169617,169620],{},[137,169618,169619],{},"模式",[137,169621,27355],{},[144,169623,169624,169633,169642,169651,169661],{},[134,169625,169626,169630],{},[149,169627,169628],{},[65,169629,2298],{},[149,169631,169632],{},"只读，文件不存在会报错",[134,169634,169635,169639],{},[149,169636,169637],{},[65,169638,2422],{},[149,169640,169641],{},"只写，文件不存在会创建，存在会清空",[134,169643,169644,169648],{},[149,169645,169646],{},[65,169647,1867],{},[149,169649,169650],{},"追加，文件不存在会创建",[134,169652,169653,169658],{},[149,169654,169655],{},[65,169656,169657],{},"rb",[149,169659,169660],{},"二进制只读",[134,169662,169663,169668],{},[149,169664,169665],{},[65,169666,169667],{},"wb",[149,169669,169670],{},"二进制只写",[14,169672,169674],{"id":169673},"_84-读取文件","8.4 读取文件",[19,169676,169678],{"id":169677},"_841-read","8.4.1 read",[170,169680,169681],{},"一次读取全部内容：",[58,169683,169685],{"className":31862,"code":169684,"language":31864,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[65,169686,169687,169713,169725,169732],{"__ignoreMap":63},[68,169688,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711],{"class":70,"line":71},[68,169690,46838],{"class":6705},[68,169692,15052],{"class":316},[68,169694,148014],{"class":85},[68,169696,1640],{"class":78},[68,169698,148019],{"class":1742},[68,169700,13923],{"class":78},[68,169702,148024],{"class":1742},[68,169704,13923],{"class":78},[68,169706,148029],{"class":6705},[68,169708,1685],{"class":316},[68,169710,148034],{"class":1742},[68,169712,1646],{"class":78},[68,169714,169715,169718,169720,169722],{"class":70,"line":82},[68,169716,169717],{"class":78},"content ",[68,169719,1685],{"class":316},[68,169721,149376],{"class":6705},[68,169723,169724],{"class":78},".read()\n",[68,169726,169727,169729],{"class":70,"line":98},[68,169728,31899],{"class":85},[68,169730,169731],{"class":78},"(content)\n",[68,169733,169734,169736],{"class":70,"line":104},[68,169735,46838],{"class":6705},[68,169737,169738],{"class":78},".close()\n",[170,169740,169741],{},"可以指定读取字符数：",[58,169743,169745],{"className":31862,"code":169744,"language":31864,"meta":63,"style":63},"content = file.read(10)\n",[65,169746,169747],{"__ignoreMap":63},[68,169748,169749,169751,169753,169755,169758,169760],{"class":70,"line":71},[68,169750,169717],{"class":78},[68,169752,1685],{"class":316},[68,169754,149376],{"class":6705},[68,169756,169757],{"class":78},".read(",[68,169759,313],{"class":85},[68,169761,1646],{"class":78},[19,169763,169765],{"id":169764},"_842-readline","8.4.2 readline",[170,169767,169768],{},"一次读取一行：",[58,169770,169772],{"className":31862,"code":169771,"language":31864,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[65,169773,169774,169800,169804,169815,169822,169826],{"__ignoreMap":63},[68,169775,169776,169778,169780,169782,169784,169786,169788,169790,169792,169794,169796,169798],{"class":70,"line":71},[68,169777,46838],{"class":6705},[68,169779,15052],{"class":316},[68,169781,148014],{"class":85},[68,169783,1640],{"class":78},[68,169785,148019],{"class":1742},[68,169787,13923],{"class":78},[68,169789,148024],{"class":1742},[68,169791,13923],{"class":78},[68,169793,148029],{"class":6705},[68,169795,1685],{"class":316},[68,169797,148034],{"class":1742},[68,169799,1646],{"class":78},[68,169801,169802],{"class":70,"line":82},[68,169803,3890],{"emptyLinePlaceholder":1567},[68,169805,169806,169808,169810,169812],{"class":70,"line":98},[68,169807,148475],{"class":78},[68,169809,1685],{"class":316},[68,169811,149376],{"class":6705},[68,169813,169814],{"class":78},".readline()\n",[68,169816,169817,169819],{"class":70,"line":104},[68,169818,31899],{"class":85},[68,169820,169821],{"class":78},"(line)\n",[68,169823,169824],{"class":70,"line":112},[68,169825,3890],{"emptyLinePlaceholder":1567},[68,169827,169828,169830],{"class":70,"line":124},[68,169829,46838],{"class":6705},[68,169831,169738],{"class":78},[19,169833,169835],{"id":169834},"_843-readlines","8.4.3 readlines",[170,169837,169838],{},"读取所有行，返回列表：",[58,169840,169842],{"className":31862,"code":169841,"language":31864,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[65,169843,169844,169870,169882,169889],{"__ignoreMap":63},[68,169845,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868],{"class":70,"line":71},[68,169847,46838],{"class":6705},[68,169849,15052],{"class":316},[68,169851,148014],{"class":85},[68,169853,1640],{"class":78},[68,169855,148019],{"class":1742},[68,169857,13923],{"class":78},[68,169859,148024],{"class":1742},[68,169861,13923],{"class":78},[68,169863,148029],{"class":6705},[68,169865,1685],{"class":316},[68,169867,148034],{"class":1742},[68,169869,1646],{"class":78},[68,169871,169872,169875,169877,169879],{"class":70,"line":82},[68,169873,169874],{"class":78},"lines ",[68,169876,1685],{"class":316},[68,169878,149376],{"class":6705},[68,169880,169881],{"class":78},".readlines()\n",[68,169883,169884,169886],{"class":70,"line":98},[68,169885,31899],{"class":85},[68,169887,169888],{"class":78},"(lines)\n",[68,169890,169891,169893],{"class":70,"line":104},[68,169892,46838],{"class":6705},[68,169894,169738],{"class":78},[170,169896,169897,169898,169901],{},"每一行通常带有换行符，可以用 ",[65,169899,169900],{},"strip()"," 去掉：",[58,169903,169905],{"className":31862,"code":169904,"language":31864,"meta":63,"style":63},"for line in lines:\n    print(line.strip())\n",[65,169906,169907,169919],{"__ignoreMap":63},[68,169908,169909,169911,169914,169916],{"class":70,"line":71},[68,169910,4515],{"class":316},[68,169912,169913],{"class":78}," line ",[68,169915,27529],{"class":316},[68,169917,169918],{"class":78}," lines:\n",[68,169920,169921,169923],{"class":70,"line":82},[68,169922,32783],{"class":85},[68,169924,169925],{"class":78},"(line.strip())\n",[19,169927,169929],{"id":169928},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[170,169931,169932],{},"推荐读取大文件时使用：",[58,169934,169936],{"className":31862,"code":169935,"language":31864,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[65,169937,169938,169964,169968,169980,169986,169990],{"__ignoreMap":63},[68,169939,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962],{"class":70,"line":71},[68,169941,46838],{"class":6705},[68,169943,15052],{"class":316},[68,169945,148014],{"class":85},[68,169947,1640],{"class":78},[68,169949,148019],{"class":1742},[68,169951,13923],{"class":78},[68,169953,148024],{"class":1742},[68,169955,13923],{"class":78},[68,169957,148029],{"class":6705},[68,169959,1685],{"class":316},[68,169961,148034],{"class":1742},[68,169963,1646],{"class":78},[68,169965,169966],{"class":70,"line":82},[68,169967,3890],{"emptyLinePlaceholder":1567},[68,169969,169970,169972,169974,169976,169978],{"class":70,"line":98},[68,169971,4515],{"class":316},[68,169973,169913],{"class":78},[68,169975,27529],{"class":316},[68,169977,149376],{"class":6705},[68,169979,5229],{"class":78},[68,169981,169982,169984],{"class":70,"line":104},[68,169983,32783],{"class":85},[68,169985,169925],{"class":78},[68,169987,169988],{"class":70,"line":112},[68,169989,3890],{"emptyLinePlaceholder":1567},[68,169991,169992,169994],{"class":70,"line":124},[68,169993,46838],{"class":6705},[68,169995,169738],{"class":78},[14,169997,169999],{"id":169998},"_85-with语句","8.5 with语句",[170,170001,170002,170004],{},[65,170003,109307],{}," 会自动关闭文件，推荐使用。",[58,170006,170008],{"className":31862,"code":170007,"language":31864,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[65,170009,170010,170040,170050],{"__ignoreMap":63},[68,170011,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038],{"class":70,"line":71},[68,170013,109307],{"class":316},[68,170015,148014],{"class":85},[68,170017,1640],{"class":78},[68,170019,148019],{"class":1742},[68,170021,13923],{"class":78},[68,170023,148024],{"class":1742},[68,170025,13923],{"class":78},[68,170027,148029],{"class":6705},[68,170029,1685],{"class":316},[68,170031,148034],{"class":1742},[68,170033,15202],{"class":78},[68,170035,32867],{"class":316},[68,170037,149376],{"class":6705},[68,170039,5229],{"class":78},[68,170041,170042,170044,170046,170048],{"class":70,"line":82},[68,170043,148046],{"class":78},[68,170045,1685],{"class":316},[68,170047,149376],{"class":6705},[68,170049,169724],{"class":78},[68,170051,170052,170054],{"class":70,"line":98},[68,170053,32783],{"class":85},[68,170055,169731],{"class":78},[170,170057,170058],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170060,170062],{"id":170061},"_86-写入文件","8.6 写入文件",[170,170064,170065,170067],{},[65,170066,2422],{}," 模式会清空原文件。",[58,170069,170071],{"className":31862,"code":170070,"language":31864,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[65,170072,170073,170103,170120],{"__ignoreMap":63},[68,170074,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101],{"class":70,"line":71},[68,170076,109307],{"class":316},[68,170078,148014],{"class":85},[68,170080,1640],{"class":78},[68,170082,148019],{"class":1742},[68,170084,13923],{"class":78},[68,170086,153199],{"class":1742},[68,170088,13923],{"class":78},[68,170090,148029],{"class":6705},[68,170092,1685],{"class":316},[68,170094,148034],{"class":1742},[68,170096,15202],{"class":78},[68,170098,32867],{"class":316},[68,170100,149376],{"class":6705},[68,170102,5229],{"class":78},[68,170104,170105,170108,170111,170114,170116,170118],{"class":70,"line":82},[68,170106,170107],{"class":6705},"    file",[68,170109,170110],{"class":78},".write(",[68,170112,170113],{"class":1742},"\"hello",[68,170115,157748],{"class":85},[68,170117,1880],{"class":1742},[68,170119,1646],{"class":78},[68,170121,170122,170124,170126,170129,170131,170133],{"class":70,"line":98},[68,170123,170107],{"class":6705},[68,170125,170110],{"class":78},[68,170127,170128],{"class":1742},"\"python",[68,170130,157748],{"class":85},[68,170132,1880],{"class":1742},[68,170134,1646],{"class":78},[170,170136,170137],{},"写入多行：",[58,170139,170141],{"className":31862,"code":170140,"language":31864,"meta":63,"style":63},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[65,170142,170143,170178,170182,170213],{"__ignoreMap":63},[68,170144,170145,170147,170149,170151,170154,170156,170158,170160,170163,170165,170167,170169,170172,170174,170176],{"class":70,"line":71},[68,170146,169874],{"class":78},[68,170148,1685],{"class":316},[68,170150,53708],{"class":78},[68,170152,170153],{"class":1742},"\"小明,18",[68,170155,157748],{"class":85},[68,170157,1880],{"class":1742},[68,170159,13923],{"class":78},[68,170161,170162],{"class":1742},"\"小红,17",[68,170164,157748],{"class":85},[68,170166,1880],{"class":1742},[68,170168,13923],{"class":78},[68,170170,170171],{"class":1742},"\"小刚,19",[68,170173,157748],{"class":85},[68,170175,1880],{"class":1742},[68,170177,34730],{"class":78},[68,170179,170180],{"class":70,"line":82},[68,170181,3890],{"emptyLinePlaceholder":1567},[68,170183,170184,170186,170188,170190,170193,170195,170197,170199,170201,170203,170205,170207,170209,170211],{"class":70,"line":98},[68,170185,109307],{"class":316},[68,170187,148014],{"class":85},[68,170189,1640],{"class":78},[68,170191,170192],{"class":1742},"\"students.txt\"",[68,170194,13923],{"class":78},[68,170196,153199],{"class":1742},[68,170198,13923],{"class":78},[68,170200,148029],{"class":6705},[68,170202,1685],{"class":316},[68,170204,148034],{"class":1742},[68,170206,15202],{"class":78},[68,170208,32867],{"class":316},[68,170210,149376],{"class":6705},[68,170212,5229],{"class":78},[68,170214,170215,170217],{"class":70,"line":104},[68,170216,170107],{"class":6705},[68,170218,170219],{"class":78},".writelines(lines)\n",[14,170221,170223],{"id":170222},"_87-追加文件","8.7 追加文件",[170,170225,170226,170228],{},[65,170227,1867],{}," 模式不会清空原内容，而是在末尾追加。",[58,170230,170232],{"className":31862,"code":170231,"language":31864,"meta":63,"style":63},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[65,170233,170234,170265],{"__ignoreMap":63},[68,170235,170236,170238,170240,170242,170245,170247,170249,170251,170253,170255,170257,170259,170261,170263],{"class":70,"line":71},[68,170237,109307],{"class":316},[68,170239,148014],{"class":85},[68,170241,1640],{"class":78},[68,170243,170244],{"class":1742},"\"log.txt\"",[68,170246,13923],{"class":78},[68,170248,166548],{"class":1742},[68,170250,13923],{"class":78},[68,170252,148029],{"class":6705},[68,170254,1685],{"class":316},[68,170256,148034],{"class":1742},[68,170258,15202],{"class":78},[68,170260,32867],{"class":316},[68,170262,149376],{"class":6705},[68,170264,5229],{"class":78},[68,170266,170267,170269,170271,170274,170276,170278],{"class":70,"line":82},[68,170268,170107],{"class":6705},[68,170270,170110],{"class":78},[68,170272,170273],{"class":1742},"\"程序启动",[68,170275,157748],{"class":85},[68,170277,1880],{"class":1742},[68,170279,1646],{"class":78},[170,170281,170282],{},"日志类文件常用追加模式。",[14,170284,170286],{"id":170285},"_88-文件编码","8.8 文件编码",[170,170288,170289],{},"编码决定文字如何保存为字节。",[170,170291,170292],{},"常见编码：",[263,170294,170295,170298],{},[27,170296,170297],{},"UTF-8：推荐。",[27,170299,170300],{},"GBK：部分 Windows 中文文件常见。",[170,170302,170303],{},"读取文件乱码时，可以尝试：",[58,170305,170307],{"className":31862,"code":170306,"language":31864,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[65,170308,170309,170340],{"__ignoreMap":63},[68,170310,170311,170313,170315,170317,170319,170321,170323,170325,170327,170329,170332,170334,170336,170338],{"class":70,"line":71},[68,170312,109307],{"class":316},[68,170314,148014],{"class":85},[68,170316,1640],{"class":78},[68,170318,148019],{"class":1742},[68,170320,13923],{"class":78},[68,170322,148024],{"class":1742},[68,170324,13923],{"class":78},[68,170326,148029],{"class":6705},[68,170328,1685],{"class":316},[68,170330,170331],{"class":1742},"\"gbk\"",[68,170333,15202],{"class":78},[68,170335,32867],{"class":316},[68,170337,149376],{"class":6705},[68,170339,5229],{"class":78},[68,170341,170342,170344,170346,170348],{"class":70,"line":82},[68,170343,148046],{"class":78},[68,170345,1685],{"class":316},[68,170347,149376],{"class":6705},[68,170349,169724],{"class":78},[170,170351,170352],{},"写文件时建议统一 UTF-8：",[58,170354,170356],{"className":31862,"code":170355,"language":31864,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[65,170357,170358,170388],{"__ignoreMap":63},[68,170359,170360,170362,170364,170366,170368,170370,170372,170374,170376,170378,170380,170382,170384,170386],{"class":70,"line":71},[68,170361,109307],{"class":316},[68,170363,148014],{"class":85},[68,170365,1640],{"class":78},[68,170367,148019],{"class":1742},[68,170369,13923],{"class":78},[68,170371,153199],{"class":1742},[68,170373,13923],{"class":78},[68,170375,148029],{"class":6705},[68,170377,1685],{"class":316},[68,170379,148034],{"class":1742},[68,170381,15202],{"class":78},[68,170383,32867],{"class":316},[68,170385,149376],{"class":6705},[68,170387,5229],{"class":78},[68,170389,170390,170392,170394,170397],{"class":70,"line":82},[68,170391,170107],{"class":6705},[68,170393,170110],{"class":78},[68,170395,170396],{"class":1742},"\"中文内容\"",[68,170398,1646],{"class":78},[14,170400,170402],{"id":170401},"_89-pathlib","8.9 pathlib",[170,170404,170405,170408],{},[65,170406,170407],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[58,170410,170412],{"className":31862,"code":170411,"language":31864,"meta":63,"style":63},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[65,170413,170414,170424,170428,170446],{"__ignoreMap":63},[68,170415,170416,170418,170420,170422],{"class":70,"line":71},[68,170417,32221],{"class":316},[68,170419,109785],{"class":78},[68,170421,31876],{"class":316},[68,170423,109790],{"class":78},[68,170425,170426],{"class":70,"line":82},[68,170427,3890],{"emptyLinePlaceholder":1567},[68,170429,170430,170432,170434,170436,170439,170441,170443],{"class":70,"line":98},[68,170431,169534],{"class":78},[68,170433,1685],{"class":316},[68,170435,110019],{"class":78},[68,170437,170438],{"class":1742},"\"data\"",[68,170440,15202],{"class":78},[68,170442,2212],{"class":316},[68,170444,170445],{"class":1742}," \"students.txt\"\n",[68,170447,170448,170450],{"class":70,"line":104},[68,170449,31899],{"class":85},[68,170451,170452],{"class":78},"(path)\n",[170,170454,170455],{},"创建目录：",[58,170457,170459],{"className":31862,"code":170458,"language":31864,"meta":63,"style":63},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[65,170460,170461,170471,170475,170488],{"__ignoreMap":63},[68,170462,170463,170465,170467,170469],{"class":70,"line":71},[68,170464,32221],{"class":316},[68,170466,109785],{"class":78},[68,170468,31876],{"class":316},[68,170470,109790],{"class":78},[68,170472,170473],{"class":70,"line":82},[68,170474,3890],{"emptyLinePlaceholder":1567},[68,170476,170477,170480,170482,170484,170486],{"class":70,"line":98},[68,170478,170479],{"class":78},"data_dir ",[68,170481,1685],{"class":316},[68,170483,110019],{"class":78},[68,170485,170438],{"class":1742},[68,170487,1646],{"class":78},[68,170489,170490,170493,170496,170498,170500],{"class":70,"line":104},[68,170491,170492],{"class":78},"data_dir.mkdir(",[68,170494,170495],{"class":6705},"exist_ok",[68,170497,1685],{"class":316},[68,170499,32960],{"class":85},[68,170501,1646],{"class":78},[170,170503,170504],{},"判断文件是否存在：",[58,170506,170508],{"className":31862,"code":170507,"language":31864,"meta":63,"style":63},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[65,170509,170510,170523,170527,170534],{"__ignoreMap":63},[68,170511,170512,170514,170516,170518,170521],{"class":70,"line":71},[68,170513,169534],{"class":78},[68,170515,1685],{"class":316},[68,170517,110019],{"class":78},[68,170519,170520],{"class":1742},"\"data\u002Fstudents.txt\"",[68,170522,1646],{"class":78},[68,170524,170525],{"class":70,"line":82},[68,170526,3890],{"emptyLinePlaceholder":1567},[68,170528,170529,170531],{"class":70,"line":98},[68,170530,3023],{"class":316},[68,170532,170533],{"class":78}," path.exists():\n",[68,170535,170536,170538,170540,170543],{"class":70,"line":104},[68,170537,32783],{"class":85},[68,170539,1640],{"class":78},[68,170541,170542],{"class":1742},"\"文件存在\"",[68,170544,1646],{"class":78},[170,170546,170547],{},"读写文本：",[58,170549,170551],{"className":31862,"code":170550,"language":31864,"meta":63,"style":63},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[65,170552,170553,170565,170569,170586,170603],{"__ignoreMap":63},[68,170554,170555,170557,170559,170561,170563],{"class":70,"line":71},[68,170556,169534],{"class":78},[68,170558,1685],{"class":316},[68,170560,110019],{"class":78},[68,170562,148019],{"class":1742},[68,170564,1646],{"class":78},[68,170566,170567],{"class":70,"line":82},[68,170568,3890],{"emptyLinePlaceholder":1567},[68,170570,170571,170574,170576,170578,170580,170582,170584],{"class":70,"line":98},[68,170572,170573],{"class":78},"path.write_text(",[68,170575,147099],{"class":1742},[68,170577,13923],{"class":78},[68,170579,148029],{"class":6705},[68,170581,1685],{"class":316},[68,170583,148034],{"class":1742},[68,170585,1646],{"class":78},[68,170587,170588,170590,170592,170595,170597,170599,170601],{"class":70,"line":104},[68,170589,169717],{"class":78},[68,170591,1685],{"class":316},[68,170593,170594],{"class":78}," path.read_text(",[68,170596,148029],{"class":6705},[68,170598,1685],{"class":316},[68,170600,148034],{"class":1742},[68,170602,1646],{"class":78},[68,170604,170605,170607],{"class":70,"line":112},[68,170606,31899],{"class":85},[68,170608,169731],{"class":78},[14,170610,170612],{"id":170611},"_810-json文件","8.10 JSON文件",[170,170614,170615],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[58,170617,170619],{"className":31862,"code":170618,"language":31864,"meta":63,"style":63},"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",[65,170620,170621,170627,170631,170639,170649,170659,170667,170671,170675,170700],{"__ignoreMap":63},[68,170622,170623,170625],{"class":70,"line":71},[68,170624,31876],{"class":316},[68,170626,148314],{"class":78},[68,170628,170629],{"class":70,"line":82},[68,170630,3890],{"emptyLinePlaceholder":1567},[68,170632,170633,170635,170637],{"class":70,"line":98},[68,170634,150704],{"class":78},[68,170636,1685],{"class":316},[68,170638,79],{"class":78},[68,170640,170641,170643,170645,170647],{"class":70,"line":104},[68,170642,148243],{"class":1742},[68,170644,89],{"class":78},[68,170646,151111],{"class":1742},[68,170648,32950],{"class":78},[68,170650,170651,170653,170655,170657],{"class":70,"line":112},[68,170652,165760],{"class":1742},[68,170654,89],{"class":78},[68,170656,2278],{"class":85},[68,170658,32950],{"class":78},[68,170660,170661,170663,170665],{"class":70,"line":124},[68,170662,165771],{"class":1742},[68,170664,89],{"class":78},[68,170666,165776],{"class":85},[68,170668,170669],{"class":70,"line":1496},[68,170670,101],{"class":78},[68,170672,170673],{"class":70,"line":1502},[68,170674,3890],{"emptyLinePlaceholder":1567},[68,170676,170677,170679,170681,170684,170686,170688,170690,170692,170694,170696,170698],{"class":70,"line":1510},[68,170678,157667],{"class":78},[68,170680,1685],{"class":316},[68,170682,170683],{"class":78}," json.dumps(student, ",[68,170685,148360],{"class":6705},[68,170687,1685],{"class":316},[68,170689,35471],{"class":85},[68,170691,13923],{"class":78},[68,170693,153235],{"class":6705},[68,170695,1685],{"class":316},[68,170697,1715],{"class":85},[68,170699,1646],{"class":78},[68,170701,170702,170704],{"class":70,"line":1521},[68,170703,31899],{"class":85},[68,170705,165294],{"class":78},[170,170707,170708],{},"写入 JSON 文件：",[58,170710,170712],{"className":31862,"code":170711,"language":31864,"meta":63,"style":63},"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",[65,170713,170714,170720,170724,170732,170760,170788,170792,170796,170826],{"__ignoreMap":63},[68,170715,170716,170718],{"class":70,"line":71},[68,170717,31876],{"class":316},[68,170719,148314],{"class":78},[68,170721,170722],{"class":70,"line":82},[68,170723,3890],{"emptyLinePlaceholder":1567},[68,170725,170726,170728,170730],{"class":70,"line":98},[68,170727,160939],{"class":78},[68,170729,1685],{"class":316},[68,170731,56925],{"class":78},[68,170733,170734,170736,170738,170740,170742,170744,170746,170748,170750,170752,170754,170756,170758],{"class":70,"line":104},[68,170735,149608],{"class":78},[68,170737,64157],{"class":1742},[68,170739,89],{"class":78},[68,170741,151111],{"class":1742},[68,170743,13923],{"class":78},[68,170745,70602],{"class":1742},[68,170747,89],{"class":78},[68,170749,2278],{"class":85},[68,170751,13923],{"class":78},[68,170753,152695],{"class":1742},[68,170755,89],{"class":78},[68,170757,2616],{"class":85},[68,170759,6420],{"class":78},[68,170761,170762,170764,170766,170768,170770,170772,170774,170776,170778,170780,170782,170784,170786],{"class":70,"line":112},[68,170763,149608],{"class":78},[68,170765,64157],{"class":1742},[68,170767,89],{"class":78},[68,170769,152159],{"class":1742},[68,170771,13923],{"class":78},[68,170773,70602],{"class":1742},[68,170775,89],{"class":78},[68,170777,2253],{"class":85},[68,170779,13923],{"class":78},[68,170781,152695],{"class":1742},[68,170783,89],{"class":78},[68,170785,2438],{"class":85},[68,170787,6420],{"class":78},[68,170789,170790],{"class":70,"line":124},[68,170791,34730],{"class":78},[68,170793,170794],{"class":70,"line":1496},[68,170795,3890],{"emptyLinePlaceholder":1567},[68,170797,170798,170800,170802,170804,170806,170808,170810,170812,170814,170816,170818,170820,170822,170824],{"class":70,"line":1502},[68,170799,109307],{"class":316},[68,170801,148014],{"class":85},[68,170803,1640],{"class":78},[68,170805,153054],{"class":1742},[68,170807,13923],{"class":78},[68,170809,153199],{"class":1742},[68,170811,13923],{"class":78},[68,170813,148029],{"class":6705},[68,170815,1685],{"class":316},[68,170817,148034],{"class":1742},[68,170819,15202],{"class":78},[68,170821,32867],{"class":316},[68,170823,149376],{"class":6705},[68,170825,5229],{"class":78},[68,170827,170828,170831,170833,170835,170837,170839,170841,170843,170845,170847,170849],{"class":70,"line":1510},[68,170829,170830],{"class":78},"    json.dump(students, ",[68,170832,46838],{"class":6705},[68,170834,13923],{"class":78},[68,170836,148360],{"class":6705},[68,170838,1685],{"class":316},[68,170840,35471],{"class":85},[68,170842,13923],{"class":78},[68,170844,153235],{"class":6705},[68,170846,1685],{"class":316},[68,170848,1715],{"class":85},[68,170850,1646],{"class":78},[170,170852,170853],{},"读取 JSON 文件：",[58,170855,170857],{"className":31862,"code":170856,"language":31864,"meta":63,"style":63},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[65,170858,170859,170865,170869,170899,170911,170915],{"__ignoreMap":63},[68,170860,170861,170863],{"class":70,"line":71},[68,170862,31876],{"class":316},[68,170864,148314],{"class":78},[68,170866,170867],{"class":70,"line":82},[68,170868,3890],{"emptyLinePlaceholder":1567},[68,170870,170871,170873,170875,170877,170879,170881,170883,170885,170887,170889,170891,170893,170895,170897],{"class":70,"line":98},[68,170872,109307],{"class":316},[68,170874,148014],{"class":85},[68,170876,1640],{"class":78},[68,170878,153054],{"class":1742},[68,170880,13923],{"class":78},[68,170882,148024],{"class":1742},[68,170884,13923],{"class":78},[68,170886,148029],{"class":6705},[68,170888,1685],{"class":316},[68,170890,148034],{"class":1742},[68,170892,15202],{"class":78},[68,170894,32867],{"class":316},[68,170896,149376],{"class":6705},[68,170898,5229],{"class":78},[68,170900,170901,170903,170905,170907,170909],{"class":70,"line":104},[68,170902,154260],{"class":78},[68,170904,1685],{"class":316},[68,170906,149387],{"class":78},[68,170908,46838],{"class":6705},[68,170910,1646],{"class":78},[68,170912,170913],{"class":70,"line":112},[68,170914,3890],{"emptyLinePlaceholder":1567},[68,170916,170917,170919],{"class":70,"line":124},[68,170918,31899],{"class":85},[68,170920,166218],{"class":78},[14,170922,170924],{"id":170923},"_811-csv文件","8.11 CSV文件",[170,170926,170927],{},"CSV 是逗号分隔值，常用于表格数据。",[170,170929,170930],{},"写入 CSV：",[58,170932,170934],{"className":31862,"code":170933,"language":31864,"meta":63,"style":63},"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",[65,170935,170936,170943,170947,170955,170973,170989,171005,171009,171013,171053,171067],{"__ignoreMap":63},[68,170937,170938,170940],{"class":70,"line":71},[68,170939,31876],{"class":316},[68,170941,170942],{"class":78}," csv\n",[68,170944,170945],{"class":70,"line":82},[68,170946,3890],{"emptyLinePlaceholder":1567},[68,170948,170949,170951,170953],{"class":70,"line":98},[68,170950,160939],{"class":78},[68,170952,1685],{"class":316},[68,170954,56925],{"class":78},[68,170956,170957,170960,170962,170964,170966,170968,170971],{"class":70,"line":104},[68,170958,170959],{"class":78},"    [",[68,170961,74576],{"class":1742},[68,170963,13923],{"class":78},[68,170965,74609],{"class":1742},[68,170967,13923],{"class":78},[68,170969,170970],{"class":1742},"\"成绩\"",[68,170972,89311],{"class":78},[68,170974,170975,170977,170979,170981,170983,170985,170987],{"class":70,"line":112},[68,170976,170959],{"class":78},[68,170978,151111],{"class":1742},[68,170980,13923],{"class":78},[68,170982,2278],{"class":85},[68,170984,13923],{"class":78},[68,170986,2616],{"class":85},[68,170988,89311],{"class":78},[68,170990,170991,170993,170995,170997,170999,171001,171003],{"class":70,"line":124},[68,170992,170959],{"class":78},[68,170994,152159],{"class":1742},[68,170996,13923],{"class":78},[68,170998,2253],{"class":85},[68,171000,13923],{"class":78},[68,171002,2438],{"class":85},[68,171004,89311],{"class":78},[68,171006,171007],{"class":70,"line":1496},[68,171008,34730],{"class":78},[68,171010,171011],{"class":70,"line":1502},[68,171012,3890],{"emptyLinePlaceholder":1567},[68,171014,171015,171017,171019,171021,171024,171026,171028,171030,171032,171034,171036,171038,171041,171043,171045,171047,171049,171051],{"class":70,"line":1510},[68,171016,109307],{"class":316},[68,171018,148014],{"class":85},[68,171020,1640],{"class":78},[68,171022,171023],{"class":1742},"\"students.csv\"",[68,171025,13923],{"class":78},[68,171027,153199],{"class":1742},[68,171029,13923],{"class":78},[68,171031,148029],{"class":6705},[68,171033,1685],{"class":316},[68,171035,148034],{"class":1742},[68,171037,13923],{"class":78},[68,171039,171040],{"class":6705},"newline",[68,171042,1685],{"class":316},[68,171044,9141],{"class":1742},[68,171046,15202],{"class":78},[68,171048,32867],{"class":316},[68,171050,149376],{"class":6705},[68,171052,5229],{"class":78},[68,171054,171055,171058,171060,171063,171065],{"class":70,"line":1521},[68,171056,171057],{"class":78},"    writer ",[68,171059,1685],{"class":316},[68,171061,171062],{"class":78}," csv.writer(",[68,171064,46838],{"class":6705},[68,171066,1646],{"class":78},[68,171068,171069],{"class":70,"line":3103},[68,171070,171071],{"class":78},"    writer.writerows(students)\n",[170,171073,171074],{},"读取 CSV：",[58,171076,171078],{"className":31862,"code":171077,"language":31864,"meta":63,"style":63},"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",[65,171079,171080,171086,171090,171120,171134,171146],{"__ignoreMap":63},[68,171081,171082,171084],{"class":70,"line":71},[68,171083,31876],{"class":316},[68,171085,170942],{"class":78},[68,171087,171088],{"class":70,"line":82},[68,171089,3890],{"emptyLinePlaceholder":1567},[68,171091,171092,171094,171096,171098,171100,171102,171104,171106,171108,171110,171112,171114,171116,171118],{"class":70,"line":98},[68,171093,109307],{"class":316},[68,171095,148014],{"class":85},[68,171097,1640],{"class":78},[68,171099,171023],{"class":1742},[68,171101,13923],{"class":78},[68,171103,148024],{"class":1742},[68,171105,13923],{"class":78},[68,171107,148029],{"class":6705},[68,171109,1685],{"class":316},[68,171111,148034],{"class":1742},[68,171113,15202],{"class":78},[68,171115,32867],{"class":316},[68,171117,149376],{"class":6705},[68,171119,5229],{"class":78},[68,171121,171122,171125,171127,171130,171132],{"class":70,"line":104},[68,171123,171124],{"class":78},"    reader ",[68,171126,1685],{"class":316},[68,171128,171129],{"class":78}," csv.reader(",[68,171131,46838],{"class":6705},[68,171133,1646],{"class":78},[68,171135,171136,171138,171141,171143],{"class":70,"line":112},[68,171137,4691],{"class":316},[68,171139,171140],{"class":78}," row ",[68,171142,27529],{"class":316},[68,171144,171145],{"class":78}," reader:\n",[68,171147,171148,171150],{"class":70,"line":124},[68,171149,33935],{"class":85},[68,171151,171152],{"class":78},"(row)\n",[170,171154,171155],{},"使用字典写入：",[58,171157,171159],{"className":31862,"code":171158,"language":31864,"meta":63,"style":63},"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",[65,171160,171161,171167,171171,171179,171207,171235,171239,171243,171281,171302,171323,171328],{"__ignoreMap":63},[68,171162,171163,171165],{"class":70,"line":71},[68,171164,31876],{"class":316},[68,171166,170942],{"class":78},[68,171168,171169],{"class":70,"line":82},[68,171170,3890],{"emptyLinePlaceholder":1567},[68,171172,171173,171175,171177],{"class":70,"line":98},[68,171174,160939],{"class":78},[68,171176,1685],{"class":316},[68,171178,56925],{"class":78},[68,171180,171181,171183,171185,171187,171189,171191,171193,171195,171197,171199,171201,171203,171205],{"class":70,"line":104},[68,171182,149608],{"class":78},[68,171184,64157],{"class":1742},[68,171186,89],{"class":78},[68,171188,151111],{"class":1742},[68,171190,13923],{"class":78},[68,171192,70602],{"class":1742},[68,171194,89],{"class":78},[68,171196,2278],{"class":85},[68,171198,13923],{"class":78},[68,171200,152695],{"class":1742},[68,171202,89],{"class":78},[68,171204,2616],{"class":85},[68,171206,6420],{"class":78},[68,171208,171209,171211,171213,171215,171217,171219,171221,171223,171225,171227,171229,171231,171233],{"class":70,"line":112},[68,171210,149608],{"class":78},[68,171212,64157],{"class":1742},[68,171214,89],{"class":78},[68,171216,152159],{"class":1742},[68,171218,13923],{"class":78},[68,171220,70602],{"class":1742},[68,171222,89],{"class":78},[68,171224,2253],{"class":85},[68,171226,13923],{"class":78},[68,171228,152695],{"class":1742},[68,171230,89],{"class":78},[68,171232,2438],{"class":85},[68,171234,6420],{"class":78},[68,171236,171237],{"class":70,"line":124},[68,171238,34730],{"class":78},[68,171240,171241],{"class":70,"line":1496},[68,171242,3890],{"emptyLinePlaceholder":1567},[68,171244,171245,171247,171249,171251,171253,171255,171257,171259,171261,171263,171265,171267,171269,171271,171273,171275,171277,171279],{"class":70,"line":1502},[68,171246,109307],{"class":316},[68,171248,148014],{"class":85},[68,171250,1640],{"class":78},[68,171252,171023],{"class":1742},[68,171254,13923],{"class":78},[68,171256,153199],{"class":1742},[68,171258,13923],{"class":78},[68,171260,148029],{"class":6705},[68,171262,1685],{"class":316},[68,171264,148034],{"class":1742},[68,171266,13923],{"class":78},[68,171268,171040],{"class":6705},[68,171270,1685],{"class":316},[68,171272,9141],{"class":1742},[68,171274,15202],{"class":78},[68,171276,32867],{"class":316},[68,171278,149376],{"class":6705},[68,171280,5229],{"class":78},[68,171282,171283,171286,171288,171290,171292,171294,171296,171298,171300],{"class":70,"line":1510},[68,171284,171285],{"class":78},"    fieldnames ",[68,171287,1685],{"class":316},[68,171289,53708],{"class":78},[68,171291,64157],{"class":1742},[68,171293,13923],{"class":78},[68,171295,70602],{"class":1742},[68,171297,13923],{"class":78},[68,171299,152695],{"class":1742},[68,171301,34730],{"class":78},[68,171303,171304,171306,171308,171311,171313,171315,171318,171320],{"class":70,"line":1521},[68,171305,171057],{"class":78},[68,171307,1685],{"class":316},[68,171309,171310],{"class":78}," csv.DictWriter(",[68,171312,46838],{"class":6705},[68,171314,13923],{"class":78},[68,171316,171317],{"class":6705},"fieldnames",[68,171319,1685],{"class":316},[68,171321,171322],{"class":78},"fieldnames)\n",[68,171324,171325],{"class":70,"line":3103},[68,171326,171327],{"class":78},"    writer.writeheader()\n",[68,171329,171330],{"class":70,"line":3108},[68,171331,171071],{"class":78},[14,171333,171335],{"id":171334},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[170,171337,124766],{},[263,171339,171340,171343,171346],{},[27,171341,171342],{},"读取文本文件。",[27,171344,171345],{},"统计每个单词出现次数。",[27,171347,171348],{},"输出出现次数最多的前 10 个单词。",[170,171350,11523],{},[58,171352,171354],{"className":31862,"code":171353,"language":31864,"meta":63,"style":63},"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",[65,171355,171356,171366,171370,171383,171399,171403,171413,171422,171426,171438,171458,171467,171471,171489,171493,171523,171527,171543],{"__ignoreMap":63},[68,171357,171358,171360,171362,171364],{"class":70,"line":71},[68,171359,32221],{"class":316},[68,171361,109785],{"class":78},[68,171363,31876],{"class":316},[68,171365,109790],{"class":78},[68,171367,171368],{"class":70,"line":82},[68,171369,3890],{"emptyLinePlaceholder":1567},[68,171371,171372,171374,171376,171378,171381],{"class":70,"line":98},[68,171373,169534],{"class":78},[68,171375,1685],{"class":316},[68,171377,110019],{"class":78},[68,171379,171380],{"class":1742},"\"article.txt\"",[68,171382,1646],{"class":78},[68,171384,171385,171387,171389,171391,171393,171395,171397],{"class":70,"line":104},[68,171386,169717],{"class":78},[68,171388,1685],{"class":316},[68,171390,170594],{"class":78},[68,171392,148029],{"class":6705},[68,171394,1685],{"class":316},[68,171396,148034],{"class":1742},[68,171398,1646],{"class":78},[68,171400,171401],{"class":70,"line":112},[68,171402,3890],{"emptyLinePlaceholder":1567},[68,171404,171405,171408,171410],{"class":70,"line":124},[68,171406,171407],{"class":78},"words ",[68,171409,1685],{"class":316},[68,171411,171412],{"class":78}," content.lower().split()\n",[68,171414,171415,171418,171420],{"class":70,"line":1496},[68,171416,171417],{"class":78},"counter ",[68,171419,1685],{"class":316},[68,171421,89343],{"class":78},[68,171423,171424],{"class":70,"line":1502},[68,171425,3890],{"emptyLinePlaceholder":1567},[68,171427,171428,171430,171433,171435],{"class":70,"line":1510},[68,171429,4515],{"class":316},[68,171431,171432],{"class":78}," word ",[68,171434,27529],{"class":316},[68,171436,171437],{"class":78}," words:\n",[68,171439,171440,171443,171445,171448,171451,171453,171456],{"class":70,"line":1521},[68,171441,171442],{"class":78},"    word ",[68,171444,1685],{"class":316},[68,171446,171447],{"class":78}," word.strip(",[68,171449,171450],{"class":1742},"\".,!?;:",[68,171452,157718],{"class":85},[68,171454,171455],{"class":1742},"'()[]\"",[68,171457,1646],{"class":78},[68,171459,171460,171462,171464],{"class":70,"line":3103},[68,171461,4591],{"class":316},[68,171463,40414],{"class":316},[68,171465,171466],{"class":78}," word:\n",[68,171468,171469],{"class":70,"line":3108},[68,171470,149735],{"class":316},[68,171472,171473,171476,171478,171481,171483,171485,171487],{"class":70,"line":3114},[68,171474,171475],{"class":78},"    counter[word] ",[68,171477,1685],{"class":316},[68,171479,171480],{"class":78}," counter.get(word, ",[68,171482,1248],{"class":85},[68,171484,15202],{"class":78},[68,171486,2109],{"class":316},[68,171488,57177],{"class":85},[68,171490,171491],{"class":70,"line":3119},[68,171492,3890],{"emptyLinePlaceholder":1567},[68,171494,171495,171498,171500,171502,171505,171507,171509,171511,171513,171515,171517,171519,171521],{"class":70,"line":3133},[68,171496,171497],{"class":78},"items ",[68,171499,1685],{"class":316},[68,171501,164827],{"class":85},[68,171503,171504],{"class":78},"(counter.items(), ",[68,171506,155169],{"class":6705},[68,171508,155172],{"class":316},[68,171510,155175],{"class":78},[68,171512,1846],{"class":85},[68,171514,113676],{"class":78},[68,171516,164751],{"class":6705},[68,171518,1685],{"class":316},[68,171520,32960],{"class":85},[68,171522,1646],{"class":78},[68,171524,171525],{"class":70,"line":3138},[68,171526,3890],{"emptyLinePlaceholder":1567},[68,171528,171529,171531,171534,171536,171539,171541],{"class":70,"line":3144},[68,171530,4515],{"class":316},[68,171532,171533],{"class":78}," word, count ",[68,171535,27529],{"class":316},[68,171537,171538],{"class":78}," items[:",[68,171540,313],{"class":85},[68,171542,166978],{"class":78},[68,171544,171545,171547],{"class":70,"line":3165},[68,171546,32783],{"class":85},[68,171548,171549],{"class":78},"(word, count)\n",[14,171551,171553],{"id":171552},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[58,171555,171557],{"className":31862,"code":171556,"language":31864,"meta":63,"style":63},"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",[65,171558,171559,171565,171575,171579,171591,171595,171599,171607,171617,171623,171627,171657,171667,171671,171675,171683,171713,171737,171741,171745,171753,171782,171787],{"__ignoreMap":63},[68,171560,171561,171563],{"class":70,"line":71},[68,171562,31876],{"class":316},[68,171564,148314],{"class":78},[68,171566,171567,171569,171571,171573],{"class":70,"line":82},[68,171568,32221],{"class":316},[68,171570,109785],{"class":78},[68,171572,31876],{"class":316},[68,171574,109790],{"class":78},[68,171576,171577],{"class":70,"line":98},[68,171578,3890],{"emptyLinePlaceholder":1567},[68,171580,171581,171583,171585,171587,171589],{"class":70,"line":104},[68,171582,153047],{"class":85},[68,171584,15052],{"class":316},[68,171586,110019],{"class":78},[68,171588,153054],{"class":1742},[68,171590,1646],{"class":78},[68,171592,171593],{"class":70,"line":112},[68,171594,3890],{"emptyLinePlaceholder":1567},[68,171596,171597],{"class":70,"line":124},[68,171598,3890],{"emptyLinePlaceholder":1567},[68,171600,171601,171603,171605],{"class":70,"line":1496},[68,171602,33431],{"class":316},[68,171604,153071],{"class":74},[68,171606,33437],{"class":78},[68,171608,171609,171611,171613,171615],{"class":70,"line":1502},[68,171610,4591],{"class":316},[68,171612,40414],{"class":316},[68,171614,153082],{"class":85},[68,171616,153085],{"class":78},[68,171618,171619,171621],{"class":70,"line":1510},[68,171620,16240],{"class":316},[68,171622,53320],{"class":78},[68,171624,171625],{"class":70,"line":1521},[68,171626,3890],{"emptyLinePlaceholder":1567},[68,171628,171629,171631,171633,171635,171637,171639,171641,171643,171645,171647,171649,171651,171653,171655],{"class":70,"line":3103},[68,171630,35662],{"class":316},[68,171632,148014],{"class":85},[68,171634,1640],{"class":78},[68,171636,153047],{"class":85},[68,171638,13923],{"class":78},[68,171640,148024],{"class":1742},[68,171642,13923],{"class":78},[68,171644,148029],{"class":6705},[68,171646,1685],{"class":316},[68,171648,148034],{"class":1742},[68,171650,15202],{"class":78},[68,171652,32867],{"class":316},[68,171654,149376],{"class":6705},[68,171656,5229],{"class":78},[68,171658,171659,171661,171663,171665],{"class":70,"line":3108},[68,171660,16240],{"class":316},[68,171662,149387],{"class":78},[68,171664,46838],{"class":6705},[68,171666,1646],{"class":78},[68,171668,171669],{"class":70,"line":3114},[68,171670,3890],{"emptyLinePlaceholder":1567},[68,171672,171673],{"class":70,"line":3119},[68,171674,3890],{"emptyLinePlaceholder":1567},[68,171676,171677,171679,171681],{"class":70,"line":3133},[68,171678,33431],{"class":316},[68,171680,153181],{"class":74},[68,171682,153184],{"class":78},[68,171684,171685,171687,171689,171691,171693,171695,171697,171699,171701,171703,171705,171707,171709,171711],{"class":70,"line":3138},[68,171686,35662],{"class":316},[68,171688,148014],{"class":85},[68,171690,1640],{"class":78},[68,171692,153047],{"class":85},[68,171694,13923],{"class":78},[68,171696,153199],{"class":1742},[68,171698,13923],{"class":78},[68,171700,148029],{"class":6705},[68,171702,1685],{"class":316},[68,171704,148034],{"class":1742},[68,171706,15202],{"class":78},[68,171708,32867],{"class":316},[68,171710,149376],{"class":6705},[68,171712,5229],{"class":78},[68,171714,171715,171717,171719,171721,171723,171725,171727,171729,171731,171733,171735],{"class":70,"line":3144},[68,171716,153220],{"class":78},[68,171718,46838],{"class":6705},[68,171720,13923],{"class":78},[68,171722,148360],{"class":6705},[68,171724,1685],{"class":316},[68,171726,35471],{"class":85},[68,171728,13923],{"class":78},[68,171730,153235],{"class":6705},[68,171732,1685],{"class":316},[68,171734,1715],{"class":85},[68,171736,1646],{"class":78},[68,171738,171739],{"class":70,"line":3165},[68,171740,3890],{"emptyLinePlaceholder":1567},[68,171742,171743],{"class":70,"line":3170},[68,171744,3890],{"emptyLinePlaceholder":1567},[68,171746,171747,171749,171751],{"class":70,"line":3184},[68,171748,160939],{"class":78},[68,171750,1685],{"class":316},[68,171752,154265],{"class":78},[68,171754,171755,171758,171760,171762,171764,171766,171768,171770,171772,171774,171776,171778,171780],{"class":70,"line":3189},[68,171756,171757],{"class":78},"students.append({",[68,171759,64157],{"class":1742},[68,171761,89],{"class":78},[68,171763,151111],{"class":1742},[68,171765,13923],{"class":78},[68,171767,70602],{"class":1742},[68,171769,89],{"class":78},[68,171771,2278],{"class":85},[68,171773,13923],{"class":78},[68,171775,152695],{"class":1742},[68,171777,89],{"class":78},[68,171779,2616],{"class":85},[68,171781,166375],{"class":78},[68,171783,171784],{"class":70,"line":3218},[68,171785,171786],{"class":78},"save_students(students)\n",[68,171788,171789,171791,171793,171796],{"class":70,"line":3223},[68,171790,31899],{"class":85},[68,171792,1640],{"class":78},[68,171794,171795],{"class":1742},"\"保存成功\"",[68,171797,1646],{"class":78},[14,171799,171801],{"id":171800},"_814-易错点","8.14 易错点",[263,171803,171804,171808,171814,171819,171826,171833],{},[27,171805,171806,170067],{},[65,171807,2422],{},[27,171809,171810,171811,29869],{},"读写中文要指定 ",[65,171812,171813],{},"encoding=\"utf-8\"",[27,171815,171816,171817,29869],{},"打开文件后要关闭，推荐使用 ",[65,171818,109307],{},[27,171820,171821,171822,171825],{},"读取大文件不要直接 ",[65,171823,171824],{},"read()"," 全部内容。",[27,171827,171828,171829,171832],{},"Windows 写 CSV 时建议加 ",[65,171830,171831],{},"newline=\"\"","，避免空行。",[27,171834,171835],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171837,171839],{"id":171838},"_815-本章练习","8.15 本章练习",[263,171841,171842,171849,171854,171857,171860],{},[27,171843,171844,171845,171848],{},"写入一个 ",[65,171846,171847],{},"students.txt","，每行保存一个学生姓名。",[27,171850,105830,171851,171853],{},[65,171852,171847],{}," 并输出所有学生。",[27,171855,171856],{},"把学生列表保存为 JSON 文件。",[27,171858,171859],{},"从 JSON 文件读取学生数据，计算平均分。",[27,171861,171862,171863,171866,171867,171870],{},"写一个日志函数 ",[65,171864,171865],{},"write_log(message)","，每次调用向 ",[65,171868,171869],{},"app.log"," 追加一行。",[1553,171872,171873],{},"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":63,"searchDepth":82,"depth":82,"links":171875},[171876,171877,171881,171882,171888,171889,171890,171891,171892,171893,171894,171895,171896,171897,171898],{"id":169387,"depth":82,"text":169388},{"id":169428,"depth":82,"text":169429,"children":171878},[171879,171880],{"id":169432,"depth":98,"text":169433},{"id":169466,"depth":98,"text":169467},{"id":169580,"depth":82,"text":169581},{"id":169673,"depth":82,"text":169674,"children":171883},[171884,171885,171886,171887],{"id":169677,"depth":98,"text":169678},{"id":169764,"depth":98,"text":169765},{"id":169834,"depth":98,"text":169835},{"id":169928,"depth":98,"text":169929},{"id":169998,"depth":82,"text":169999},{"id":170061,"depth":82,"text":170062},{"id":170222,"depth":82,"text":170223},{"id":170285,"depth":82,"text":170286},{"id":170401,"depth":82,"text":170402},{"id":170611,"depth":82,"text":170612},{"id":170923,"depth":82,"text":170924},{"id":171334,"depth":82,"text":171335},{"id":171552,"depth":82,"text":171553},{"id":171800,"depth":82,"text":171801},{"id":171838,"depth":82,"text":171839},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169379,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171905,"title":171906,"body":171907,"description":1564,"extension":1565,"meta":174093,"navigation":1567,"path":174094,"seo":174095,"stem":174096,"__hash__":174097},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171908,"toc":174060},[171909,171912,171916,171919,171922,172014,172016,172035,172040,172044,172047,172050,172079,172086,172089,172093,172096,172125,172127,172179,172185,172238,172242,172340,172343,172410,172414,172471,172473,172479,172483,172488,172494,172585,172590,172594,172597,172675,172678,172716,172720,172838,172841,172845,172848,172893,172896,172900,172905,172911,172961,172964,172995,172999,173003,173033,173037,173072,173076,173111,173151,173155,173171,173174,173178,173182,173261,173265,173306,173310,173365,173369,173403,173407,173437,173446,173453,173459,173516,173519,173527,173530,173534,173541,173544,173550,173553,173570,173575,173579,173585,173598,173601,173638,173641,173652,173655,173669,173672,173686,173690,173697,173730,173733,173735,173741,173744,173748,173750,173756,173761,173934,173938,174001,174005,174029,174033,174057],[10,171910,171906],{"id":171911},"_9-异常模块与包",[14,171913,171915],{"id":171914},"_91-什么是异常","9.1 什么是异常",[170,171917,171918],{},"异常是程序运行过程中出现的错误。",[170,171920,171921],{},"常见异常：",[128,171923,171924,171933],{},[131,171925,171926],{},[134,171927,171928,171931],{},[137,171929,171930],{},"异常",[137,171932,27355],{},[144,171934,171935,171945,171955,171964,171974,171984,171994,172004],{},[134,171936,171937,171942],{},[149,171938,171939],{},[65,171940,171941],{},"NameError",[149,171943,171944],{},"使用了未定义变量",[134,171946,171947,171952],{},[149,171948,171949],{},[65,171950,171951],{},"TypeError",[149,171953,171954],{},"类型不匹配",[134,171956,171957,171961],{},[149,171958,171959],{},[65,171960,156057],{},[149,171962,171963],{},"值不合法",[134,171965,171966,171971],{},[149,171967,171968],{},[65,171969,171970],{},"IndexError",[149,171972,171973],{},"列表索引越界",[134,171975,171976,171981],{},[149,171977,171978],{},[65,171979,171980],{},"KeyError",[149,171982,171983],{},"字典 key 不存在",[134,171985,171986,171991],{},[149,171987,171988],{},[65,171989,171990],{},"FileNotFoundError",[149,171992,171993],{},"文件不存在",[134,171995,171996,172001],{},[149,171997,171998],{},[65,171999,172000],{},"ZeroDivisionError",[149,172002,172003],{},"除数为 0",[134,172005,172006,172011],{},[149,172007,172008],{},[65,172009,172010],{},"ImportError",[149,172012,172013],{},"导入失败",[170,172015,16623],{},[58,172017,172019],{"className":31862,"code":172018,"language":31864,"meta":63,"style":63},"num = int(\"abc\")\n",[65,172020,172021],{"__ignoreMap":63},[68,172022,172023,172025,172027,172029,172031,172033],{"class":70,"line":71},[68,172024,157010],{"class":78},[68,172026,1685],{"class":316},[68,172028,3872],{"class":85},[68,172030,1640],{"class":78},[68,172032,157103],{"class":1742},[68,172034,1646],{"class":78},[170,172036,172037,172038,29869],{},"会触发 ",[65,172039,156057],{},[14,172041,172043],{"id":172042},"_92-为什么要处理异常","9.2 为什么要处理异常",[170,172045,172046],{},"如果不处理异常，程序会直接终止。",[170,172048,172049],{},"例如用户输入年龄：",[58,172051,172053],{"className":31862,"code":172052,"language":31864,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[65,172054,172055,172073],{"__ignoreMap":63},[68,172056,172057,172059,172061,172063,172065,172067,172069,172071],{"class":70,"line":71},[68,172058,147769],{"class":78},[68,172060,1685],{"class":316},[68,172062,3872],{"class":85},[68,172064,1640],{"class":78},[68,172066,55302],{"class":85},[68,172068,1640],{"class":78},[68,172070,153617],{"class":1742},[68,172072,31981],{"class":78},[68,172074,172075,172077],{"class":70,"line":82},[68,172076,31899],{"class":85},[68,172078,156984],{"class":78},[170,172080,172081,172082,172085],{},"用户输入 ",[65,172083,172084],{},"abc","，程序就会报错退出。",[170,172087,172088],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172090,172092],{"id":172091},"_93-try-except","9.3 try except",[170,172094,172095],{},"基础语法：",[58,172097,172099],{"className":31862,"code":172098,"language":31864,"meta":63,"style":63},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[65,172100,172101,172108,172113,172120],{"__ignoreMap":63},[68,172102,172103,172106],{"class":70,"line":71},[68,172104,172105],{"class":316},"try",[68,172107,5229],{"class":78},[68,172109,172110],{"class":70,"line":82},[68,172111,172112],{"class":78},"    可能出错的代码\n",[68,172114,172115,172118],{"class":70,"line":98},[68,172116,172117],{"class":316},"except",[68,172119,5229],{"class":78},[68,172121,172122],{"class":70,"line":104},[68,172123,172124],{"class":78},"    出错后的处理代码\n",[170,172126,16623],{},[58,172128,172130],{"className":31862,"code":172129,"language":31864,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[65,172131,172132,172138,172156,172162,172168],{"__ignoreMap":63},[68,172133,172134,172136],{"class":70,"line":71},[68,172135,172105],{"class":316},[68,172137,5229],{"class":78},[68,172139,172140,172142,172144,172146,172148,172150,172152,172154],{"class":70,"line":82},[68,172141,153609],{"class":78},[68,172143,1685],{"class":316},[68,172145,3872],{"class":85},[68,172147,1640],{"class":78},[68,172149,55302],{"class":85},[68,172151,1640],{"class":78},[68,172153,153617],{"class":1742},[68,172155,31981],{"class":78},[68,172157,172158,172160],{"class":70,"line":98},[68,172159,32783],{"class":85},[68,172161,156984],{"class":78},[68,172163,172164,172166],{"class":70,"line":104},[68,172165,172117],{"class":316},[68,172167,5229],{"class":78},[68,172169,172170,172172,172174,172177],{"class":70,"line":112},[68,172171,32783],{"class":85},[68,172173,1640],{"class":78},[68,172175,172176],{"class":1742},"\"年龄必须是数字\"",[68,172178,1646],{"class":78},[170,172180,172181,172182,172184],{},"不建议裸写 ",[65,172183,172117],{},"，最好指定异常类型。",[58,172186,172188],{"className":31862,"code":172187,"language":31864,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[65,172189,172190,172196,172214,172220,172228],{"__ignoreMap":63},[68,172191,172192,172194],{"class":70,"line":71},[68,172193,172105],{"class":316},[68,172195,5229],{"class":78},[68,172197,172198,172200,172202,172204,172206,172208,172210,172212],{"class":70,"line":82},[68,172199,153609],{"class":78},[68,172201,1685],{"class":316},[68,172203,3872],{"class":85},[68,172205,1640],{"class":78},[68,172207,55302],{"class":85},[68,172209,1640],{"class":78},[68,172211,153617],{"class":1742},[68,172213,31981],{"class":78},[68,172215,172216,172218],{"class":70,"line":98},[68,172217,32783],{"class":85},[68,172219,156984],{"class":78},[68,172221,172222,172224,172226],{"class":70,"line":104},[68,172223,172117],{"class":316},[68,172225,153449],{"class":85},[68,172227,5229],{"class":78},[68,172229,172230,172232,172234,172236],{"class":70,"line":112},[68,172231,32783],{"class":85},[68,172233,1640],{"class":78},[68,172235,172176],{"class":1742},[68,172237,1646],{"class":78},[14,172239,172241],{"id":172240},"_94-捕获多个异常","9.4 捕获多个异常",[58,172243,172245],{"className":31862,"code":172244,"language":31864,"meta":63,"style":63},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[65,172246,172247,172253,172274,172294,172301,172309,172320,172329],{"__ignoreMap":63},[68,172248,172249,172251],{"class":70,"line":71},[68,172250,172105],{"class":316},[68,172252,5229],{"class":78},[68,172254,172255,172258,172260,172262,172264,172266,172268,172270,172272],{"class":70,"line":82},[68,172256,172257],{"class":78},"    nums ",[68,172259,1685],{"class":316},[68,172261,53708],{"class":78},[68,172263,1846],{"class":85},[68,172265,13923],{"class":78},[68,172267,1715],{"class":85},[68,172269,13923],{"class":78},[68,172271,1709],{"class":85},[68,172273,34730],{"class":78},[68,172275,172276,172279,172281,172283,172285,172287,172289,172292],{"class":70,"line":98},[68,172277,172278],{"class":78},"    index ",[68,172280,1685],{"class":316},[68,172282,3872],{"class":85},[68,172284,1640],{"class":78},[68,172286,55302],{"class":85},[68,172288,1640],{"class":78},[68,172290,172291],{"class":1742},"\"请输入索引:\"",[68,172293,31981],{"class":78},[68,172295,172296,172298],{"class":70,"line":104},[68,172297,32783],{"class":85},[68,172299,172300],{"class":78},"(nums[index])\n",[68,172302,172303,172305,172307],{"class":70,"line":112},[68,172304,172117],{"class":316},[68,172306,153449],{"class":85},[68,172308,5229],{"class":78},[68,172310,172311,172313,172315,172318],{"class":70,"line":124},[68,172312,32783],{"class":85},[68,172314,1640],{"class":78},[68,172316,172317],{"class":1742},"\"索引必须是整数\"",[68,172319,1646],{"class":78},[68,172321,172322,172324,172327],{"class":70,"line":1496},[68,172323,172117],{"class":316},[68,172325,172326],{"class":85}," IndexError",[68,172328,5229],{"class":78},[68,172330,172331,172333,172335,172338],{"class":70,"line":1502},[68,172332,32783],{"class":85},[68,172334,1640],{"class":78},[68,172336,172337],{"class":1742},"\"索引越界\"",[68,172339,1646],{"class":78},[170,172341,172342],{},"多个异常使用相同处理逻辑：",[58,172344,172346],{"className":31862,"code":172345,"language":31864,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[65,172347,172348,172354,172372,172385,172399],{"__ignoreMap":63},[68,172349,172350,172352],{"class":70,"line":71},[68,172351,172105],{"class":316},[68,172353,5229],{"class":78},[68,172355,172356,172358,172360,172362,172364,172366,172368,172370],{"class":70,"line":82},[68,172357,47077],{"class":78},[68,172359,1685],{"class":316},[68,172361,3872],{"class":85},[68,172363,1640],{"class":78},[68,172365,55302],{"class":85},[68,172367,1640],{"class":78},[68,172369,157019],{"class":1742},[68,172371,31981],{"class":78},[68,172373,172374,172376,172378,172380,172382],{"class":70,"line":98},[68,172375,32783],{"class":85},[68,172377,1640],{"class":78},[68,172379,313],{"class":85},[68,172381,157269],{"class":316},[68,172383,172384],{"class":78}," num)\n",[68,172386,172387,172389,172391,172393,172395,172397],{"class":70,"line":104},[68,172388,172117],{"class":316},[68,172390,3149],{"class":78},[68,172392,156057],{"class":85},[68,172394,13923],{"class":78},[68,172396,172000],{"class":85},[68,172398,32270],{"class":78},[68,172400,172401,172403,172405,172408],{"class":70,"line":112},[68,172402,32783],{"class":85},[68,172404,1640],{"class":78},[68,172406,172407],{"class":1742},"\"输入不合法\"",[68,172409,1646],{"class":78},[14,172411,172413],{"id":172412},"_95-获取异常信息","9.5 获取异常信息",[58,172415,172417],{"className":31862,"code":172416,"language":31864,"meta":63,"style":63},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[65,172418,172419,172425,172439,172450],{"__ignoreMap":63},[68,172420,172421,172423],{"class":70,"line":71},[68,172422,172105],{"class":316},[68,172424,5229],{"class":78},[68,172426,172427,172429,172431,172433,172435,172437],{"class":70,"line":82},[68,172428,47077],{"class":78},[68,172430,1685],{"class":316},[68,172432,3872],{"class":85},[68,172434,1640],{"class":78},[68,172436,157103],{"class":1742},[68,172438,1646],{"class":78},[68,172440,172441,172443,172445,172447],{"class":70,"line":98},[68,172442,172117],{"class":316},[68,172444,153449],{"class":85},[68,172446,66082],{"class":316},[68,172448,172449],{"class":78}," e:\n",[68,172451,172452,172454,172456,172458,172461,172463,172465,172467,172469],{"class":70,"line":104},[68,172453,32783],{"class":85},[68,172455,1640],{"class":78},[68,172457,1691],{"class":316},[68,172459,172460],{"class":1742},"\"出错了:",[68,172462,2523],{"class":85},[68,172464,1712],{"class":78},[68,172466,2573],{"class":85},[68,172468,1880],{"class":1742},[68,172470,1646],{"class":78},[170,172472,147680],{},[58,172474,172477],{"className":172475,"code":172476,"language":6676,"meta":63},[6674],"出错了:invalid literal for int() with base 10: 'abc'\n",[65,172478,172476],{"__ignoreMap":63},[14,172480,172482],{"id":172481},"_96-else和finally","9.6 else和finally",[170,172484,172485,172487],{},[65,172486,3192],{},"：没有异常时执行。",[170,172489,172490,172493],{},[65,172491,172492],{},"finally","：无论是否异常都会执行。",[58,172495,172497],{"className":31862,"code":172496,"language":31864,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[65,172498,172499,172505,172523,172531,172541,172547,172568,172574],{"__ignoreMap":63},[68,172500,172501,172503],{"class":70,"line":71},[68,172502,172105],{"class":316},[68,172504,5229],{"class":78},[68,172506,172507,172509,172511,172513,172515,172517,172519,172521],{"class":70,"line":82},[68,172508,47077],{"class":78},[68,172510,1685],{"class":316},[68,172512,3872],{"class":85},[68,172514,1640],{"class":78},[68,172516,55302],{"class":85},[68,172518,1640],{"class":78},[68,172520,157019],{"class":1742},[68,172522,31981],{"class":78},[68,172524,172525,172527,172529],{"class":70,"line":98},[68,172526,172117],{"class":316},[68,172528,153449],{"class":85},[68,172530,5229],{"class":78},[68,172532,172533,172535,172537,172539],{"class":70,"line":104},[68,172534,32783],{"class":85},[68,172536,1640],{"class":78},[68,172538,154437],{"class":1742},[68,172540,1646],{"class":78},[68,172542,172543,172545],{"class":70,"line":112},[68,172544,3192],{"class":316},[68,172546,5229],{"class":78},[68,172548,172549,172551,172553,172555,172558,172560,172562,172564,172566],{"class":70,"line":124},[68,172550,32783],{"class":85},[68,172552,1640],{"class":78},[68,172554,1691],{"class":316},[68,172556,172557],{"class":1742},"\"输入正确:",[68,172559,2523],{"class":85},[68,172561,3156],{"class":78},[68,172563,2573],{"class":85},[68,172565,1880],{"class":1742},[68,172567,1646],{"class":78},[68,172569,172570,172572],{"class":70,"line":1496},[68,172571,172492],{"class":316},[68,172573,5229],{"class":78},[68,172575,172576,172578,172580,172583],{"class":70,"line":1502},[68,172577,32783],{"class":85},[68,172579,1640],{"class":78},[68,172581,172582],{"class":1742},"\"程序结束\"",[68,172584,1646],{"class":78},[170,172586,172587,172589],{},[65,172588,172492],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172591,172593],{"id":172592},"_97-抛出异常","9.7 抛出异常",[170,172595,172596],{},"程序可以主动抛出异常。",[58,172598,172600],{"className":31862,"code":172599,"language":31864,"meta":63,"style":63},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[65,172601,172602,172611,172623,172636,172656,172660,172664],{"__ignoreMap":63},[68,172603,172604,172606,172609],{"class":70,"line":71},[68,172605,33431],{"class":316},[68,172607,172608],{"class":74}," set_age",[68,172610,162638],{"class":78},[68,172612,172613,172615,172617,172619,172621],{"class":70,"line":82},[68,172614,4591],{"class":316},[68,172616,17194],{"class":78},[68,172618,2537],{"class":316},[68,172620,5583],{"class":85},[68,172622,5229],{"class":78},[68,172624,172625,172627,172629,172631,172634],{"class":70,"line":98},[68,172626,104907],{"class":316},[68,172628,153449],{"class":85},[68,172630,1640],{"class":78},[68,172632,172633],{"class":1742},"\"年龄不能为负数\"",[68,172635,1646],{"class":78},[68,172637,172638,172640,172642,172644,172646,172648,172650,172652,172654],{"class":70,"line":104},[68,172639,32783],{"class":85},[68,172641,1640],{"class":78},[68,172643,1691],{"class":316},[68,172645,163206],{"class":1742},[68,172647,2523],{"class":85},[68,172649,71699],{"class":78},[68,172651,2573],{"class":85},[68,172653,1880],{"class":1742},[68,172655,1646],{"class":78},[68,172657,172658],{"class":70,"line":112},[68,172659,3890],{"emptyLinePlaceholder":1567},[68,172661,172662],{"class":70,"line":124},[68,172663,3890],{"emptyLinePlaceholder":1567},[68,172665,172666,172669,172671,172673],{"class":70,"line":1496},[68,172667,172668],{"class":78},"set_age(",[68,172670,2160],{"class":316},[68,172672,1846],{"class":85},[68,172674,1646],{"class":78},[170,172676,172677],{},"调用者可以捕获：",[58,172679,172681],{"className":31862,"code":172680,"language":31864,"meta":63,"style":63},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[65,172682,172683,172689,172700,172710],{"__ignoreMap":63},[68,172684,172685,172687],{"class":70,"line":71},[68,172686,172105],{"class":316},[68,172688,5229],{"class":78},[68,172690,172691,172694,172696,172698],{"class":70,"line":82},[68,172692,172693],{"class":78},"    set_age(",[68,172695,2160],{"class":316},[68,172697,1846],{"class":85},[68,172699,1646],{"class":78},[68,172701,172702,172704,172706,172708],{"class":70,"line":98},[68,172703,172117],{"class":316},[68,172705,153449],{"class":85},[68,172707,66082],{"class":316},[68,172709,172449],{"class":78},[68,172711,172712,172714],{"class":70,"line":104},[68,172713,32783],{"class":85},[68,172715,68477],{"class":78},[14,172717,172719],{"id":172718},"_98-自定义异常","9.8 自定义异常",[58,172721,172723],{"className":31862,"code":172722,"language":31864,"meta":63,"style":63},"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",[65,172724,172725,172739,172743,172747,172751,172759,172769,172780,172790,172794,172798,172804,172821,172832],{"__ignoreMap":63},[68,172726,172727,172729,172732,172734,172737],{"class":70,"line":71},[68,172728,16182],{"class":316},[68,172730,172731],{"class":74}," BalanceNotEnoughError",[68,172733,1640],{"class":78},[68,172735,172736],{"class":85},"Exception",[68,172738,32270],{"class":78},[68,172740,172741],{"class":70,"line":82},[68,172742,150760],{"class":316},[68,172744,172745],{"class":70,"line":98},[68,172746,3890],{"emptyLinePlaceholder":1567},[68,172748,172749],{"class":70,"line":104},[68,172750,3890],{"emptyLinePlaceholder":1567},[68,172752,172753,172755,172757],{"class":70,"line":112},[68,172754,33431],{"class":316},[68,172756,151409],{"class":74},[68,172758,164035],{"class":78},[68,172760,172761,172763,172765,172767],{"class":70,"line":124},[68,172762,4591],{"class":316},[68,172764,151365],{"class":78},[68,172766,2587],{"class":316},[68,172768,163812],{"class":78},[68,172770,172771,172773,172776,172778],{"class":70,"line":1496},[68,172772,104907],{"class":316},[68,172774,172775],{"class":78}," BalanceNotEnoughError(",[68,172777,151460],{"class":1742},[68,172779,1646],{"class":78},[68,172781,172782,172784,172786,172788],{"class":70,"line":1502},[68,172783,5580],{"class":316},[68,172785,164042],{"class":78},[68,172787,2160],{"class":316},[68,172789,151398],{"class":78},[68,172791,172792],{"class":70,"line":1510},[68,172793,3890],{"emptyLinePlaceholder":1567},[68,172795,172796],{"class":70,"line":1521},[68,172797,3890],{"emptyLinePlaceholder":1567},[68,172799,172800,172802],{"class":70,"line":3103},[68,172801,172105],{"class":316},[68,172803,5229],{"class":78},[68,172805,172806,172808,172810,172813,172815,172817,172819],{"class":70,"line":3108},[68,172807,163713],{"class":78},[68,172809,1685],{"class":316},[68,172811,172812],{"class":78}," withdraw(",[68,172814,1940],{"class":85},[68,172816,13923],{"class":78},[68,172818,3213],{"class":85},[68,172820,1646],{"class":78},[68,172822,172823,172825,172828,172830],{"class":70,"line":3114},[68,172824,172117],{"class":316},[68,172826,172827],{"class":78}," BalanceNotEnoughError ",[68,172829,32867],{"class":316},[68,172831,172449],{"class":78},[68,172833,172834,172836],{"class":70,"line":3119},[68,172835,32783],{"class":85},[68,172837,68477],{"class":78},[170,172839,172840],{},"入门阶段大多数情况使用内置异常即可。",[14,172842,172844],{"id":172843},"_99-traceback","9.9 traceback",[170,172846,172847],{},"调试时可以输出完整异常堆栈。",[58,172849,172851],{"className":31862,"code":172850,"language":31864,"meta":63,"style":63},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[65,172852,172853,172860,172864,172870,172880,172888],{"__ignoreMap":63},[68,172854,172855,172857],{"class":70,"line":71},[68,172856,31876],{"class":316},[68,172858,172859],{"class":78}," traceback\n",[68,172861,172862],{"class":70,"line":82},[68,172863,3890],{"emptyLinePlaceholder":1567},[68,172865,172866,172868],{"class":70,"line":98},[68,172867,172105],{"class":316},[68,172869,5229],{"class":78},[68,172871,172872,172874,172876,172878],{"class":70,"line":104},[68,172873,3475],{"class":85},[68,172875,1640],{"class":78},[68,172877,157103],{"class":1742},[68,172879,1646],{"class":78},[68,172881,172882,172884,172886],{"class":70,"line":112},[68,172883,172117],{"class":316},[68,172885,153449],{"class":85},[68,172887,5229],{"class":78},[68,172889,172890],{"class":70,"line":124},[68,172891,172892],{"class":78},"    traceback.print_exc()\n",[170,172894,172895],{},"日志系统中常把异常堆栈记录到文件。",[14,172897,172899],{"id":172898},"_910-什么是模块","9.10 什么是模块",[170,172901,172902,172903,127457],{},"模块就是一个 ",[65,172904,147575],{},[170,172906,172907,172908,26104],{},"例如创建 ",[65,172909,172910],{},"my_math.py",[58,172912,172914],{"className":31862,"code":172913,"language":31864,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[65,172915,172916,172924,172934,172938,172942,172951],{"__ignoreMap":63},[68,172917,172918,172920,172922],{"class":70,"line":71},[68,172919,33431],{"class":316},[68,172921,6698],{"class":74},[68,172923,152316],{"class":78},[68,172925,172926,172928,172930,172932],{"class":70,"line":82},[68,172927,5580],{"class":316},[68,172929,12357],{"class":78},[68,172931,2109],{"class":316},[68,172933,152327],{"class":78},[68,172935,172936],{"class":70,"line":98},[68,172937,3890],{"emptyLinePlaceholder":1567},[68,172939,172940],{"class":70,"line":104},[68,172941,3890],{"emptyLinePlaceholder":1567},[68,172943,172944,172946,172949],{"class":70,"line":112},[68,172945,33431],{"class":316},[68,172947,172948],{"class":74}," sub",[68,172950,152316],{"class":78},[68,172952,172953,172955,172957,172959],{"class":70,"line":124},[68,172954,5580],{"class":316},[68,172956,12357],{"class":78},[68,172958,2160],{"class":316},[68,172960,152327],{"class":78},[170,172962,172963],{},"在另一个文件中导入：",[58,172965,172967],{"className":31862,"code":172966,"language":31864,"meta":63,"style":63},"import my_math\n\nprint(my_math.add(1, 2))\n",[65,172968,172969,172976,172980],{"__ignoreMap":63},[68,172970,172971,172973],{"class":70,"line":71},[68,172972,31876],{"class":316},[68,172974,172975],{"class":78}," my_math\n",[68,172977,172978],{"class":70,"line":82},[68,172979,3890],{"emptyLinePlaceholder":1567},[68,172981,172982,172984,172987,172989,172991,172993],{"class":70,"line":98},[68,172983,31899],{"class":85},[68,172985,172986],{"class":78},"(my_math.add(",[68,172988,1846],{"class":85},[68,172990,13923],{"class":78},[68,172992,1715],{"class":85},[68,172994,31981],{"class":78},[14,172996,172998],{"id":172997},"_911-import导入","9.11 import导入",[19,173000,173002],{"id":173001},"_9111-导入模块","9.11.1 导入模块",[58,173004,173006],{"className":31862,"code":173005,"language":31864,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\n",[65,173007,173008,173014,173018],{"__ignoreMap":63},[68,173009,173010,173012],{"class":70,"line":71},[68,173011,31876],{"class":316},[68,173013,46812],{"class":78},[68,173015,173016],{"class":70,"line":82},[68,173017,3890],{"emptyLinePlaceholder":1567},[68,173019,173020,173022,173025,173027,173029,173031],{"class":70,"line":98},[68,173021,31899],{"class":85},[68,173023,173024],{"class":78},"(random.randint(",[68,173026,1846],{"class":85},[68,173028,13923],{"class":78},[68,173030,313],{"class":85},[68,173032,31981],{"class":78},[19,173034,173036],{"id":173035},"_9112-导入指定内容","9.11.2 导入指定内容",[58,173038,173040],{"className":31862,"code":173039,"language":31864,"meta":63,"style":63},"from random import randint\n\nprint(randint(1, 10))\n",[65,173041,173042,173053,173057],{"__ignoreMap":63},[68,173043,173044,173046,173048,173050],{"class":70,"line":71},[68,173045,32221],{"class":316},[68,173047,59274],{"class":78},[68,173049,31876],{"class":316},[68,173051,173052],{"class":78}," randint\n",[68,173054,173055],{"class":70,"line":82},[68,173056,3890],{"emptyLinePlaceholder":1567},[68,173058,173059,173061,173064,173066,173068,173070],{"class":70,"line":98},[68,173060,31899],{"class":85},[68,173062,173063],{"class":78},"(randint(",[68,173065,1846],{"class":85},[68,173067,13923],{"class":78},[68,173069,313],{"class":85},[68,173071,31981],{"class":78},[19,173073,173075],{"id":173074},"_9113-起别名","9.11.3 起别名",[58,173077,173079],{"className":31862,"code":173078,"language":31864,"meta":63,"style":63},"import random as rd\n\nprint(rd.randint(1, 10))\n",[65,173080,173081,173092,173096],{"__ignoreMap":63},[68,173082,173083,173085,173087,173089],{"class":70,"line":71},[68,173084,31876],{"class":316},[68,173086,59274],{"class":78},[68,173088,32867],{"class":316},[68,173090,173091],{"class":78}," rd\n",[68,173093,173094],{"class":70,"line":82},[68,173095,3890],{"emptyLinePlaceholder":1567},[68,173097,173098,173100,173103,173105,173107,173109],{"class":70,"line":98},[68,173099,31899],{"class":85},[68,173101,173102],{"class":78},"(rd.randint(",[68,173104,1846],{"class":85},[68,173106,13923],{"class":78},[68,173108,313],{"class":85},[68,173110,31981],{"class":78},[58,173112,173114],{"className":31862,"code":173113,"language":31864,"meta":63,"style":63},"from random import randint as rint\n\nprint(rint(1, 10))\n",[65,173115,173116,173132,173136],{"__ignoreMap":63},[68,173117,173118,173120,173122,173124,173127,173129],{"class":70,"line":71},[68,173119,32221],{"class":316},[68,173121,59274],{"class":78},[68,173123,31876],{"class":316},[68,173125,173126],{"class":78}," randint ",[68,173128,32867],{"class":316},[68,173130,173131],{"class":78}," rint\n",[68,173133,173134],{"class":70,"line":82},[68,173135,3890],{"emptyLinePlaceholder":1567},[68,173137,173138,173140,173143,173145,173147,173149],{"class":70,"line":98},[68,173139,31899],{"class":85},[68,173141,173142],{"class":78},"(rint(",[68,173144,1846],{"class":85},[68,173146,13923],{"class":78},[68,173148,313],{"class":85},[68,173150,31981],{"class":78},[19,173152,173154],{"id":173153},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[58,173156,173158],{"className":31862,"code":173157,"language":31864,"meta":63,"style":63},"from random import *\n",[65,173159,173160],{"__ignoreMap":63},[68,173161,173162,173164,173166,173168],{"class":70,"line":71},[68,173163,32221],{"class":316},[68,173165,59274],{"class":78},[68,173167,31876],{"class":316},[68,173169,173170],{"class":316}," *\n",[170,173172,173173],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173175,173177],{"id":173176},"_912-常用内置模块","9.12 常用内置模块",[19,173179,173181],{"id":173180},"_9121-random","9.12.1 random",[58,173183,173185],{"className":31862,"code":173184,"language":31864,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[65,173186,173187,173193,173197,173211,173230],{"__ignoreMap":63},[68,173188,173189,173191],{"class":70,"line":71},[68,173190,31876],{"class":316},[68,173192,46812],{"class":78},[68,173194,173195],{"class":70,"line":82},[68,173196,3890],{"emptyLinePlaceholder":1567},[68,173198,173199,173201,173203,173205,173207,173209],{"class":70,"line":98},[68,173200,31899],{"class":85},[68,173202,173024],{"class":78},[68,173204,1846],{"class":85},[68,173206,13923],{"class":78},[68,173208,313],{"class":85},[68,173210,31981],{"class":78},[68,173212,173213,173215,173218,173220,173222,173224,173226,173228],{"class":70,"line":104},[68,173214,31899],{"class":85},[68,173216,173217],{"class":78},"(random.choice([",[68,173219,151111],{"class":1742},[68,173221,13923],{"class":78},[68,173223,152159],{"class":1742},[68,173225,13923],{"class":78},[68,173227,160954],{"class":1742},[68,173229,34627],{"class":78},[68,173231,173232,173234,173237,173239,173241,173243,173245,173247,173249,173251,173253,173255,173257,173259],{"class":70,"line":112},[68,173233,31899],{"class":85},[68,173235,173236],{"class":78},"(random.sample([",[68,173238,1846],{"class":85},[68,173240,13923],{"class":78},[68,173242,1715],{"class":85},[68,173244,13923],{"class":78},[68,173246,1709],{"class":85},[68,173248,13923],{"class":78},[68,173250,1922],{"class":85},[68,173252,13923],{"class":78},[68,173254,1948],{"class":85},[68,173256,113676],{"class":78},[68,173258,1715],{"class":85},[68,173260,31981],{"class":78},[19,173262,173264],{"id":173263},"_9122-time","9.12.2 time",[58,173266,173268],{"className":31862,"code":173267,"language":31864,"meta":63,"style":63},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[65,173269,173270,173276,173280,173287,173295],{"__ignoreMap":63},[68,173271,173272,173274],{"class":70,"line":71},[68,173273,31876],{"class":316},[68,173275,33313],{"class":78},[68,173277,173278],{"class":70,"line":82},[68,173279,3890],{"emptyLinePlaceholder":1567},[68,173281,173282,173284],{"class":70,"line":98},[68,173283,31899],{"class":85},[68,173285,173286],{"class":78},"(time.time())\n",[68,173288,173289,173291,173293],{"class":70,"line":104},[68,173290,96546],{"class":78},[68,173292,1846],{"class":85},[68,173294,1646],{"class":78},[68,173296,173297,173299,173301,173304],{"class":70,"line":112},[68,173298,31899],{"class":85},[68,173300,1640],{"class":78},[68,173302,173303],{"class":1742},"\"1秒后执行\"",[68,173305,1646],{"class":78},[19,173307,173309],{"id":173308},"_9123-datetime","9.12.3 datetime",[58,173311,173313],{"className":31862,"code":173312,"language":31864,"meta":63,"style":63},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[65,173314,173315,173327,173331,173341,173348],{"__ignoreMap":63},[68,173316,173317,173319,173322,173324],{"class":70,"line":71},[68,173318,32221],{"class":316},[68,173320,173321],{"class":78}," datetime ",[68,173323,31876],{"class":316},[68,173325,173326],{"class":78}," datetime\n",[68,173328,173329],{"class":70,"line":82},[68,173330,3890],{"emptyLinePlaceholder":1567},[68,173332,173333,173336,173338],{"class":70,"line":98},[68,173334,173335],{"class":78},"now ",[68,173337,1685],{"class":316},[68,173339,173340],{"class":78}," datetime.now()\n",[68,173342,173343,173345],{"class":70,"line":104},[68,173344,31899],{"class":85},[68,173346,173347],{"class":78},"(now)\n",[68,173349,173350,173352,173355,173358,173360,173363],{"class":70,"line":112},[68,173351,31899],{"class":85},[68,173353,173354],{"class":78},"(now.strftime(",[68,173356,173357],{"class":1742},"\"%Y-%m-",[68,173359,157914],{"class":85},[68,173361,173362],{"class":1742}," %H:%M:%S\"",[68,173364,31981],{"class":78},[19,173366,173368],{"id":173367},"_9124-os","9.12.4 os",[58,173370,173372],{"className":31862,"code":173371,"language":31864,"meta":63,"style":63},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[65,173373,173374,173380,173384,173391],{"__ignoreMap":63},[68,173375,173376,173378],{"class":70,"line":71},[68,173377,31876],{"class":316},[68,173379,46789],{"class":78},[68,173381,173382],{"class":70,"line":82},[68,173383,3890],{"emptyLinePlaceholder":1567},[68,173385,173386,173388],{"class":70,"line":98},[68,173387,31899],{"class":85},[68,173389,173390],{"class":78},"(os.getcwd())\n",[68,173392,173393,173395,173398,173401],{"class":70,"line":104},[68,173394,31899],{"class":85},[68,173396,173397],{"class":78},"(os.listdir(",[68,173399,173400],{"class":1742},"\".\"",[68,173402,31981],{"class":78},[19,173404,173406],{"id":173405},"_9125-sys","9.12.5 sys",[58,173408,173410],{"className":31862,"code":173409,"language":31864,"meta":63,"style":63},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[65,173411,173412,173419,173423,173430],{"__ignoreMap":63},[68,173413,173414,173416],{"class":70,"line":71},[68,173415,31876],{"class":316},[68,173417,173418],{"class":78}," sys\n",[68,173420,173421],{"class":70,"line":82},[68,173422,3890],{"emptyLinePlaceholder":1567},[68,173424,173425,173427],{"class":70,"line":98},[68,173426,31899],{"class":85},[68,173428,173429],{"class":78},"(sys.version)\n",[68,173431,173432,173434],{"class":70,"line":104},[68,173433,31899],{"class":85},[68,173435,173436],{"class":78},"(sys.path)\n",[14,173438,173440,173441,173443,173444,1880],{"id":173439},"_913-if-name-main","9.13 if ",[268,173442,81287],{}," == \"",[268,173445,103533],{},[170,173447,173448,173449,173452],{},"模块被直接运行和被导入时，",[65,173450,173451],{},"__name__"," 的值不同。",[170,173454,173455,173456,26104],{},"创建 ",[65,173457,173458],{},"my_module.py",[58,173460,173462],{"className":31862,"code":173461,"language":31864,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[65,173463,173464,173472,173482,173486,173490,173502],{"__ignoreMap":63},[68,173465,173466,173468,173470],{"class":70,"line":71},[68,173467,33431],{"class":316},[68,173469,6698],{"class":74},[68,173471,152316],{"class":78},[68,173473,173474,173476,173478,173480],{"class":70,"line":82},[68,173475,5580],{"class":316},[68,173477,12357],{"class":78},[68,173479,2109],{"class":316},[68,173481,152327],{"class":78},[68,173483,173484],{"class":70,"line":98},[68,173485,3890],{"emptyLinePlaceholder":1567},[68,173487,173488],{"class":70,"line":104},[68,173489,3890],{"emptyLinePlaceholder":1567},[68,173491,173492,173494,173496,173498,173500],{"class":70,"line":112},[68,173493,3023],{"class":316},[68,173495,32704],{"class":85},[68,173497,103034],{"class":316},[68,173499,103037],{"class":1742},[68,173501,5229],{"class":78},[68,173503,173504,173506,173508,173510,173512,173514],{"class":70,"line":124},[68,173505,32783],{"class":85},[68,173507,167823],{"class":78},[68,173509,1846],{"class":85},[68,173511,13923],{"class":78},[68,173513,1715],{"class":85},[68,173515,31981],{"class":78},[170,173517,173518],{},"作用：",[263,173520,173521,173524],{},[27,173522,173523],{},"直接运行该文件时，执行测试代码。",[27,173525,173526],{},"被其他文件导入时，不执行测试代码。",[170,173528,173529],{},"这是写模块时很常用的习惯。",[14,173531,173533],{"id":173532},"_914-包","9.14 包",[170,173535,173536,173537,173540],{},"包是包含 ",[65,173538,173539],{},"__init__.py"," 的目录，用于组织多个模块。",[170,173542,173543],{},"目录结构：",[58,173545,173548],{"className":173546,"code":173547,"language":6676,"meta":63},[6674],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[65,173549,173547],{"__ignoreMap":63},[170,173551,173552],{},"导入：",[58,173554,173556],{"className":31862,"code":173555,"language":31864,"meta":63,"style":63},"from utils.file_utils import read_file\n",[65,173557,173558],{"__ignoreMap":63},[68,173559,173560,173562,173565,173567],{"class":70,"line":71},[68,173561,32221],{"class":316},[68,173563,173564],{"class":78}," utils.file_utils ",[68,173566,31876],{"class":316},[68,173568,173569],{"class":78}," read_file\n",[170,173571,173572,173574],{},[65,173573,173539],{}," 可以为空，也可以写包初始化逻辑。",[14,173576,173578],{"id":173577},"_915-第三方包","9.15 第三方包",[170,173580,173581,173582,173584],{},"第三方包通过 ",[65,173583,25316],{}," 安装。",[58,173586,173588],{"className":25307,"code":173587,"language":25309,"meta":63,"style":63},"pip install requests\n",[65,173589,173590],{"__ignoreMap":63},[68,173591,173592,173594,173596],{"class":70,"line":71},[68,173593,25316],{"class":74},[68,173595,25319],{"class":1742},[68,173597,147321],{"class":1742},[170,173599,173600],{},"使用：",[58,173602,173604],{"className":31862,"code":173603,"language":31864,"meta":63,"style":63},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[65,173605,173606,173612,173616,173631],{"__ignoreMap":63},[68,173607,173608,173610],{"class":70,"line":71},[68,173609,31876],{"class":316},[68,173611,147321],{"class":78},[68,173613,173614],{"class":70,"line":82},[68,173615,3890],{"emptyLinePlaceholder":1567},[68,173617,173618,173621,173623,173626,173629],{"class":70,"line":98},[68,173619,173620],{"class":78},"response ",[68,173622,1685],{"class":316},[68,173624,173625],{"class":78}," requests.get(",[68,173627,173628],{"class":1742},"\"https:\u002F\u002Fwww.example.com\"",[68,173630,1646],{"class":78},[68,173632,173633,173635],{"class":70,"line":104},[68,173634,31899],{"class":85},[68,173636,173637],{"class":78},"(response.status_code)\n",[170,173639,173640],{},"查看已安装包：",[58,173642,173644],{"className":25307,"code":173643,"language":25309,"meta":63,"style":63},"pip list\n",[65,173645,173646],{"__ignoreMap":63},[68,173647,173648,173650],{"class":70,"line":71},[68,173649,25316],{"class":74},[68,173651,120429],{"class":1742},[170,173653,173654],{},"导出项目依赖：",[58,173656,173657],{"className":25307,"code":147516,"language":25309,"meta":63,"style":63},[65,173658,173659],{"__ignoreMap":63},[68,173660,173661,173663,173665,173667],{"class":70,"line":71},[68,173662,25316],{"class":74},[68,173664,147525],{"class":1742},[68,173666,27708],{"class":316},[68,173668,147530],{"class":1742},[170,173670,173671],{},"安装项目依赖：",[58,173673,173674],{"className":25307,"code":147536,"language":25309,"meta":63,"style":63},[65,173675,173676],{"__ignoreMap":63},[68,173677,173678,173680,173682,173684],{"class":70,"line":71},[68,173679,25316],{"class":74},[68,173681,25319],{"class":1742},[68,173683,121113],{"class":85},[68,173685,147530],{"class":1742},[14,173687,173689],{"id":173688},"_916-模块搜索路径","9.16 模块搜索路径",[170,173691,173692,173693,173696],{},"Python 导入模块时会在 ",[65,173694,173695],{},"sys.path"," 中查找。",[58,173698,173700],{"className":31862,"code":173699,"language":31864,"meta":63,"style":63},"import sys\n\nfor path in sys.path:\n    print(path)\n",[65,173701,173702,173708,173712,173724],{"__ignoreMap":63},[68,173703,173704,173706],{"class":70,"line":71},[68,173705,31876],{"class":316},[68,173707,173418],{"class":78},[68,173709,173710],{"class":70,"line":82},[68,173711,3890],{"emptyLinePlaceholder":1567},[68,173713,173714,173716,173719,173721],{"class":70,"line":98},[68,173715,4515],{"class":316},[68,173717,173718],{"class":78}," path ",[68,173720,27529],{"class":316},[68,173722,173723],{"class":78}," sys.path:\n",[68,173725,173726,173728],{"class":70,"line":104},[68,173727,32783],{"class":85},[68,173729,170452],{"class":78},[170,173731,173732],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[170,173734,158846],{},[58,173736,173739],{"className":173737,"code":173738,"language":6676,"meta":63},[6674],"random.py\njson.py\ntime.py\n",[65,173740,173738],{"__ignoreMap":63},[170,173742,173743],{},"这些文件名可能导致导入异常。",[14,173745,173747],{"id":173746},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[170,173749,173543],{},[58,173751,173754],{"className":173752,"code":173753,"language":6676,"meta":63},[6674],"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",[65,173755,173753],{"__ignoreMap":63},[170,173757,173758,26104],{},[65,173759,173760],{},"utils\u002Ffile_utils.py",[58,173762,173764],{"className":31862,"code":173763,"language":31864,"meta":63,"style":63},"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",[65,173765,173766,173772,173782,173786,173790,173800,173810,173818,173824,173828,173855,173865,173869,173873,173883,173909],{"__ignoreMap":63},[68,173767,173768,173770],{"class":70,"line":71},[68,173769,31876],{"class":316},[68,173771,148314],{"class":78},[68,173773,173774,173776,173778,173780],{"class":70,"line":82},[68,173775,32221],{"class":316},[68,173777,109785],{"class":78},[68,173779,31876],{"class":316},[68,173781,109790],{"class":78},[68,173783,173784],{"class":70,"line":98},[68,173785,3890],{"emptyLinePlaceholder":1567},[68,173787,173788],{"class":70,"line":104},[68,173789,3890],{"emptyLinePlaceholder":1567},[68,173791,173792,173794,173797],{"class":70,"line":112},[68,173793,33431],{"class":316},[68,173795,173796],{"class":74}," read_json",[68,173798,173799],{"class":78},"(path):\n",[68,173801,173802,173805,173807],{"class":70,"line":124},[68,173803,173804],{"class":78},"    path ",[68,173806,1685],{"class":316},[68,173808,173809],{"class":78}," Path(path)\n",[68,173811,173812,173814,173816],{"class":70,"line":1496},[68,173813,4591],{"class":316},[68,173815,40414],{"class":316},[68,173817,170533],{"class":78},[68,173819,173820,173822],{"class":70,"line":1502},[68,173821,16240],{"class":316},[68,173823,53320],{"class":78},[68,173825,173826],{"class":70,"line":1510},[68,173827,3890],{"emptyLinePlaceholder":1567},[68,173829,173830,173832,173834,173837,173839,173841,173843,173845,173847,173849,173851,173853],{"class":70,"line":1521},[68,173831,35662],{"class":316},[68,173833,148014],{"class":85},[68,173835,173836],{"class":78},"(path, ",[68,173838,148024],{"class":1742},[68,173840,13923],{"class":78},[68,173842,148029],{"class":6705},[68,173844,1685],{"class":316},[68,173846,148034],{"class":1742},[68,173848,15202],{"class":78},[68,173850,32867],{"class":316},[68,173852,149376],{"class":6705},[68,173854,5229],{"class":78},[68,173856,173857,173859,173861,173863],{"class":70,"line":3103},[68,173858,16240],{"class":316},[68,173860,149387],{"class":78},[68,173862,46838],{"class":6705},[68,173864,1646],{"class":78},[68,173866,173867],{"class":70,"line":3108},[68,173868,3890],{"emptyLinePlaceholder":1567},[68,173870,173871],{"class":70,"line":3114},[68,173872,3890],{"emptyLinePlaceholder":1567},[68,173874,173875,173877,173880],{"class":70,"line":3119},[68,173876,33431],{"class":316},[68,173878,173879],{"class":74}," write_json",[68,173881,173882],{"class":78},"(path, data):\n",[68,173884,173885,173887,173889,173891,173893,173895,173897,173899,173901,173903,173905,173907],{"class":70,"line":3133},[68,173886,35662],{"class":316},[68,173888,148014],{"class":85},[68,173890,173836],{"class":78},[68,173892,153199],{"class":1742},[68,173894,13923],{"class":78},[68,173896,148029],{"class":6705},[68,173898,1685],{"class":316},[68,173900,148034],{"class":1742},[68,173902,15202],{"class":78},[68,173904,32867],{"class":316},[68,173906,149376],{"class":6705},[68,173908,5229],{"class":78},[68,173910,173911,173914,173916,173918,173920,173922,173924,173926,173928,173930,173932],{"class":70,"line":3138},[68,173912,173913],{"class":78},"        json.dump(data, ",[68,173915,46838],{"class":6705},[68,173917,13923],{"class":78},[68,173919,148360],{"class":6705},[68,173921,1685],{"class":316},[68,173923,35471],{"class":85},[68,173925,13923],{"class":78},[68,173927,153235],{"class":6705},[68,173929,1685],{"class":316},[68,173931,1715],{"class":85},[68,173933,1646],{"class":78},[170,173935,173936,26104],{},[65,173937,155830],{},[58,173939,173941],{"className":31862,"code":173940,"language":31864,"meta":63,"style":63},"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",[65,173942,173943,173954,173958,173971,173991],{"__ignoreMap":63},[68,173944,173945,173947,173949,173951],{"class":70,"line":71},[68,173946,32221],{"class":316},[68,173948,173564],{"class":78},[68,173950,31876],{"class":316},[68,173952,173953],{"class":78}," read_json, write_json\n",[68,173955,173956],{"class":70,"line":82},[68,173957,3890],{"emptyLinePlaceholder":1567},[68,173959,173960,173962,173964,173967,173969],{"class":70,"line":98},[68,173961,160939],{"class":78},[68,173963,1685],{"class":316},[68,173965,173966],{"class":78}," read_json(",[68,173968,153054],{"class":1742},[68,173970,1646],{"class":78},[68,173972,173973,173975,173977,173979,173981,173983,173985,173987,173989],{"class":70,"line":104},[68,173974,171757],{"class":78},[68,173976,64157],{"class":1742},[68,173978,89],{"class":78},[68,173980,151111],{"class":1742},[68,173982,13923],{"class":78},[68,173984,152695],{"class":1742},[68,173986,89],{"class":78},[68,173988,2616],{"class":85},[68,173990,166375],{"class":78},[68,173992,173993,173996,173998],{"class":70,"line":112},[68,173994,173995],{"class":78},"write_json(",[68,173997,153054],{"class":1742},[68,173999,174000],{"class":78},", students)\n",[14,174002,174004],{"id":174003},"_918-易错点","9.18 易错点",[263,174006,174007,174010,174015,174020,174023,174026],{},[27,174008,174009],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[27,174011,174012,174013,29869],{},"能指定异常类型就不要裸写 ",[65,174014,172117],{},[27,174016,174017,174019],{},[65,174018,172492],{}," 无论是否出错都会执行。",[27,174021,174022],{},"模块文件名不要和标准库重名。",[27,174024,174025],{},"导入自己写的模块时，要注意运行目录。",[27,174027,174028],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174030,174032],{"id":174031},"_919-本章练习","9.19 本章练习",[263,174034,174035,174038,174041,174047,174054],{},[27,174036,174037],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[27,174039,174040],{},"写函数读取文件，如果文件不存在则返回空字符串。",[27,174042,173455,174043,174046],{},[65,174044,174045],{},"math_utils.py","，实现加减乘除函数并导入使用。",[27,174048,174049,174050,174053],{},"创建一个 ",[65,174051,174052],{},"utils"," 包，把 JSON 读写函数放进去。",[27,174055,174056],{},"写一个程序，捕获除零异常和输入格式异常。",[1553,174058,174059],{},"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":63,"searchDepth":82,"depth":82,"links":174061},[174062,174063,174064,174065,174066,174067,174068,174069,174070,174071,174072,174078,174085,174087,174088,174089,174090,174091,174092],{"id":171914,"depth":82,"text":171915},{"id":172042,"depth":82,"text":172043},{"id":172091,"depth":82,"text":172092},{"id":172240,"depth":82,"text":172241},{"id":172412,"depth":82,"text":172413},{"id":172481,"depth":82,"text":172482},{"id":172592,"depth":82,"text":172593},{"id":172718,"depth":82,"text":172719},{"id":172843,"depth":82,"text":172844},{"id":172898,"depth":82,"text":172899},{"id":172997,"depth":82,"text":172998,"children":174073},[174074,174075,174076,174077],{"id":173001,"depth":98,"text":173002},{"id":173035,"depth":98,"text":173036},{"id":173074,"depth":98,"text":173075},{"id":173153,"depth":98,"text":173154},{"id":173176,"depth":82,"text":173177,"children":174079},[174080,174081,174082,174083,174084],{"id":173180,"depth":98,"text":173181},{"id":173263,"depth":98,"text":173264},{"id":173308,"depth":98,"text":173309},{"id":173367,"depth":98,"text":173368},{"id":173405,"depth":98,"text":173406},{"id":173439,"depth":82,"text":174086},"9.13 if name == \"main\"",{"id":173532,"depth":82,"text":173533},{"id":173577,"depth":82,"text":173578},{"id":173688,"depth":82,"text":173689},{"id":173746,"depth":82,"text":173747},{"id":174003,"depth":82,"text":174004},{"id":174031,"depth":82,"text":174032},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171906,"description":1564},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174099,"title":174100,"body":174101,"description":174264,"extension":1565,"meta":174265,"navigation":1567,"path":174266,"seo":174267,"stem":174268,"__hash__":174269},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174102,"toc":174259},[174103,174106,174109,174112,174123,174125,174199,174202,174205,174208,174211,174214,174217,174220,174223,174226,174229],[10,174104,174100],{"id":174105},"python教程",[170,174107,174108],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[170,174110,174111],{},"建议学习环境：",[263,174113,174114,174117,174120],{},[27,174115,174116],{},"Python 版本：Python 3.10 及以上。",[27,174118,174119],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[27,174121,174122],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174124,118552],{"id":118552},[263,174126,174127,174133,174139,174145,174151,174157,174163,174169,174175,174181,174187,174193],{},[27,174128,174129],{},[1867,174130,174132],{"href":174131},".\u002Fch1-Python","Python环境与第一个程序",[27,174134,174135],{},[1867,174136,174138],{"href":174137},".\u002Fch2","基础语法、变量与字符串",[27,174140,174141],{},[1867,174142,174144],{"href":174143},".\u002Fch3","判断语句",[27,174146,174147],{},[1867,174148,174150],{"href":174149},".\u002Fch4","循环语句",[27,174152,174153],{},[1867,174154,174156],{"href":174155},".\u002Fch5","函数基础",[27,174158,174159],{},[1867,174160,174162],{"href":174161},".\u002Fch6","数据容器",[27,174164,174165],{},[1867,174166,174168],{"href":174167},".\u002Fch7","函数进阶",[27,174170,174171],{},[1867,174172,174174],{"href":174173},".\u002Fch8","文件操作",[27,174176,174177],{},[1867,174178,174180],{"href":174179},".\u002Fch9","异常、模块与包",[27,174182,174183],{},[1867,174184,174186],{"href":174185},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[27,174188,174189],{},[1867,174190,174192],{"href":174191},".\u002Fch11","面向对象基础",[27,174194,174195],{},[1867,174196,174198],{"href":174197},".\u002Fch12","综合案例与复习路线",[14,174200,174201],{"id":174201},"学习路线",[170,174203,174204],{},"第一阶段：能运行程序。",[170,174206,174207],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[170,174209,174210],{},"第二阶段：能组织数据。",[170,174212,174213],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[170,174215,174216],{},"第三阶段：能封装逻辑。",[170,174218,174219],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[170,174221,174222],{},"第四阶段：能做小项目。",[170,174224,174225],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174227,174228],{"id":174228},"参考资料",[263,174230,174231,174238,174245,174252],{},[27,174232,174233,174234],{},"黑马程序员 Python 入门教程推荐：",[1867,174235,174236],{"href":174236,"rel":174237},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25350],[27,174239,174240,174241],{},"Python 官方中文教程：",[1867,174242,174243],{"href":174243,"rel":174244},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25350],[27,174246,174247,174248],{},"Python 标准库文档：",[1867,174249,174250],{"href":174250,"rel":174251},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25350],[27,174253,174254,174255],{},"pyecharts 文档：",[1867,174256,174257],{"href":174257,"rel":174258},"https:\u002F\u002Fpyecharts.org\u002F",[25350],{"title":63,"searchDepth":82,"depth":82,"links":174260},[174261,174262,174263],{"id":118552,"depth":82,"text":118552},{"id":174201,"depth":82,"text":174201},{"id":174228,"depth":82,"text":174228},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24864},"\u002Fwiki\u002F2024-10-10-python",{"title":174100,"description":174264},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331429135]